渗透测试是一项系统性的安全评估活动,旨在模拟攻击者的行为以发现目标系统的潜在安全风险。一个规范的渗透测试过程通常遵循PTES(渗透测试执行标准)等框架,并包含信息搜集、漏洞挖掘、建立据点、权限提升与内网渗透以及取证溯源等关键阶段。本文将详细拆解这一完整流程,为安全从业者提供清晰的思路指引。
一、信息搜集:一切的开端
信息搜集是渗透测试的基石,其核心在于尽可能全面地描绘目标画像。
1. 主机扫描
- 存活主机发现:扫描目标网段,识别在线的主机。可使用御剑高速端口扫描器等工具,在扫描端口的同时探测存活IP。
- 端口与服务识别:扫描主机开放的端口及其对应服务。NMap 是此阶段的首选工具,虽然速度可能稍慢,但其信息全面且准确度高。
- 操作系统与版本探测:同样可以使用 NMap 或 Nessus 来识别目标主机的操作系统类型及具体版本号。
- 已知漏洞扫描:结合 NMap 的脚本引擎与 Nessus 等专业漏洞扫描器,对主机可能存在的公开漏洞进行初步探测。
2. Web应用扫描
- 域名与子域名发现:使用子域名挖掘机等工具收集目标的所有关联域名。Dirsearch 等目录扫描工具也可用于发现隐藏的子域名或路径。
- WHOIS信息查询:通过在线站点查询域名的注册人、联系方式等敏感信息。
- URL路径与后台入口探测:使用 Dirsearch 或 Dirb 配合强大的字典,扫描Web应用的目录、文件及后台管理入口。
- 常规漏洞扫描:利用 AWVS、Nessus 等自动化工具对Web应用进行全面的漏洞扫描。
- 重要概念:此处的“Web”泛指所有基于HTTP/HTTPS协议的应用,不限于传统的网页。
3. 功能分析
深入分析目标应用的功能点,寻找逻辑缺陷。
- 分析登录、注册、密码重置等核心功能,可能存在SQL注入(如通过代码审计发现的注册逻辑问题)、逻辑漏洞等风险。
- 尝试注册并登录,体验所有用户可操作的功能。
- 定位所有强交互功能点:URL跳转、评论、文件上传/下载/引用等。
- 探查后台管理功能,如文件管理、数据库查询、命令执行、系统配置等。
- 重点关注密码重置流程,这是逻辑漏洞(如图片验证码失效、短信轰炸、支付金额篡改等)的高发区。
4. 抓包分析
通过分析请求与响应,洞察应用内部逻辑。
- 前端源码审计:审查HTML/JS源代码,寻找敏感信息、隐藏接口或可能存在XSS、CSRF漏洞的点。
- 关键功能抓包:使用 BurpSuite 或 Fiddler 拦截请求,推测后端实现逻辑。
- 编码与加密分析:检查数据是否采用Base64、时间戳、哈希或特定框架(如JWT、Shiro)的编码/加密方式,这些信息可能泄露在Cookie或请求体中。
- 会话分析:分析Session和Cookie的生成、传递与验证机制,寻找认证绕过或信息泄露的可能。
- 常用工具:BurpSuite、Fiddler、Wireshark、科来网络分析仪。
5. 常用工具汇总
- 主机扫描:NMap, Nessus
- Web扫描:XRay + Rad, AWVS, AppScan, SQLMap, XSStrike, Dirb, 御剑
- 在线信息搜集:ZoomEye, FOFA, Shodan, 微步在线,以及万网、企查查等商业信息平台。
二、漏洞挖掘与利用
在信息搜集的基础上,针对性地寻找和利用安全漏洞。
- 已知EXP利用:直接搜索并利用目标框架(如Struts2)、CMS或中间件的公开漏洞利用工具。
- 暴力破解:当验证码可绕过时,使用各类密码字典进行尝试。BurpSuite 的Intruder模块功能强大,也可使用Hydra等专用工具或自行编写 Python脚本 进行自动化破解。
- 逻辑漏洞挖掘:密码重置功能是重中之重。攻击面包括:重置凭证接收端可篡改、泄漏、未校验、可爆破、用户混淆、应答参数影响逻辑、Token可预测等。测试时,重点尝试在请求中替换用户名或身份标识为他人。
- JS信息泄露:分析前端JavaScript代码,可能发现内部API接口、敏感路径或业务逻辑参数,为构造请求提供线索。
- 后台漏洞利用:针对发现的上传点(传WebShell)、查询点(SQL注入)、命令执行点等,结合漏洞知识库进行深入测试。
- 代码审计:若获得源码,可通过RIPS、Fortify SCA等工具进行自动化审计,或人工审计以精确定位漏洞并构造Payload。
常用工具:Hydra, Metasploit Framework, 反序列化利用工具,RIPS(代码审计),蚁剑/哥斯拉(WebShell管理)。
三、建立据点:获取稳定控制
成功利用漏洞后,通常仅获得一个不稳定的WebShell,需要建立更稳定、持久的控制通道。
1. 反弹Shell
将目标的Shell会话反弹到攻击者控制的服务器上,以获得一个交互式、稳定的命令行环境。
2. 可能遇到的障碍与绕过
- 命令不存在:使用
whereis 检查 nc, bash, python, php, perl 等常见命令是否存在,寻找替代品。
- 禁止出口流量:防火墙可能阻止内网主机主动向外发起连接。可通过DNS、HTTP等带外(OOB)通道进行验证和利用。
- 端口限制:目标可能只允许访问外部特定端口(如80、443)。此时需将反弹Shell的监听端口设置为这些允许的端口。
- 流量审查:IDS/IPS可能检测Shell流量特征。可使用OpenSSL对反弹Shell的流量进行加密,或利用HTTPS等加密协议进行隧道传输,以规避检测。
3. 确认环境与制作木马
- 获取系统详细信息(OS版本、运行服务、可用执行环境、网络策略)。
- 根据环境制作定制化木马,并考虑持久化与免杀。
- 内存马:木马仅存在于内存中,重启即失效。例如:
<?php set_time_limit(0); assert($_POST['a']); unlink('shell.php'); ?>
- 不死马:在内存马基础上,通过循环写文件、创建计划任务等方式实现持久化,难以清除。
- 免杀技术:通过代码混淆、加密、编码等方式改变木马静态特征,并利用动态行为规避沙箱检测。
4. 常用工具
Metasploit Framework, Cobalt Strike。
四、权限提升与内网渗透
1. 权限提升
初始获得的WebShell权限通常较低(如www-data)。提权方法包括:
- 利用内核漏洞(栈溢出)。
- 搜寻配置文件、日志中的明文密码或散列值。
- 利用环境变量劫持、不安全的服务配置、SUID/SGID程序滥用、sudo配置错误等。
- 借助权能(Capabilities)或计划任务(Cron Job)进行提权。
2. 权限维持
在获取高权限(如root)后,需部署后门、创建隐藏账户、安装Rootkit或设置计划任务,以确保在系统重启或清理后仍能维持访问。
3. 内网穿透与横向移动
以内网受控主机为跳板,进行横向移动,渗透同一网络内的其他主机。
- 内网穿透:使用Frp、Cobalt Strike的Socks代理等功能,在攻击机和内网主机之间建立稳定通道。
- 内网渗透:过程与外网渗透类似,但更注重隐蔽性和对内部协议(如SMB、WinRM、数据库服务)的攻击。主要场景:
- 办公网:可能存在域环境,常通过社工、钓鱼等方式进入,侧重于信息收集与域控攻击。
- 服务器区:以已控服务器为跳板,扫描和攻击内网其他服务器。
5. 常用工具
- 提权:MSF, Linux/Windows Exploit Suggester。
- 内网渗透:Cobalt Strike, Ladon, Impacket工具包。
- 穿透代理:Frp, Neo-reGeorg, Cobalt Strike。
五、取证溯源
作为防御方视角,在安全事件发生后进行溯源分析。
- 数据恢复:对删除的文件进行恢复(前提是存储空间未被覆盖)。低级格式化或多次覆盖后数据难以恢复。
- 日志分析:检查系统日志、应用日志、安全设备日志,追踪攻击者行为路径。
- 流量分析:对全流量或特定时间段的流量包进行分析,还原攻击过程。
- 社工库查询:利用泄露的密码库等信息,关联攻击者身份。
|