黑盒Web渗透测试编排技能,自动执行全流程侦察与漏洞验证。 触发词:渗透测试、安全扫描、漏洞挖掘、漏洞验证、pentest、安全评估、渗透、 子域名枚举、端口扫描、指纹识别、目录爆破、IDOR测试、未授权测试、越权测试
Resources
9Install
npx skillscat add wudidike/pentest-skill Install via the SkillsCat registry.
Pentest Skill v3.2 — 黑盒Web渗透测试
CLI脚本驱动,AI Agent编排。详细Phase指令见 phases/ 目录。
安装
# 一键安装(推荐)
git clone <repo-url> && cd pentest && bash setup.sh
# 或手动安装
pip install -r requirements.txt
# 可选: Playwright 深度渲染(Phase 4)
pip install playwright && python -m playwright install chromium
# 可选: sqlmap SQL注入验证(Phase 7D)
pip install sqlmap
# 环境检查
python scripts/health_check.py要求: Python >= 3.9, pip
环境隔离
v2.7 新增:
health_check.py和tool_manager.py自动检测 Python 运行环境类型,防止 pip 污染系统级包。
环境类型识别
| 环境类型 | 说明 | pip 安装目标 |
|---|---|---|
workbuddy |
WorkBuddy Desktop managed Python | managed Python site-packages |
venv |
Python venv 虚拟环境 | venv 内 site-packages(隔离 ✓) |
conda |
Conda 虚拟环境 | conda env 内(隔离 ✓) |
system |
系统级 Python | 系统 site-packages(⚠ 有污染风险) |
检测命令
# 一键检查环境隔离状态
python scripts/health_check.py
# 查看 tool_manager 识别的环境信息
python scripts/tool_manager.py statusWorkBuddy 环境自动适配
在 WorkBuddy Desktop 中运行时:
tool_manager.py自动检测~/.workbuddy/binaries/python/versions/下的 managed Python- 如果 venv 存在(
~/.workbuddy/binaries/python/envs/default/),自动使用 venv 的 pip - 所有
pip install操作自动路由到隔离环境,不污染系统 Python
非 WorkBuddy 环境建议
# 创建 venv(推荐)
python -m venv .venv
.venv\Scripts\activate # Windows
source .venv/bin/activate # Linux/macOS
# 然后运行
pip install -r requirements.txt
python scripts/health_check.py⛔ 强制规则
- 读 config.yaml — 确认
report_language(默认zh-CN)、proxy、wordlist - 走完管道 — Phase 7A(验证)、7E(证据)、8(报告) 不可跳过
- 读 result.json — 每个Phase完成后读取,确认
next_phase_input - 证据驱动 — 每个漏洞必须有完整HTTP数据包证据
- 报告语言 — 使用 config.yaml 的 report_language,不得自作主张
- 反幻觉约束 — 给 payload / 绕过手法前,必须先 Read 对应 payload 文件(
references/payloads/*.txt或references/dictionaries/*.md),不准凭记忆编造 payload。记忆中的 payload 可能有拼写错误、版本过时或上下文不匹配。 - 差分证明 — 漏洞断言需要对照组:盲注要真/假/baseline 三包;IDOR 要自己资源200+他人资源200+不存在资源404;越权要普通用户403+管理员200+绕过200。
- 合规红线 — 见
references/severity.md最后一节。核心:SQLi 探到库名即停不 dump;IDOR 取 1-3 条样本即停;RCE 只跑id/whoami/uname -a;不真发短信/扣款/改密码;webshell 报告后删除。
快捷命令
| 用户输入 | 映射到 |
|---|---|
| "渗透测试 TARGET" / "pentest TARGET" | 完整管道 (Phase 0→8) |
| "侦察 TARGET" / "recon TARGET" | Phase 0 + 4 + 5 + 6 |
| "扫描 TARGET" / "scan TARGET" | Phase 7 + 7A + 7E + 8 |
| "测试 SQL 注入 URL" | Phase 7D |
| "测试 XSS URL" | Phase 7M (xss only) |
| "生成报告" | Phase 7E + 8 |
开工检查清单
□ 1. 读 config.yaml
□ 2. python scripts/health_check.py ← v2.7 含环境隔离检测
□ 3. python scripts/tool_manager.py status ← 含环境类型展示
□ 4. 更新 Payload/CVE 数据库:
python scripts/updates/update_manager.py --cve --days 7 --technologies <目标技术栈>
python scripts/updates/update_manager.py --payloads --source local
→ 询问用户: 是否需要更新? (Y/N)
□ 5. 检查工具可用性 (nuclei/ffuf/nmap/sqlmap):
→ 可用: 继续
→ 不可用: 询问用户: "工具 X 不可用,是否安装? 或使用 Python 降级方案?"
→ 用户选择安装: 运行 python scripts/tool_manager.py install <tool>
→ 用户选择降级: 记录降级方案,继续执行
□ 6. 检查 Playwright: python -c "from playwright.sync_api import sync_playwright"
→ 不可用: 询问用户是否安装 (~120MB)
→ 可用: 检查浏览器: python -m playwright install chromium --dry-run
□ 7. 询问操作者: URL模式(A) 或 域名模式(B)
□ 8. 创建 output-dir
□ 9. 按模式顺序执行 Phase模式选择
收到目标后询问:
请选择:
A) URL模式 — 从单个URL开始
B) 域名模式 — 子域名→IP→端口→漏洞扫描URL模式流程:phases/recon.md → phases/vuln-scan.md → phases/report.md
域名模式流程:Phase 0→1→2→3→4→4B→5→6→7→7A→7B→7F→7G→7H→7I→7J→7K→7L→7N→7M→7D→7E→8
Phase 概览
| Phase | 脚本 | 功能 |
|---|---|---|
| 0 | phase0_fingerprint.py |
指纹/技术栈/WAF/安全头 |
| 1 | phase1_subdomain.py |
子域名枚举(域名模式) |
| 2 | phase2_dns_resolve.py |
DNS解析(域名模式) |
| 3 | phase3_port_scan.py |
端口扫描(域名模式) |
| 4 | phase4_render.py |
Playwright渲染/JS提取/API发现 |
| 4B | phase4b_session.py |
Session捕获 |
| 5 | phase5_dir_enum.py |
目录枚举(ffuf→fuzz_engine) |
| 6 | phase6_js_analysis.py |
JS分析/端点验证/密钥检测 |
| 7 | phase7_vuln_scan.py |
漏洞扫描(nuclei→VulnOrchestrator) |
| 7A | phase7a_auto_verify.py |
自动验证/误报排除 |
| 7B | phase7b_auth_vuln.py |
IDOR/越权/JWT |
| 7D | phase7d_sqli_verify.py |
SQL注入验证(sqlmap) |
| 7E | phase7e_evidence.py |
证据汇总(必须) |
| 7F-7N | 专项脚本 | 框架/CMDI/SSRF/SSTI/XXE/反序列化/上传/逻辑/CRLF/Host头/GraphQL/CSRF/OAuth |
| 7O | phase7o_jwt_vuln.py |
JWT漏洞(alg=none/弱算法/敏感claims) |
| 7P | phase7p_graphql_vuln.py |
GraphQL漏洞(introspection/批量/隐藏字段) |
| 7Q | phase7q_smuggling_vuln.py |
HTTP走私(CL.TE/TE.CL) |
| 7M | phase7m_param_fuzz.py |
参数Fuzz(XSS/SQLi/SSTI/SSRF/Path/Command) |
| 8 | phase8_report.py |
最终报告(必须,含CVSS+MITRE) |
CLI接口
# 单Phase
python scripts/phase0_fingerprint.py --target URL --output-dir DIR [--verbose]
# 统一入口
python cli.py --target URL --mode url|domain
python cli.py --target URL --phases phase0,phase4,phase5
# 公共参数: --target --output-dir --config --phase-result --timeout --proxy --verbose工具降级
| 工具 | 不可用时降级到 |
|---|---|
| nuclei | phase7_vuln_scan.py (Python) |
| ffuf | fuzz_engine.py (Python) |
| subfinder | crt.sh + DNS爆破 |
| nmap | Python socket扫描 |
降级策略(必须遵守):
- 检测工具可用性(
python scripts/tool_manager.py status) - 如果工具不可用,必须询问用户:
工具 X 不可用,请选择: A) 安装工具 (推荐,检测更准确) B) 使用 Python 降级方案 (功能可能受限) - 用户选择安装 → 运行
python scripts/tool_manager.py install <tool> - 用户选择降级 → 记录降级方案,继续执行
- 禁止静默降级 — 必须告知用户正在使用降级方案
本地资源
- Payload:
references/payloads/*.txt— sqli/xss/ssti/ssrf/lfi/cmdi/xxe 精选payload - WAF 绕过:
references/payloads/waf-bypass.md— 176+ payload,覆盖 23 类绕过 - 国产组件字典:
references/dictionaries/— 默认凭据 + 指纹 + 高频参数 - H1 案例索引:
references/h1-case-index.md— 2887 份真实报告精选,按漏洞类型分类 - 字典:
wordlists/— 按技术栈自动匹配 (config.yaml wordlist.tech_map) - 知识层: 主工具跑不通时,加载对应 skill 补位
知识层联动(按需加载)
| 触发条件 | 加载 Skill |
|---|---|
| sqlmap 跑不出 | sqli-sql-injection |
| XSS payload 被过滤 | xss-cross-site-scripting |
| SSRF 无回显 | ssrf-server-side-request-forgery |
| 401/403 绕不过 | idor-broken-object-authorization |
| JWT 验证正常 | jwt-oauth-token-attacks |
| SSTI 引擎不清 | ssti-server-side-template-injection |
| 上传被拦 | upload-insecure-files |
| 命令注入无回显 | cmdi-command-injection |
| CORS 只测了反射 | cors-cross-origin-misconfiguration |
| 路径穿越被拦 | path-traversal-lfi |
| 竞态无效果 | race-condition |
| 业务逻辑漏洞 | business-logic-vulnerabilities |
| GraphQL 端点 | graphql-and-hidden-parameters |
| 缓存命中 | web-cache-deception |
| CDN/WAF 差异 | request-smuggling |
| API 端点有 ID 参数 | api-authorization-and-bola |
| 认证流程异常 | authbypass-authentication-flaws |
| OAuth/OIDC 端点 | oauth-oidc-misconfiguration |
| CSRF Token 缺失 | csrf-cross-site-request-forgery |
| 文件访问端点 | file-access-vuln |
| 反序列化特征 | deserialization-insecure |
| 信息收集阶段 | recon-and-methodology |
| CRLF 注入成功 | xss-cross-site-scripting (CRLF+XSS组合) |
| Host 头注入成功 | web-cache-deception (缓存投毒组合) |
| GeeTest 检测到 | business-logic-vulnerabilities (验证码绕过) |
| API 端点密集 | api-fuzzing-bug-bounty (IDOR绕过矩阵+GraphQL批量+403绕过) |
| IDOR 基础测试无效 | api-fuzzing-bug-bounty (数组包装/JSON嵌套/参数污染/通配符) |
| GraphQL 批量测试 | api-fuzzing-bug-bounty (Introspection+批量请求绕速率+嵌套DoS) |
| Log4j/JNDI 特征 | deserialization-insecure (JNDI注入+Log4Shell检测) |
| JS 原型链污染 | deserialization-insecure (Prototype Pollution链式利用) |
| 403 绕过测试 | api-fuzzing-bug-bounty (URL路径操控+Header注入+方法覆盖) |
规则: 主工具先行,失败才加载skill。
角色分工(Agent 工具实现)
执行流程
协调者(主Agent)
├─ 读取 config.yaml + 检查工具
├─ 派发 Phase 任务 → 执行者(general-purpose subagent)
│ └─ 执行者运行 Phase 脚本 → 写入 result.json + findings.json
├─ 协调者读取 result.json + 校验数据
├─ 派发验证任务 → 验证者(code-reviewer subagent)
│ └─ 验证者盲审 → 返回验证结果
└─ 协调者汇总 → 生成报告Agent 工具调用模板
派发执行者(每个 Phase):
Agent(subagent_type="general-purpose", description="执行 Phase N",
prompt="运行 python scripts/phaseN_xxx.py --target TARGET --output-dir OUTPUT --verbose。
读取 output/phaseN/result.json 并返回 findings 数量和 next_phase_input 内容。")⚠️ 必须使用 general-purpose:所有 Phase 脚本都会写入 result.json、findings.json、evidence/ 等文件。
Explore 类型是只读 Agent,没有 Write/Edit 工具权限,会导致文件写入失败。
此规则适用于 Phase 0-8 的所有阶段,不分侦察/扫描/报告。
派发验证者(Phase 7E 之后):
Agent(subagent_type="code-reviewer", description="验证漏洞发现",
prompt="读取 output/phase7e/unified_evidence.json。
对每个 finding 执行 7 问门验证:
1. 证据是否完整(HTTP 请求+响应)?
2. PoC 是否可复现?
3. 是否在测试范围内?
4. 严重性是否合理?
5. 是否有误报可能?
6. CWE 映射是否正确?
7. 修复建议是否可行?
输出: 每个 finding 的验证结果(通过/驳回+原因)。")7 问门标准
| # | 问题 | 驳回条件 |
|---|---|---|
| 1 | 证据完整? | 缺少 HTTP 请求或响应 |
| 2 | PoC 可复现? | 仅描述无 PoC |
| 3 | 在范围内? | 超出测试目标域名 |
| 4 | 严重性合理? | 低危漏洞标为高危 |
| 5 | 有误报可能? | SPA fallback / WAF 403 误判 |
| 6 | CWE 正确? | XSS 标为 SQLi 等 |
| 7 | 修复可行? | 修复建议为空或不可操作 |
SPA 应用扫描策略
背景:Angular/React/Vue 等 SPA 应用的 catch-all 路由会将所有未知路径重定向到 index.html,
导致传统目录枚举和漏洞扫描产生大量假阳性(所有路径返回 200 + 相同 HTML)。
SPA 识别标准
Phase 0/4 执行后,如果满足以下任意两条,标记为 SPA 应用:
- 多个不同路径返回相同 HTML 内容(内容哈希一致)
- HTML 包含 SPA 特征标签:
<app-root>、<div id="root">、ng-app、__NEXT_DATA__、__NUXT__ - JS 文件包含路由框架特征:
angular、react-router、vue-router、@angular/router - 响应头包含 SPA 服务器特征:
X-Powered-By: Next.js、Server: AkamaiGHost+ SPA 标签
SPA 专项调整
| Phase | 标准流程 | SPA 调整 |
|---|---|---|
| Phase 5 目录枚举 | 所有 200 路径视为有效 | 聚类过滤:响应大小/哈希相同的 200 路径视为 SPA fallback,标记为 spa_cluster |
| Phase 5 敏感路径 | 403/401 视为发现 | 403 可能是 WAF/CDN 拦截,需验证:响应体是否包含 SPA 标签?若是 → 标记为 spa_redirect |
| Phase 6 JS 分析 | 验证提取的端点 | 优先分析 JS 中的 API 路由(Angular: RouterModule、React: fetch()/axios) |
| Phase 7 漏洞扫描 | 对所有参数发送 payload | 仅对 JS 提取的真实 API 端点测试,跳过 SPA fallback 路径 |
| Phase 7A 验证 | 自动验证 | SPA 应用的 IDOR/越权必须经此验证,不可跳过 |
SPA 扫描优先级
1. Playwright 深度渲染(Phase 4)→ 提取 SPA 路由表 + API 端点
2. JS 逆向分析(Phase 6)→ 从路由配置中提取真实后端 API
3. API 端点验证(Phase 6)→ 确认哪些端点有真实后端响应
4. 针对性漏洞扫描(Phase 7)→ 仅对验证过的真实 API 端点测试
5. 手动浏览器测试(建议)→ SPA 交互逻辑、状态管理、认证流程SPA 框架识别对照
| 框架 | 识别特征 | 路由提取方法 |
|---|---|---|
| Angular | <app-root>, ng-version, main-*.js |
搜索 RouterModule.forRoot() 中的 path 定义 |
| React | <div id="root">, __NEXT_DATA__ |
搜索 fetch()/axios 调用和 react-router 路径 |
| Vue | <div id="app">, __NUXT__ |
搜索 vue-router 的 routes 配置 |
| Svelte | svelte class 特征 |
搜索 fetch() 调用 |
核心原则
- 可证实+有实际危害 = 漏洞;揣测 = 排除
- 疑似 ≠ 确认
- 先侦察后攻击
- 5次卡住切换攻击向量
- 跳过纯Info漏洞(Cookie属性等)
严重性分级
| 等级 | CVSS | 定义 |
|---|---|---|
| Critical | 9.0-10.0 | RCE/认证绕过/任意文件读写 |
| High | 7.0-8.9 | SQL注入/SSRF内网/IDOR批量/存储型XSS |
| Medium | 4.0-6.9 | 反射型XSS/CSRF/有限SSRF |
| Low | 0.1-3.9 | 信息泄露/版本暴露 |
| Info | 0.0 | 安全头缺失 |
详细指令
- 侦察阶段:
phases/recon.md - 漏洞扫描:
phases/vuln-scan.md - 验证与报告:
phases/report.md - 配置说明:
config.yaml
已知问题修复记录
2026-05-28 Sprint 1 止血:
- P0-1: Phase间数据校验 (
validate_phase_result+PhaseDataError) - P0-2: Phase超时熔断 (
PhaseTimeout+PhaseTimeoutError) - P0-3: WAF退避 (
WAFBackoff集成到HttpClient.request()) - Bug: tool_manager subprocess编码修复、Phase6 endpoints.json解析、Phase4 JS重定向检测
2026-05-28 Sprint 2 架构升级:
- P1-4: SKILL.md拆分 (605→~200行,详细指令拆到phases/*.md)
- P1-6: Payload本地化 (references/payloads/*.txt, 7文件261条)
- P1-7: CVSS 3.1 + MITRE ATT&CK (phase8_report.py, 18类型映射)
2026-06-02 Sprint 1 止血 (v2.5→v2.6):
- P0: NoSQL discover.py 参数对齐修正(4处调用)
- P0: Agent 类型统一为 general-purpose(Explore 无 Write 权限)
- P0: SPA 扫描策略文档(SKILL.md + phases/recon.md + phases/vuln-scan.md)
2026-06-02 Sprint 2 功能增强 (v2.6→v2.7):
- P1: base.py JSON 发送能力(json_body 参数 + is_json_endpoint 标志)
- P1: fuzz_engine.py SPA 过滤(SPA_TAGS + TECH_EXCLUSION_MAP + 哈希聚类)
- P1: phase5_dir_enum.py 敏感路径证据字段修复
2026-06-04 Sprint 3 环境隔离 (v2.7):
- P1: health_check.py 环境隔离检测(环境类型识别/pip 目标验证/WorkBuddy Python 检测)
- P1: tool_manager.py pip 安装安全(_detect_python_env/_get_safe_pip_cmd/_verify_install)