wudidike

pentest

黑盒Web渗透测试编排技能,自动执行全流程侦察与漏洞验证。 触发词:渗透测试、安全扫描、漏洞挖掘、漏洞验证、pentest、安全评估、渗透、 子域名枚举、端口扫描、指纹识别、目录爆破、IDOR测试、未授权测试、越权测试

wudidike 22 4 Updated 3w ago

Resources

9
GitHub

Install

npx skillscat add wudidike/pentest-skill

Install via the SkillsCat registry.

SKILL.md

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.pytool_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 status

WorkBuddy 环境自动适配

在 WorkBuddy Desktop 中运行时:

  1. tool_manager.py 自动检测 ~/.workbuddy/binaries/python/versions/ 下的 managed Python
  2. 如果 venv 存在(~/.workbuddy/binaries/python/envs/default/),自动使用 venv 的 pip
  3. 所有 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

⛔ 强制规则

  1. 读 config.yaml — 确认 report_language(默认zh-CN)、proxywordlist
  2. 走完管道 — Phase 7A(验证)、7E(证据)、8(报告) 不可跳过
  3. 读 result.json — 每个Phase完成后读取,确认 next_phase_input
  4. 证据驱动 — 每个漏洞必须有完整HTTP数据包证据
  5. 报告语言 — 使用 config.yaml 的 report_language,不得自作主张
  6. 反幻觉约束 — 给 payload / 绕过手法前,必须先 Read 对应 payload 文件references/payloads/*.txtreferences/dictionaries/*.md),不准凭记忆编造 payload。记忆中的 payload 可能有拼写错误、版本过时或上下文不匹配。
  7. 差分证明 — 漏洞断言需要对照组:盲注要真/假/baseline 三包;IDOR 要自己资源200+他人资源200+不存在资源404;越权要普通用户403+管理员200+绕过200。
  8. 合规红线 — 见 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.mdphases/vuln-scan.mdphases/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扫描

降级策略(必须遵守)

  1. 检测工具可用性(python scripts/tool_manager.py status
  2. 如果工具不可用,必须询问用户
    工具 X 不可用,请选择:
    A) 安装工具 (推荐,检测更准确)
    B) 使用 Python 降级方案 (功能可能受限)
  3. 用户选择安装 → 运行 python scripts/tool_manager.py install <tool>
  4. 用户选择降级 → 记录降级方案,继续执行
  5. 禁止静默降级 — 必须告知用户正在使用降级方案

本地资源

  • 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 应用:

  1. 多个不同路径返回相同 HTML 内容(内容哈希一致)
  2. HTML 包含 SPA 特征标签:<app-root><div id="root">ng-app__NEXT_DATA____NUXT__
  3. JS 文件包含路由框架特征:angularreact-routervue-router@angular/router
  4. 响应头包含 SPA 服务器特征:X-Powered-By: Next.jsServer: 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-routerroutes 配置
Svelte svelte class 特征 搜索 fetch() 调用

核心原则

  1. 可证实+有实际危害 = 漏洞;揣测 = 排除
  2. 疑似 ≠ 确认
  3. 先侦察后攻击
  4. 5次卡住切换攻击向量
  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)

Categories