1 背景
从开学到现在大概三个月了,这三个月基本上就是都是在总结面经,皇天不负有心人,终于有offer了,趁入职之前还比较清闲,那就做个总结。
面经总结第一篇–渗透测试、密码学和应急溯源。
下面的部分内容可能引用自其他师傅的文章,有的忘记引用了,侵删。
2 渗透测试流程
正规的渗透测试流程都有六步,分别是信息收集、漏洞扫描、漏洞利用、权限提升&权限维持&内网信息收集、清理日志、总结报告及修复方案。
2.1 信息收集
(1) 获取域名的whois信息,注册者姓名邮箱电话等;
(2) 收集旁站、子域名、测试域名,因为主站一般比较难攻破;
(3) 查看服务器操作系统版本、CMS类型和web中间件,查看是否存在已知的漏洞,比如IIS,APACHE,NGINX的解析漏洞;
(4) 绕过CDN之后对IP地址端口进行扫描,对响应的端口进行漏洞探测,比如21FTP、22SSH、80HTTP、443HTTPS、1433SQL Server、1521Oracle、3306MySQL、3389RDP(远程桌面)、6379Redis、27017MongoDB等。
(5) 使用direarch、dirb、wwwscan和御剑扫描网站目录结构,看看是否存在遍历目录,或者敏感文件泄漏。
(6) Fofa、Google、ZoomEye和Shodan进一步探测网站的信息、后台、敏感文件。
(7) 资产收集:灯塔系统、OneForAll。
2.2 漏洞扫描
开始检测漏洞,我们可以使用漏洞扫描工具:AWVS、Nessus、appscan、xray。同时,配合手动测试,如OWASP Top 10,如果进入内网可以使用fscan扫描或者搭建内网socks5代理进行扫描。
xray_windows_amd64.exe webscan –basic-crawler URL
2.3 漏洞利用
基于漏洞扫描出来的结果可以利用一些方式进行渗透。
2.4 权限提升&权限维持&内网信息收集
(1) 权限提升
渗透过程中一般权限很低,所以我们需要提权。
① MySQL提权:UDF导出提权、MOF加载提权、启动项重启提权;
② Linux提权:脏牛提权;SUID提权、SUDO提权;pkexec提权、配置错误引发提权、第三方服务提权;
③ Windows提权:土豆家族提权;内核漏洞提权;系统配置错误提权;动态链接库DLL劫持提权;BypassUAC提权。
(2) 权限维持
Linux:SUID SHELL、软链接、写SSH key、写定时任务/etc/crontab
Windows:建立隐藏账号、写定时任务schtasks、Winlogin加载DLL、启动项后门、WMI构造无文件后门
(3) 内网信息收集
Windows和Linux思路类似,使用工具linux_information、Cobaltstike和Mimikatz查看系统信息、用户信息、服务信息、安全扫描、主机存活信息;将passwd和shadow文件下载到kali中进行unshadow,随后john跑hash;使用hack browser data解密浏览器数据;使用GoWxDump取证微信聊天记录。
2.5 日志清理
删除攻击日志,湮灭攻击痕迹。
2.6 总结报告及修复方案
对整个渗透测试过程进行总结,并针对目标系统提出修复方案。
3 一次完整的HTTP请求过程
(1) 浏览器通过DNS协议将域名解析IP地址
(2) 浏览器与服务器通过三次握手建立TCP连接
(3) 浏览器向服务器发送HTTP请求
(4) 服务器响应HTTP请求,浏览器得到HTML代码
(5) 浏览器解析HTML代码,并请求HTML代码中的资源
(6) 浏览器与服务器通过四次挥手断开TCP连接
(7) 浏览器对页面进行渲染呈现给用户
3.1 浏览器通过DNS协议将域名解析IP地址
DNS作用就是将域名解析成IP地址。在域名解析过程中,可能会涉及到浏览器缓存、主机hosts配置文件、本地域名服务器、根域名服务器、顶级域名服务器、权限域名服务器。DNS客户端和本地域名服务器之间是递归查询,而本地域名服务器和其他域名服务器之间是迭代查询。
3.2 浏览器与服务器通过三次握手建立TCP连接
为了保证客户端和服务器的可靠连接,TCP建立连接时必须要进行三次会话,也叫TCP三次握手,进行三次握手的目的是为了确认双方的接收能力和发送能力是否正常。
如果采用两次握手会出现以下情况:
客户端向服务器发送的请求报文由于网络等原因滞留,未能发送到服务器,此时连接请求报文失效,客户端会再次向服务器发送请求报文,之后与服务器建立连接,当连接释放后,由于网络通畅了,客户端第一次发送的请求报文又突然到达了服务器,这条请求报文本该失效了,但此时服务器误认为客户端又发送了一次连接请求,两次握手建立好连接,此时客户端忽略服务器发来的确认,也不发送数据,造成不必要的错误和网络资源的浪费。
如果采用三次握手的话,就算那条失效的报文发送到服务器,服务器确认并向客户端发送报文,但此时客户端不会发出确认,由于客户端没有确认,服务器没有接收到确认,就会知道客户端没有请求连接。
3.3 浏览器向服务器发送HTTP请求
一个HTTP请求报文由请求行(request line)、请求头部(headers)、空行(blank line)和请求数据(request body)4个部分组成。
HTTP请求方法有9种,分别是GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE和CONNECT。其中GET和POST最常用,GET请求指定页面信息并返回相关资源信息。POST请求向指定页面提交数据,数据被包含在请求体中,可能会修改资源信息。
3.4 服务器响应HTTP请求,浏览器得到HTML代码
HTTP响应报文由状态行(status line)、响应头部(headers)、空行(blank line)和响应数据(response body)4个部分组成。
HTTP状态码主要有信息响应(100–199),成功响应(200–299),重定向(300–399),客户端错误(400–499)和服务器错误(500–599)。
常见的HTTP状态码:200请求成功,301资源(网页等)被永久转移到其它URL,404请求的资源(网页等)不存在,500内部服务器错误。
3.5 浏览器解析HTML代码,并请求HTML代码中的资源
浏览器拿到HTML文件后,开始解析HTML代码,遇到js/css/image静态资源时,就向服务器请求下载。
3.6 浏览器与服务器通过四次挥手断开TCP连接
为什么客户端发送完最后一次报文要等待2MSL?
保证TCP的全双工连接能够可靠关闭;保证这次连接的重复数据段从网络中消失。主要原因是为了保证客户端发送的最后一个ACK报文能到达服务器,因为这个ACK报文可能丢失,并且2MSL是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃,这样新的连接中不会出现旧连接的请求报文。
3.7 浏览器对页面进行渲染呈现给用户
浏览器利用自己内部的工作机制,把请求的静态资源和HTML代码进行渲染,渲染之后呈现给用户。
在HTTP请求过程中,应用层通过DNS查询IP、通过Socket发送数据;传输层建立TCP或UDP连接;网络层IP协议查询MAC地址;数据链路层传输以太网帧。
4 session和cookie的区别
session和cookie本质上是一样的,都是通过HTTP请求包中的cookie进行传输,只是服务端的处理过程不一样。
对于cookie来说,用户数据直接就在请求头当中,服务端直接获取使用;而对于session来说,请求头中存在SessionID字段,真正的数据存储在服务端中,服务端通过SessionID去读取文件或数据库来获取真正的内容。
cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session;session会在一定时间内保存在服务器上,当访问增多,会比较占用服务器的性能,考虑到减轻服务器性能,应当使用cookie。
5 对称和非对称加密算法
5.1 非对称加密算法
加密和解密使用不同密钥,使用公钥加密和私钥解密的操作是加解密,使用私钥加密和公钥解密的操作是签名。常见的非对称加密算法包括RSA(大数分解问题)、ECC和SM2(椭圆曲线离散对数问题)、Elgamal(离散对数问题)。
对于RSA算法来说,主要涉及密钥生成、加密和解密三个阶段。
(1) 密钥生成:
① 首先使用随机数生成器生成两个大奇数p和q,并利用Miller-Rabin算法对p和q进行素性检验,然后计算n=p×q,Eular函数φ(n)=(p-1)×(q-1)
② 接着利用欧几里得算法求e和φ(n)的最大公约数,满足gcd(φ(n),e)=1且1<e<φ(n)
③ 最后根据(ed)modφ(n)=1利用辗转相除法求e的模逆d
得到:公钥为{e,n},私钥为{d}
(2) 加密:明文m<n,密文c=m^e modn
(3) 解密:密文c,明文m=c^d modn
RSA的安全性完全依赖于大数分解问题,目前有如下常用的攻击手段:
(1) n分解攻击:完全尝试所有小于√n的素数;
(2) 共模攻击:同一系统中不同用户的公钥有相同的模值n;
(3) 低加密指数攻击:小公钥可加快加密的速度,但过小的公钥易受到攻击。
ECC加密和解密的操作都是基于椭圆曲线上的点的运算,安全性基于椭圆曲线离散对数问题的难度,即在给定椭圆曲线上的两个点P和Q的情况下,找到使得nP=Q的整数n的难度。与RSA算法相比,ECC在相同的安全级别下拥有更短的密钥长度和更快的加解密速度,因此在移动设备、物联网等资源有限的环境下得到广泛应用,二代身份证也使用ECC。
5.2 对称加密算法
对称加密算法的加密和解密使用相同密钥,之前了解过分组密码AES和SM4。AES算法主要有四个步骤,分别是密钥扩展、初始轮、多轮加密和最终轮。其中多轮加密包括字节代换、行移位、列混淆、轮密钥加4个步骤,最终轮不包括列混淆,明文分组长度和密钥长度可以为128、192、256位,针对AES算法的攻击手段有差分分析和线性分析。
SM4算法主要包括32次非线性迭代运算和1次反序变换,数据解密和加密的算法结构相同,但轮密钥的使用顺序相反,分组明文和密钥长度都是128位。
6 应急溯源
6.1 Linux应急流程
(1) 先查看/etc/passwd是否有新建用户,如果有用userdel删除;
(2) 查看/var/log下的登录日志是否有登录痕迹,若有,查看用户home目录下的bash历史命令。
(3) ps -ef或者ps -aux查看是否有木马进程,netstat命令查看是否有正在通信的陌生IP,以及是否新开了对外端口,查看服务日志,判断入侵者是怎么入侵进来的;
(4) 查看文件修改时间,判断是否有文件被修改;
(5) 查看定时任务/etc/crontab以及SSH公钥文件,是否有遗留后门;
(6) 将系统所有可登录用户密码进行更改。
6.2 常见的溯源手段
IP定位:通过IP反查域名并获得whois信息、通过IP端口扫描和威胁情报工具反向渗透服务器、根据IP定位物理地址;
ID追踪:通过搜索引擎、社交平台、技术论坛和社工库获取攻击者的身份;
攻击程序分析:利用多种在线云沙箱分析钓鱼样本,手工提取样本特征;
蜜罐:获取攻击者的主机信息、浏览器信息和真实IP,对攻击源攻击者进行画像分析,甚至反制。
7 HTTP与HTTPS区别;HTTPS工作流程
7.1 HTTP与HTTPS区别
(1) 加密:HTTP数据明文传输,安全性差,HTTPS数据加密传输,安全性好;
(2) 证书:HTTPS需要到CA申请证书;
(3) 响应速度:HTTP页面响应速度比HTTPS快,主要是因为HTTP使用TCP三次握手建立连接,客户端和服务器需要交换3个包,而HTTPS总共需要12个包,TCP的三个握手包和SSL握手需要的9个包;
(4) 端口:HTTP和HTTPS使用的端口也不一样,分别是80和443;
(5) 消耗资源:HTTPS其实就是建构在SSL/TLS上的HTTP协议,所以HTTPS比HTTP要更耗费服务器资源。
7.2 HTTPS工作流程
(1) TCP三次握手建立连接
(2) 客户端验证服务器数字证书
(3) Diffie–Hellman算法协商对称加密算法的密钥、HASH算法的密钥
(4) 网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的HASH算法进行数据完整性保护,保证数据不被篡改。
8 Kerberos认证协议;黄金票据和白银票据的区别、伪造条件、防御手段;委派攻击
8.1 Kerberos认证协议
当客户端想要访问SS的某个服务时,首先向AS发起认证请求,验证通过后AS会返回一个TGT,随后客户端向TGS发起认证请求,验证通过后TGS会返回一个ST,最后客户端向SS发起认证请求,验证通过后SS会返回所请求的服务。
【注】
AS(Authentication Server, 认证服务器)
KDC(Key Distribution Center, 密钥分发中心)
TGT(Ticket Granting Ticket, 票据授权票据)
TGS(Ticket Granting Server, 票据授权服务器)
SS(Service Server, 特定服务提供端)
ST(TGS Ticket, TGS票据)
8.2 黄金票据和白银票据的区别
黄金票据是伪造TGT,白银票据是伪造ST。
黄金票据:抓取域控中krbtgt账号的NTLM Hash,在客户端生成一个TGT票据,该票据针对所有机器的所有服务。
白银票据:抓取域控服务账号的NTLM Hash,在客户端以一个普通域用户的身份生成ST票据,该票据只能访问指定的目标机器中指定的服务。
8.3 黄金票据和白银票据的伪造条件
黄金票据伪造条件:
(1) 域名称
(2) 域的SID值
(3) 域的krbtgt账号的NTLM Hash
(4) 伪造任意用户名
白银票据伪造条件:
(1) 域名称
(2) 域的SID值
(3) 目标服务器名
(4) 可利用的服务
(5) 服务账号的NTML Hash
(6) 伪造的用户名
8.4 黄金票据和白银票据的防御手段
黄金票据防御手段:
(1) 定期更改krbtgt的密码,使原有的票据认证失效;
(2) 禁止域管理员登入其他服务器,防止域管理员的NTLM等登录记录留存在其他服务器被窃取。
白银票据防御手段:
(1) 安装漏洞补丁,防止PTH传递;
(2) 开启PAC(Privileged Attribute Certificate)特权属性证书保护功能,PAC主要是规定服务器将票据发送给kerberos服务,由kerberos服务器验证票据是否有效。
8.5 委派攻击
域委派是将域用户的权限委派给机器账号或服务账号,委派之后,机器账号或服务账号就能以域用户的身份去做域用户能够做的事。
[1] https://bbs.huaweicloud.com/blogs/396536
[2] https://bbs.huaweicloud.com/blogs/394419
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,可以邮件至 xingshuaikun@163.com。