实战 SRC / 众测 / Bug bounty 漏洞挖掘工作流 skill。包含:5 阶段方法论(intake → recon → enum → hunt → report)、19 个攻击类 playbook(SQLi/XSS/RCE/SSRF/IDOR/CSRF/Path Traversal/File Upload/SSTI/XXE/Race/HTTP Smuggling/OAuth/JWT/SAML/GraphQL/Mobile/LLM/DoS)、305 个结构化 payload、263 个 WAF/EDR 绕过变体、2887 份 HackerOne 真实 High/Critical 已披露案例、77,000+ WooYun 案例统计、国产 OA / 中间件指纹库、银行 / 电信行业垂直 playbook。当用户提到 "src 挖洞 / src 漏洞挖掘 / bug bounty / 众测 / hackerone / 漏洞赏金 / SRC / 任意 X 漏洞 / 渗透测试" 或问"如何挖某个目标 / 怎么测某个 API / 如何绕过 WAF" 时触发。已升级为持久化狩猎框架:三层 Memory 断点续传、Data Safety Protocol(速率/退避/WAF 感知)、Momentum 动量战术、攻击链自动编排、hunt.sh 六命令编排(init/recon/hunt/report/status/list)。
Resources
6Install
npx skillscat add xon1y/src-hunter-skill Install via the SkillsCat registry.
SRC Hunter — 实战漏洞挖掘工作流
这是一个带强制 checkpoint 的工作流,不是参考手册。每个阶段有 MUST 输出,未通过不进下一阶段。详细 payload / playbook / H1 案例按需 Read,不准凭记忆生成。
数据规模、目录树、工具索引见 README.md,本文件只管"做什么 / 何时做 / 何时去读哪个文件"。
触发条件
命中任一即进入:
- "src 挖洞 / 漏洞赏金 / bug bounty / 众测 / hackerone / Security Response Center"
- "如何挖 / 怎么测 / 怎么打 + 某目标 / 某接口 / 某参数"
- "WAF 绕过 / 任意账号 / 任意修改 / 密码重置 / 未授权访问 / 默认凭据"
- 用户给一个 URL / API endpoint / APK 让你测
不应触发:纯白盒源码审计 → code-audit skill;漏洞修复问答 → 通用对话;CTF → 通用对话。
反幻觉硬约束(全程适用)
- 不准凭记忆出 payload。要给 SQLi/RCE/SSRF/XSS 任何 payload 前,先 Read 对应
references/playbooks/<type>.md(或<type>/00-index.md+ 具体子文件,见下表)。Phase 4 的 payload 必须能在文件里查到出处。 - 不准编造案例编号。引用 H1/WooYun 案例前必须 Read
references/h1-reports/by-weakness/下的实际文件。说不出文件路径就别引。 - 无证据不下结论。无 HTTP 包/截图/视频时只能写"待验证 / 假设",不写"已确认 / 发现漏洞"。
- 出 scope 立即停。任何时候发现要测的资产不在 Phase 1 已确认的 in-scope 列表 → 立即停手,回到 Phase 1 重核。
Data Safety Protocol(全程硬约束)
- 速率:默认 ≤5 req/s per target,每次发包前自检节奏(非代码 sleep)
- 429 → 停 30s,速率减半重试(5→2.5→1.25,只降不升)
- 403 → 标记该端点"已防护",不纠缠,换攻击向量
- WAF 命中(CF-Ray/Server: cloudflare/Access Denied/参数被清空等特征)→ Read
references/methodology/06-data-safety.md指纹表,再衔接references/methodology/02-bypass-toolkit.md决策树 - 破坏性操作(DELETE/DROP/TRUNCATE/覆盖文件/真发短信/真扣款)→ 必须先向用户确认,未确认不发
- 同一向量连续 3 次被拦或无响应差异 → 停,记入 memory.md 失败尝试段,换方向
会话恢复(断点续传)
进入任一 Phase 前,若 targets/<target>/memory.md 已存在 → 先 Read 它恢复状态:已验证项不重测、活跃假设继续追踪、被拦 payload 换方案、成功模式(如 gopher 可用)优先复用。不存在则按 Phase 1 正常走。目标目录结构:targets/<target>/{scope, memory.md, recon/, findings/, report/},生成于用户工作目录(非 skill 目录)。模板见 references/templates/。
Phase 1 · Intake(接单)
进入条件:用户首次给出目标 / 程序名 / URL。
MUST 输出 checkpoint(四项缺一不进 Phase 2,缺什么向用户问什么,不要假设):
- In-scope:可测域名 / IP 段 / app / endpoint(逐条列)
- Out-of-scope:禁测项(逐条列)
- 规则:payout tier / disclosure window / safe-harbor / 测试 header(如
X-Bug-Bounty:<handle>) - 时间盒:6h / 单日 / HVV / 月度
checkpoint 四项全过后 MUST 落盘:Read references/templates/scope-template.md,将 in-scope/out-of-scope/规则/时间盒写入 targets/<target>/scope——此后所有阶段的越界判定以该文件为唯一依据。同时从 references/templates/memory-template.md 初始化 targets/<target>/memory.md。
仅当用户问"哪个最值得先测" → Read references/methodology/05-srctimebox-priority.md。
Phase 2 · Recon(被动侦察)
进入条件:Phase 1 checkpoint 四项全过。
禁止:任何主动发包(端口扫描 / 路径爆破 / payload 测试)。
MUST 输出:不发包给目标得到的资产清单 + 历史信息,来源 ≥3 种:
- CT 日志(crt.sh / Censys)
- Wayback / CommonCrawl 历史快照
- GitHub dorks(
org:target+password|api_key|SECRET|.env) - FOFA / Shodan favicon hash
- SecurityTrails / DNS 历史
- ASN / IP 段(bgp.he.net)
浏览器被动侦察(强烈建议,jshook MCP 可用时):先用 mcp__jshook__search_tools 探活——探活失败不得静默跳过,走下方「MCP 不可用围栏」流程让用户决策;成功则再 mcp__jshook__activate_tools(或 activate_domain)激活 browser/network/core/sourcemap 域,然后:
- 页面遍历:
mcp__jshook__page_evaluate执行 JS 提取所有可交互元素(按钮/表单/链接)并逐一触发 - 请求捕获:
mcp__jshook__network_intercept+network_get_requests抓每个按钮背后的 API 调用(端点/参数/鉴权头/CSRF token) - JS 源码分析:
mcp__jshook__collect_code+js_bundle_search(加密函数/硬编码密钥/隐藏端点)、mcp__jshook__sourcemap_fetch_and_parse(.map 泄露还原源码)、mcp__jshook__detect_crypto(识别前端加密算法)
输出到 targets/<target>/recon/browser_endpoints.txt / browser_api_calls.txt / browser_js_findings.txt。工具名以 mcp__jshook__ 前缀 + search_tools 实际返回为准,不臆造;完整场景映射 Read references/tools/mcp-jshook.md。
Phase 3 · Enum(主动探测)
进入条件:Phase 2 资产清单非空。
MUST 输出:活资产矩阵——域 → 端口 → 服务 → 指纹 → JS endpoint。
矩阵同时落盘为 targets/<target>/recon/attack_surface.md,按 High/Medium/Low 标注优先级——这是 Phase 3 → Phase 4 的接力棒(先打鉴权接口/内省开启/源码泄露,后打静态资源)。
条件触发 Read(命中就必读,不命中不读):
| 命中信号 | MUST Read |
|---|---|
指纹含 weaver/seeyon/tongda/landray/yongyou/kingdee/hikvision/dahua |
references/dictionaries/chinese-srcfingerprints.md + references/dictionaries/default-credentials-cn.md |
| 资产含 银行 / 支付 / 网银 / 第三方支付聚合 | references/industry/banking-finance.md |
| 资产含 运营商 / BOSS / 网管 / 物联网卡 | references/industry/telecom-isp.md |
Phase 4 · Hunt(漏洞探测)
进入条件:Phase 3 矩阵 ≥1 个候选目标。
强制流程(每个候选目标走一遍):
- 看目标信号,从下表选 1 个 playbook
- Read 该 playbook 文件(不准跳过、不准凭记忆替代)
- 按 playbook 的"参数频率表"挑入口
- 按 playbook 的"payload 库"探测——payload 来自文件,不来自训练记忆
- 被 WAF 拦 → Read
references/methodology/02-bypass-toolkit.md决策树 - 命中后立即保存 HTTP 包 / 截图 → 进 Phase 5 候选
- 每个新 finding 立即 Read
references/methodology/08-attack-chains.md做链式匹配(能否串内网/云元数据/账号接管等 8 条链模板),命中则按链推进并按升级规则表调整 severity;同一向量 3 次被拦即换方向(动量战术详见references/methodology/07-momentum-tactics.md) - 命中下列信号时改用 jshook 工具执行(先
mcp__jshook__search_tools+activate_tools激活对应域,工具名不臆造):
| 命中信号 | jshook 工具 |
|---|---|
| JS 混淆 / JSVMP 保护,读不懂逻辑 | mcp__jshook__deobfuscate / js_deobfuscate_pipeline |
| 登录密码 / API 有前端加密或签名 | mcp__jshook__detect_crypto + crypto_extract_standalone(还原签名逻辑后再构造 payload) |
| 疑似 DOM XSS,需真实执行验证 | mcp__jshook__page_evaluate 注入 + debugger_pause/debugger_step 追 sink |
| 需要改包重放(Repeater 场景) | mcp__jshook__network_replay_request |
| WASM 加密 / 风控核心 | mcp__jshook__wasm_dump + wasm_disassemble |
| 目标有反调试检测 | mcp__jshook__antidebug_bypass |
| GraphQL 内省 / 历史查询提取 | mcp__jshook__graphql_introspect / graphql_extract_queries |
| JWT / token 抽取与篡改 | mcp__jshook__network_extract_auth + binary_decode |
| 批量 BOLA / 接口探测 | mcp__jshook__api_probe_batch |
| 入口信号 | MUST Read |
|---|---|
| Actuator / Swagger / 默认端口 / 弱密码 | references/playbooks/unauth-access.md |
| .git / .svn / .env / heapdump / 路径列举 | references/playbooks/info-disclosure.md |
| 用户态 ID 可遍历 / 任意 X 越权 | references/playbooks/arbitrary-x-authz.md |
| 密码重置 / 支付 / 验证码 / 订单 / 提现 | references/playbooks/logic-flaws/00-index.md |
| OAuth / SAML / JWT / redirect_uri | references/playbooks/oauth-saml-jwt/00-index.md |
| REST API / BOLA / Mass Assignment / 速率 | references/playbooks/api-rest/00-index.md |
| 任何用户输入进 DB | references/playbooks/sqli.md |
| 反序列化 / SSTI / XXE / 原型链 / 框架 RCE | references/playbooks/rce/00-index.md |
| URL 入参 / 缓存 / Host 注入 | references/playbooks/ssrf-cache-host/00-index.md |
| 文件路径入参 / LFI / RFI | references/playbooks/path-traversal/00-index.md |
| 上传点 + 解析漏洞 | references/playbooks/file-upload/00-index.md |
| 用户输入回显到 HTML / JS | references/playbooks/xss/00-index.md |
| 反代 + Content-Length / TE | references/playbooks/http-smuggling.md |
| GraphQL endpoint / introspection | references/playbooks/graphql.md |
| 并发 / TOCTOU | references/playbooks/race-conditions.md |
| ReDoS / 资源不限速 / 算法爆炸 | references/playbooks/dos.md |
| APK / IPA / 移动端 | references/playbooks/mobile.md |
| LLM agent / prompt 入口 / 工具调用 | references/playbooks/llm-prompt-injection/00-index.md |
| 已拿到 shell / 凭据 / 内网 | references/playbooks/intranet-postexp/00-index.md |
两步 Read 模式(已拆分的 playbook):目录形式的 playbook(rce/ / oauth-saml-jwt/ / ssrf-cache-host/ / api-rest/ / logic-flaws/ / file-upload/ / path-traversal/ / xss/ / llm-prompt-injection/ / intranet-postexp/)第一步只 Read 00-index.md——它含子文件路由表和通用方法论。不要把 00-index 当 payload 库用,据子文件路由定位到具体场景后再 Read 对应子文件(如 rce/14-ssti.md / oauth-saml-jwt/12-jwt.md)。单文件形式的 playbook(sqli.md / xxx.md)直接 Read 即可。
通用方法论(仅在卡壳时 Read,不要预加载):
- 不知道下一步打什么 →
references/methodology/01-attack-priority.md - 被 WAF / EDR 拦 →
references/methodology/02-bypass-toolkit.md - 怀疑自己幻觉 / 想检查证据链 →
references/methodology/03-evidence-discipline.md - 找不到漏洞点 →
references/methodology/04-control-gap-hunting.md
Phase 5 · Report(提交)
进入条件:Phase 4 至少一个 finding 已具备可重现 HTTP 包 / 截图 / 视频。
MUST 流程(顺序执行):
- Read
references/compliance.md核对合规红线(不准跳) - Read
references/templates/report-submission.md取模板 - 先按
references/templates/finding-template.md逐个生成 findings 文件(targets/<target>/findings/YYYYMMDD_HHMM_vulntype.md,必含 endpoint/method/payload/证据/impact/severity/remediation) - 三段式输出:
- 标题:≤80 字,精确到 endpoint + 漏洞类型
- 重现步骤:每步可执行,带 HTTP 包 / curl / 截图
- 影响 + 修复建议:CVSS 4.0 vector + 业务影响段
收尾 MUST:更新 targets/<target>/memory.md(假设状态/成功模式/失败尝试/阶段进度),保证下次会话断点续传。注:每个 Phase 结束都应更新 memory.md,Phase 5 收尾时必更。
MCP 工具集成(jshookmcp)
激活时机由工作流驱动,不等用户来问:
- Phase 2 开始时:调
mcp__jshook__search_tools探活,成功则activate_tools/activate_domain激活browser/network/core/sourcemap域做浏览器侦察(见 Phase 2) - Phase 4 命中工具触发信号时(见 Phase 4 第 8 步表格):按需
search_tools <关键词>→activate_tools <工具名>→ 调用 - 用户问"用什么工具 / Burp / Frida / adb"时:Read
references/tools/mcp-jshook.md完整索引(41 域 + 场景映射表)
调用纪律:
- 工具名一律
mcp__jshook__<name>前缀,以search_tools实际返回为准,不臆造(调不存在的工具 = 白白浪费一轮) - 默认 search profile(~3K token)按需激活;profile 由 MCP server 启动前环境变量
MCP_TOOL_PROFILE预设(0.3.5 起会话内不可切换),禁止默认上 full(40K+ token,严重浪费上下文);需要整域工具时用activate_domain - Repeater 改包场景优先
network_replay_request,不必起独立 Burp
MCP 不可用围栏(必须停下让用户决策,禁止静默降级):
search_tools 探活失败(工具不存在 / MCP 未注册 / 连接超时)时,不自行降级继续,先向用户呈现现状 + 三选项,等用户选择后再走:
⚠️ jshook MCP 未检测到(浏览器侦察 / JS 反混淆 / DOM XSS 验证 / 改包重放等能力将受限)
请选择:
[A] 我现在启动 jshookmcp —— 用户自行 `claude mcp list` 检查并启动后,回复"已启动",AI 重新探活
[B] 纯 HTTP 模式继续 —— 放弃浏览器侦察,Phase 2 只走 CT/Wayback/GitHub dorks 等被动源,
Phase 4 无法验证 DOM XSS / 前端加密逆向 / WASM,遇到这些信号只标记"待验证"不深入
[C] 换替代工具 —— 用户指定(如自带 Playwright MCP / Burp),AI 按用户指定的工具名适配围栏规则:
- 每个 Phase 首次需要 MCP 时只问一次,用户选 B 后本会话不再重复问(记入
targets/<target>/memory.md阶段进度段:"MCP 模式:纯 HTTP,用户已确认"),下次会话恢复时读到该记录直接沿用,不再探活打扰 - 用户选 A 但启动后仍探活失败 → 报告具体失败现象(工具未注册 / 超时),建议检查 jshookmcp 安装,再回落到三选项
- Phase 4 命中第 8 步工具触发信号而当前是 B 模式 → 只在 finding 里标注"需 MCP 深入验证",不阻塞其他攻击面
AgentTeams 团队模式契约(必读,2026-08-29 批次 1 复盘后加入)
坑(批次 1 实证):子代理工具列表默认只有 8 个 jshook 管理工具(search_tools / activate_tools / activate_domain / call_tool / describe_tool / deactivate_tools / route_tool / coverage_report),域工具按需激活。批次 1 全程未激活任何域工具 → Geetest 卡死、O-C1 密钥分析搁置、bundle 检索用手工 grep。修复:每个 Phase 任务契约必须带 jshook 激活指引:
| Phase | 必须激活的域/工具 | 用途 |
|---|---|---|
| 2 Recon | (默认不激活;浏览器被动侦察走主会话探活,见 Phase 2) | 被动源为主 |
| 3 Enum | core(search_in_scripts)、workflow(js_bundle_search / api_probe_batch) |
bundle 接口面提取、批量探测 |
| 4 Hunt | browser(captcha_detect / captcha_wait / browser_evaluate_cdp_target / page_inject_script)、core(detect_crypto / crypto_extract_standalone / deobfuscate / js_deobfuscate_pipeline)、network(network_replay_request / network_extract_auth)、sourcemap、transform |
验证码辅助、加密逻辑分析、请求重放、源码还原 |
| 5 Report | 不需要 | 证据已落盘 |
激活方式:mcp__jshook__activate_domain <域名>(整域)或 mcp__jshook__activate_tools [<工具名>...](单点)。反模式:不要为单个工具 boost_profile(40K+ token 浪费,且 0.3.5 起 profile 由 MCP_TOOL_PROFILE 环境变量预设、会话内不可切换);先 search 再 activate。完整协作契约与 CAPTCHA 场景合规路径见 references/tools/mcp-jshook.md 末尾「AgentTeams 团队模式协作契约」。
标准工具链 src-cli(2026-08-29 复盘后加入)
高频命令/踩坑已封装为零依赖 Python CLI:tools/src-cli/src.py(相对 skill 根),命令 scan(残留扫描,0 命中退出码 0,可作任务验收命令)/ redact(脱敏+manifest)/ grep(bundle 安全 grep)/ favicon(mmh3 hash)/ curl(带超时封装)/ count(证据清册)/ wb-cdx(Wayback 被动采集)。详见 tools/src-cli/README.md。
强制要求:Phase 4/5 证据落盘后、报告提交前,必须跑 python3 tools/src-cli/src.py scan <证据目录> --kinds cookie,key,phone,0 命中才可声称「残留检查通过」;扫描声明必须带测量时点。