# Pentest

> 实战黑盒 Web 渗透测试 / SRC / Bug bounty 工作流 skill。5 阶段 checkpoint 工作流（intake → recon → enum → hunt → report）+ 19 类攻击 playbook + 48 个可执行 Python 脚本（自动扫描/验证/报告）+ 305 payload + 263 WAF 绕过 + 2887 份 H1 真实案例 + 国产组件字典 + 银行/电信行业 playbook。 触发词：渗透测试、安全扫描、漏洞挖掘、bug bounty、SRC、hackerone、漏洞赏金、众测、任意X漏洞、WAF绕过、pentest

- Skill: `wudidike/pentest` (Agent Skill, multi-file: 11 files)
- Install (CLI): `npx skillmds@latest add wudidike/pentest`
- Raw SKILL.md: https://api.skillmd.com/api/skills/wudidike/pentest/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: wudidike (https://skillmd.com/u/wudidike)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/wudidike/pentest

---


# Pentest Skill — 实战漏洞挖掘工作流

这是一个**带强制 checkpoint 的工作流**,不是参考手册。每个阶段有 MUST 输出,未通过不进下一阶段。详细 payload / playbook / H1 案例**按需 Read**,不准凭记忆生成。

数据规模、目录树见 `README.md`,本文件只管"做什么 / 何时做 / 何时去读哪个文件"。

---

## 触发条件

命中任一即进入:
- "src 挖洞 / 漏洞赏金 / bug bounty / 众测 / hackerone / Security Response Center"
- "如何挖 / 怎么测 / 怎么打 + 某目标 / 某接口 / 某参数"
- "WAF 绕过 / 任意账号 / 任意修改 / 密码重置 / 未授权访问 / 默认凭据"
- "渗透测试 / pentest / 安全扫描 / 漏洞验证"
- 用户给一个 URL / API endpoint / APK 让你测

**不应触发**:纯白盒源码审计;漏洞修复问答;CTF。

---

## 反幻觉硬约束(全程适用)

1. **不准凭记忆出 payload**。要给任何 payload 前,先 Read 对应 `references/playbooks/<type>.md`(或 `<type>/00-index.md` + 具体子文件)。payload 必须能在文件里查到出处。
2. **不准编造案例编号**。引用 H1 案例前必须 Read `references/h1-reports/by-weakness/` 下的实际文件。说不出文件路径就别引。
3. **无证据不下结论**。无 HTTP 包/截图时只能写"待验证",不写"已确认 / 发现漏洞"。
4. **出 scope 立即停**。资产不在 Phase 1 已确认的 in-scope → 立即停手,回 Phase 1 重核。
5. **差分证明**。盲注要真/假/baseline 三包;IDOR 要自己200+他人200+不存在404。
6. **合规红线**。SQLi 探到库名即停;IDOR 取1-3条样本;RCE 只跑 id/whoami;不真发短信/扣款。详见 `references/compliance.md`。
7. **报告必须含 PoC,双格式**。每个 finding 必须附可执行 PoC,且必须同时给两种格式:
   - **curl 格式**: 单条 `curl` 命令,复制到终端直接执行即可复现 (含完整 URL/Header/Body/参数)
   - **Burp 格式**: HTTP 原始请求报文 (请求行+头+空行+Body),复制粘贴到 Burp Repeater 即可发送
   - 给不出 PoC 的 finding 不得写入报告 — 要么补证据,要么降级为"待验证"。

---

## Phase 1 · Intake(接单)

**进入条件**:用户首次给出目标 / 程序名 / URL。

**MUST 输出 checkpoint**(四项缺一不进 Phase 2):

- [ ] **In-scope**:可测域名 / IP 段 / app / endpoint(逐条列)
- [ ] **Out-of-scope**:禁测项(逐条列)
- [ ] **规则**:payout tier / disclosure window / safe-harbor / 测试 header
- [ ] **时间盒**:6h / 单日 / HVV / 月度

确认后写入 `config.yaml` 的 `target.scope`。**越界急停**:任何 Phase 中发现资产不在 in_scope → 立即停。

**仅当用户问"哪个最值得先测"** → Read `references/methodology/05-srctimebox-priority.md`。

---

## Phase 2 · Recon(被动侦察)

**进入条件**:Phase 1 checkpoint 四项全过。**禁止主动发包。**

**MUST 输出**:不发包得到的资产清单 + 历史信息,来源 ≥3 种(CT日志/Wayback/GitHub dorks/FOFA/Shodan/SecurityTrails/ASN)。

---

## Phase 3 · Enum(主动探测)

**进入条件**:Phase 2 资产清单非空。

**MUST 输出**:活资产矩阵——`域 → 端口 → 服务 → 指纹 → JS endpoint`。

**自动化工具**(按需调用,非自动管道):
- 指纹/WAF: `python scripts/phase0_fingerprint.py --target URL --output-dir DIR`
- 页面渲染/JS提取: `python scripts/phase4_render.py --target URL --output-dir DIR`
- 目录枚举: `python scripts/phase5_dir_enum.py --target URL --output-dir DIR`
- JS深度分析: `python scripts/phase6_js_analysis.py --target URL --output-dir DIR`
- 工具状态: `python scripts/tool_manager.py status`

**条件触发 Read**(命中就必读):

| 命中信号 | MUST Read |
|---|---|
| 指纹含 `weaver/seeyon/tongda/landray/yongyou/kingdee/hikvision/dahua` | `references/dictionaries/chinese-srcfingerprints.md` + `default-credentials-cn.md` |
| 资产含 银行/支付/网银 | `references/industry/banking-finance.md` |
| 资产含 运营商/BOSS/网管 | `references/industry/telecom-isp.md` |

**方法论 Checkpoint(每次必走,不进 Phase 4 不得跳过)**:

1. Read `references/methodology/01-attack-priority.md`(攻击优先级)
2. 按 §9 Checkpoint 输出**攻击面优先级清单**:候选攻击面四维评分 + P0/P1 排序 + 升级链 + 对应探针
3. 时间盒明确时,额外 Read `references/methodology/05-srctimebox-priority.md` 按 §6 输出时间盒计划
4. 读完后把优先级清单作为 Phase 4 的候选目标顺序

---

## Phase 4 · Hunt(漏洞探测)

**进入条件**:Phase 3 矩阵 ≥1 个候选目标。

**强制流程(每个候选目标走一遍)**:
1. 看目标信号,从下表选 playbook
2. **Read 该 playbook**(不准跳过、不准凭记忆替代)
3. 按 playbook 的参数频率表挑入口
4. 按 playbook 的 payload 库探测——payload 来自文件,不来自记忆
5. 被 WAF 拦 → Read `references/methodology/02-bypass-toolkit.md` 并按 §Checkpoint 输出绕过记录
6. 卡壳/找不到漏洞点 → Read `references/methodology/04-control-gap-hunting.md` 并按 §Checkpoint 输出控制缺口清单
7. 命中后保存 HTTP 包, Read `references/methodology/03-evidence-discipline.md` 按 §Checkpoint 核对证据(三包/原貌/复现率) → 进 Phase 5

| 入口信号 | MUST Read | 自动化脚本(按需) |
|---|---|---|
| Actuator/Swagger/弱密码 | `playbooks/unauth-access.md` | — |
| .git/.svn/.env/heapdump | `playbooks/info-disclosure.md` | — |
| ID 可遍历/任意X越权 | `playbooks/arbitrary-x-authz.md` | `phase7b_auth_vuln.py` |
| 密码重置/支付/验证码 | `playbooks/logic-flaws/00-index.md` | `phase7n_logic_vuln.py` |
| OAuth/SAML/JWT | `playbooks/oauth-saml-jwt/00-index.md` | `phase7o_jwt_vuln.py` |
| REST API/BOLA/Mass Assignment | `playbooks/api-rest/00-index.md` | `phase7b_auth_vuln.py` |
| 用户输入进 DB | `playbooks/sqli.md` | `phase7d_sqli_verify.py` |
| 反序列化/SSTI/XXE/框架RCE | `playbooks/rce/00-index.md` | `phase7k_deser_vuln.py` / `phase7i_ssti_vuln.py` / `phase7j_xxe_vuln.py` |
| URL入参/缓存/Host注入 | `playbooks/ssrf-cache-host/00-index.md` | `phase7h_ssrf_vuln.py` |
| 文件路径入参/LFI/RFI | `playbooks/path-traversal/00-index.md` | — |
| 上传点+解析漏洞 | `playbooks/file-upload/00-index.md` | `phase7l_upload_vuln.py` |
| 用户输入回显HTML/JS | `playbooks/xss/00-index.md` | `phase7m_param_fuzz.py` |
| 反代+CL/TE | `playbooks/http-smuggling.md` | `phase7q_smuggling_vuln.py` |
| GraphQL endpoint | `playbooks/graphql.md` | `phase7p_graphql_vuln.py` |
| 并发/TOCTOU | `playbooks/race-conditions.md` | — |
| ReDoS/资源不限速 | `playbooks/dos.md` | — |
| APK/IPA/移动端 | `playbooks/mobile.md` | — |
| LLM agent/prompt | `playbooks/llm-prompt-injection/00-index.md` | — |
| 已拿shell/内网 | `playbooks/intranet-postexp/00-index.md` | — |
| 命令注入 | (rce/ 子文件) | `phase7g_cmdi_vuln.py` |
| 框架漏洞(Log4j/Shiro/Fastjson) | (rce/ 子文件) | `phase7f_framework_vuln.py` |
| 参数Fuzz(XSS/SQLi/SSTI/SSRF) | (对应 playbook) | `phase7m_param_fuzz.py` |
| 403/401绕过 | (对应 playbook + methodology/02) | `phase7r_bypass_vuln.py` |

**两步 Read 模式**:目录形式 playbook 先 Read `00-index.md`(路由表),再 Read 具体子文件。单文件直接 Read。

**通用方法论**(卡壳时 Read):
- 不知打什么 → `references/methodology/01-attack-priority.md`
- 被 WAF 拦 → `references/methodology/02-bypass-toolkit.md`
- 检查证据链 → `references/methodology/03-evidence-discipline.md`
- 找不到漏洞点 → `references/methodology/04-control-gap-hunting.md`

**验证与证据**(命中后):
- 自动验证: `python scripts/phase7a_auto_verify.py --output-dir DIR`
- SQLi验证: `python scripts/phase7d_sqli_verify.py --target URL`
- 证据汇总: `python scripts/phase7e_evidence.py --output-dir DIR`

---

## Phase 5 · Report(提交)

**进入条件**:Phase 4 至少一个 finding 有可重现 HTTP 包。

**MUST 流程**:
1. Read `references/compliance.md` 核对合规红线
2. Read `references/templates/report-submission.md` 取提交模板
3. 自动报告: `python scripts/phase8_report.py --output-dir DIR`
4. **每个 finding 附 PoC(双格式)**: curl 可执行命令 + Burp raw 报文,缺一不进报告
5. **PoC 校验门**: `python scripts/check_report_poc.py <report.md>` — 任何 high/medium finding
   缺 curl 或 HTTP 报文 → 校验失败,报告不可提交
6. 三段式输出: 标题(≤80字) + 重现步骤(带HTTP包+PoC) + 影响+修复(CVSS+业务影响)

---

## 脚本工具索引

> 48 个 Python 脚本,按需调用。非自动管道——你判断方向,需要时调脚本。

| 类别 | 脚本 | 用途 |
|------|------|------|
| 侦察 | `phase0_fingerprint.py` | 指纹/WAF/安全头 |
| 侦察 | `phase4_render.py` | Playwright渲染/JS提取 |
| 侦察 | `phase4b_session.py` | Session捕获 |
| 侦察 | `phase5_dir_enum.py` | 目录枚举(ffuf→fuzz_engine) |
| 侦察 | `phase6_js_analysis.py` | JS分析/端点验证 |
| 扫描 | `phase7_vuln_scan.py` | nuclei+VulnOrchestrator |
| 验证 | `phase7a_auto_verify.py` | 自动验证/误报排除 |
| 验证 | `phase7b_auth_vuln.py` | IDOR/越权/JWT |
| 验证 | `phase7c_manual_verify.py` | 手工验证辅助 |
| 验证 | `phase7d_sqli_verify.py` | SQLi验证(sqlmap) |
| 证据 | `phase7e_evidence.py` | 证据汇总(必须) |
| 专项 | `phase7f_framework_vuln.py` | 框架漏洞 |
| 专项 | `phase7g_cmdi_vuln.py` | 命令注入 |
| 专项 | `phase7h_ssrf_vuln.py` | SSRF |
| 专项 | `phase7i_ssti_vuln.py` | SSTI |
| 专项 | `phase7j_xxe_vuln.py` | XXE |
| 专项 | `phase7k_deser_vuln.py` | 反序列化 |
| 专项 | `phase7l_upload_vuln.py` | 文件上传 |
| 专项 | `phase7m_param_fuzz.py` | 参数Fuzz |
| 专项 | `phase7n_logic_vuln.py` | 业务逻辑 |
| 专项 | `phase7o_jwt_vuln.py` | JWT |
| 专项 | `phase7p_graphql_vuln.py` | GraphQL |
| 专项 | `phase7q_smuggling_vuln.py` | HTTP走私 |
| 专项 | `phase7r_bypass_vuln.py` | 403/401绕过 |
| 报告 | `phase8_report.py` | 最终报告(必须) |
| 工具 | `tool_manager.py status` | 工具状态检查 |
| 工具 | `health_check.py` | 环境检查 |
| 工具 | `cli.py` | 统一CLI入口 |

**公共参数**: `--target --output-dir --config --verbose`
**降级**: nuclei→Python, ffuf→fuzz_engine.py, subfinder→crt.sh, nmap→socket

---

## MCP 工具集成

默认 `mcp__jshook__search_tools` + `mcp__jshook__activate_tools` 按需激活。完整索引 Read `references/tools-src-hunter/mcp-jshook.md`。

