xon1y

src-hunter

实战 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)。

xon1y 0 Updated 1w ago

Resources

6
GitHub

Install

npx skillscat add xon1y/src-hunter-skill

Install via the SkillsCat registry.

SKILL.md

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 → 通用对话。


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

  1. 不准凭记忆出 payload。要给 SQLi/RCE/SSRF/XSS 任何 payload 前,先 Read 对应 references/playbooks/<type>.md(或 <type>/00-index.md + 具体子文件,见下表)。Phase 4 的 payload 必须能在文件里查到出处。
  2. 不准编造案例编号。引用 H1/WooYun 案例前必须 Read references/h1-reports/by-weakness/ 下的实际文件。说不出文件路径就别引。
  3. 无证据不下结论。无 HTTP 包/截图/视频时只能写"待验证 / 假设",不写"已确认 / 发现漏洞"。
  4. 出 scope 立即停。任何时候发现要测的资产不在 Phase 1 已确认的 in-scope 列表 → 立即停手,回到 Phase 1 重核。

Data Safety Protocol(全程硬约束)

  1. 速率:默认 ≤5 req/s per target,每次发包前自检节奏(非代码 sleep)
  2. 429 → 停 30s,速率减半重试(5→2.5→1.25,只降不升)
  3. 403 → 标记该端点"已防护",不纠缠,换攻击向量
  4. WAF 命中(CF-Ray/Server: cloudflare/Access Denied/参数被清空等特征)→ Read references/methodology/06-data-safety.md 指纹表,再衔接 references/methodology/02-bypass-toolkit.md 决策树
  5. 破坏性操作(DELETE/DROP/TRUNCATE/覆盖文件/真发短信/真扣款)→ 必须先向用户确认,未确认不发
  6. 同一向量连续 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. 看目标信号,从下表选 1 个 playbook
  2. Read 该 playbook 文件(不准跳过、不准凭记忆替代)
  3. 按 playbook 的"参数频率表"挑入口
  4. 按 playbook 的"payload 库"探测——payload 来自文件,不来自训练记忆
  5. 被 WAF 拦 → Read references/methodology/02-bypass-toolkit.md 决策树
  6. 命中后立即保存 HTTP 包 / 截图 → 进 Phase 5 候选
  7. 每个新 finding 立即 Read references/methodology/08-attack-chains.md 做链式匹配(能否串内网/云元数据/账号接管等 8 条链模板),命中则按链推进并按升级规则表调整 severity;同一向量 3 次被拦即换方向(动量战术详见 references/methodology/07-momentum-tactics.md)
  8. 命中下列信号时改用 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 流程(顺序执行):

  1. Read references/compliance.md 核对合规红线(不准跳)
  2. Read references/templates/report-submission.md 取模板
  3. 先按 references/templates/finding-template.md 逐个生成 findings 文件(targets/<target>/findings/YYYYMMDD_HHMM_vulntype.md,必含 endpoint/method/payload/证据/impact/severity/remediation)
  4. 三段式输出:
    • 标题:≤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 域 + 场景映射表)

调用纪律:

  1. 工具名一律 mcp__jshook__<name> 前缀,以 search_tools 实际返回为准,不臆造(调不存在的工具 = 白白浪费一轮)
  2. 默认 search profile(~3K token)按需激活;profile 由 MCP server 启动前环境变量 MCP_TOOL_PROFILE 预设(0.3.5 起会话内不可切换),禁止默认上 full(40K+ token,严重浪费上下文);需要整域工具时用 activate_domain
  3. 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 coresearch_in_scripts)、workflowjs_bundle_search / api_probe_batch bundle 接口面提取、批量探测
4 Hunt browsercaptcha_detect / captcha_wait / browser_evaluate_cdp_target / page_inject_script)、coredetect_crypto / crypto_extract_standalone / deobfuscate / js_deobfuscate_pipeline)、networknetwork_replay_request / network_extract_auth)、sourcemaptransform 验证码辅助、加密逻辑分析、请求重放、源码还原
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 命中才可声称「残留检查通过」;扫描声明必须带测量时点。