为什么你的 Medium 能升级成 High?bug-bounty-hunting-prompts Stage C 漏洞串联与规模效应实战

发布时间:2026/10/29 19:46:39
为什么你的 Medium 能升级成 High?bug-bounty-hunting-prompts Stage C 漏洞串联与规模效应实战

【免费下载链接】bug-bounty-hunting-prompts

Reusable prompts for a structured, evidence-first bug bounty hunting workflow

项目地址:https://gitcode.com/gh_mirrors/bu/bug-bounty-hunting-prompts
点击查看免费下载

bug-bounty-hunting-prompts是一套面向**漏洞赏金(bug bounty)**的开源提示词工作流,帮你把零散的发现,沉淀成可升级、可复现、证据优先的高危报告。本文聚焦它最容易被忽略的一环——Stage C 漏洞串联与规模效应:为什么你手里明明是一堆 Medium,最后却能组合出一个 High。

你的 Medium 为什么"卡"在原地?

很多研究者的困境不是"找不到洞",而是找到了,却停在原来的严重等级。

一个孤立的 Medium(一次越权、一处可注入)通常只能换来固定的赏金区间。真正的溢价,往往来自两件事:

  • 🔗漏洞串联(Chaining):两个各自不够看的洞,叠起来变成一个 Account Takeover。
  • 📈规模效应(Scale):同样的洞,从"能影响一条数据"变成"能批量影响整个租户/钱包"。

phase-02-sweep.md里有一句很直白的话:

"A price-manipulation medium became a high once it was shown to scale."(一个价格篡改的 Medium,在证明能规模化之后,升级成了 High。)

这就是 Stage C 要解决的问题。完整出处见 phase-02-sweep.md。

先看懂:bug-bounty-hunting-prompts 是怎么分阶段的?

这个项目把一次狩猎拆成了 0–10 个阶段,每个阶段是一个独立的 prompt 文件,按顺序喂给你的 agent。核心链路在 README.md 里:

阶段文件作用
0phase-00-recon.md轻量级测绘(surface map)
1phase-01-access.md账号与认证访问
2phase-02-sweep.md广度扫描 +Stage C 串联
3phase-03-closeout.md校验交接、释放资源
5bphase-05b-critical.md高影响(critical)狩猎
6phase-06-triage.md初筛与去重
7phase-07-validate-escalate.md验证并升级发现

关键就在Phase 2:它内部又分三段,而 Stage C 就是"最后压轴、且不可省略"的那一段。

  • Stage A:控制器串行,跑有浏览器/会话状态的检查。
  • Stage B:把无状态的工作分发给子 agent(fan-out)。
  • Stage C:覆盖率(coverage)齐了之后,才做串联。

原文强调它"是收尾前最后做的事,而且不是可选的",见 phase-02-sweep.md。

漏洞串联(Chaining):让两个 Medium 拼成一个 ATO

Stage C 的核心动作只有一句话——对你手里的每个发现两两配对,问:A 是否正好提供了 B 所需的前置条件?

原文明确说,这套语料里严重等级最高的发现,几乎都是组合,而不是单个类别:

"the highest-severity findings in this corpus were combinations, not single classes."

而且它点出了为什么必须人工来串:每个 goal cycle 都是"冷启动、一次只看一个角度",所以横跨你两个发现的链,对它们自己来说是不可见的——只能由 Stage C 来做。出处:phase-02-sweep.md。

下面是项目整理出的"已经兑现过收益"的串联形态(节选自 phase-02-sweep.md):

组合(Chain)能变成(Becomes)
上传 / 存储型内容 + 宽松的 origin 或 CORS 可读账号接管(ATO)
SSRF + 开放重定向 / DNS 重绑定云元数据、内网服务可达
信息泄露(ID、邮箱、租户列表)+ IDOR批量拖库,而非单条
认证绕过 + IDOR未认证批量 PII
前端 bundle 里的密钥 + 一个愿意接受它的 API无账号即拥有权限
若干孤立的 OAuth 小缺陷(通配redirect_uri、无state、code 复用)跨子域 code 窃取、ATO
一个逻辑缺陷 + 缺失限流/上限同一缺陷的规模化版本(通常是严重等级跳升点)
二阶:值在一个面写入,在另一个面执行由"反射型"演变成"存储型"影响

💡 读表技巧:左列是"看起来都不够 High"的洞,右列才是它们的真实价值。你的报告里应该写的是右列,而不仅仅是左列。

规模效应(Scale Pass):把"单次可利用"变成"批量可利用"

串联解决"两个洞拼一起",Scale Pass 解决"同一个洞能放大多少"。原文明确把它放在"最后做":

"For each confirmed medium, ask what makes it a high: can it be repeated, does it reach other tenants, does it touch money or PII in bulk, or can victim interaction be removed."

翻译成可执行的四个自问(出处:phase-02-sweep.md):

  1. 🔁能重复吗?一次成功还是可以反复触发。
  2. 🌐能触达其他租户吗?单账号 vs 跨租户。
  3. 💰会不会批量碰到钱或 PII?单次 vs 批量。
  4. 👆能不能去掉"受害者交互"?需要受害者点一下,还是攻击者自己就能完成。

这被定性为"假设驱动的升级(hypothesis-driven escalation),而不是一次泛泛的限流扫描"。也就是说:你只为已经确认、且依赖规模的那个洞去验证规模,别把预算撒到无关紧要的限流探测上。

它还划了清晰的安全边界(同样见 phase-02-sweep.md):

  • 若确认的缺陷不依赖规模 → 记not applicable,不发任何压测流量。
  • 只用测试自有的对象、最小化证明,绝不枚举真实 ID、不收集第三方数据。
  • 不可逆/认证敏感接口在双 lane 里走 B,遵守三次尝试上限。
  • 可逆的自有资源缺陷,重复请求不超过 5 次,出现可用性信号就停。
  • 一旦 B 丢失或看到限流,立即结束 Scale Pass,记录为 partial,继续收尾。

Stage C 落地四步:从发现到升级

把上面讲清楚的原则,落成可重复的操作流程:

Step 1|先等 Stage A / B 都落定。串联必须在覆盖率之后做,否则你是在一张没画完的地图上找链。见 phase-02-sweep.md。

Step 2|全量收集输入。输入是"你产出的全部":reports/全部报告、每个hunt/角度文件(含PARTIAL)、raw/leads.jsonl、以及所有result: confirmed或partial的test事件。原文给出的快速盘点命令(phase-02-sweep.md):

grep -l 'CONFIRMED\|PARTIAL' hunt/phase-*.md jq -r 'select(.status=="confirmed" or .status=="partial") | "\(.class) \(.url)"' raw/leads.jsonl ls reports/

Step 3|逐对提问 + 规模排查。先做链(左列→右列),最后统一跑一遍 Scale Pass 的四问。

Step 4|按三种结果记录。这是 Stage C 最容易偷工减料、也最值钱的一步(phase-02-sweep.md):

结果动作
同一根因被推得更深编辑原报告:提升严重等级,加## Escalation段,角度文件写Escalation of: reports/<file>.md
组合产生了全新根因写新报告,并同时引用两个"父发现"
链试了但不成立在角度文件里记成DEAD

✅ 关键纪律:一条被证伪的链,和一条被证伪的类别一样有价值。不写下来的 DEAD,等于下轮再花同样的小时数去踩一遍坑。

记录纪律:给每个报告一个Chain value结论

Stage C 不是"跑完就行",它要求每一份已确认报告都拿到一个具体的## Chain value结论——哪怕结论是standalone(没有可用的组合)。只有当所有报告都填完,才写完成记录(phase-02-sweep.md)。

而且这不是 Phase 2 的"自说自话"。收尾阶段会重新校验 Stage C 是否覆盖了当前这份报告集合(用报告集合的 sha256 摘要比对),发现缺失或过期就必须重跑,"绝不为没跑过的审查伪造完成证明"。原文甚至有一句点题:

"The sweep's chaining stage is where a set of mediums becomes a high, and nothing downstream does it."

出处:phase-03-closeout.md。

深度 vs 广度:先画全地图,再回来串联

很多新手会在扫描中途"看到一个大鱼苗"就一头扎进去做深链,结果地图没画完、其余 46 行都没判定。项目的取舍很明确(phase-02-sweep.md):

  • 扫描途中发现"比单个判定更大"的东西:按你能证明的等级先把报告写了,在角度文件里记下升级路径,然后继续跑广度。
  • 等 Stage C 时你手里有"其余整张地图",那时才看得到它到底能串上什么。
  • 反过来说,也别跳过 Stage C:一堆没串联的 Medium,等于低估了你已经找到的东西;而且后面的阶段不会替你串联。

到验证阶段(phase-07-validate-escalate.md)它进一步要求:每个非破坏性升级角度都要推进,包括你自己临时想到的——升级是叠加式的,不是"只验证 v1 声称的那些"。

安全边界:授权、有界、可逆

串联和 Scale 本质是"多发的验证请求",所以边界比广度阶段更紧:

  • 只打授权、在 scope 内的资产;scope 以程序简报为准,别从发现里反推(ADAPTATION.md)。
  • 最小化证明、有界请求、出现限流/丢失身份就停,不等待冷却、不轮换绕过计数器。
  • 不留下状态变更、不自动提交或公开发现、不批量采集数据(README.md)。
  • 密钥、cookie、token 一律放在仓库之外,不要把凭据贴进 prompt 文件。

快速上手:三步接入 Stage C

  1. 选阶段:如果你只做未认证工作流,可以跳过账号/浏览器/邮件等分支,保留 recon、sweep、triage 的原则即可(README.md)。
  2. 替换变量:把$YOUR_*/<YOUR_*>/{{target}}等占位符,按 ADAPTATION.md 的清单换成你自己的实现;凡是仍含未解析占位符的 prompt,"还不能执行"。
  3. 喂给 agent:一次给一个阶段,并保留它要求的交接产物;跑到 Phase 2 时,Stage C 会在覆盖率之后自动触发串联与 Scale Pass。

🧭 提醒:这套东西是提示词源码,不是即插即用的扫描器。它的价值在阶段边界、证据纪律、交接与分级闸门,而不是"一键出洞"(ADAPTATION.md)。

小结:Medium 变 High 的两个开关

回到标题——你的 Medium 为什么能升级成 High?因为 Stage C 帮你按住了两个常被放过的开关:

  • 🔗串联:把"两个不够看的洞"拼成右列的真实影响(ATO、批量 PII、云元数据)。
  • 📈规模:回答"能重复吗 / 跨租户吗 / 批量碰钱或 PII 吗 / 能否去掉受害者交互",从而把单次可利用推成批量可利用。

再配合一条纪律:先画全地图(广度),再回来串联(Stage C),并给每份报告写死Chain value结论。做到这三点,你提交出去的就不是"一堆 Medium",而是一份站得住脚的 High。

【免费下载链接】bug-bounty-hunting-prompts

Reusable prompts for a structured, evidence-first bug bounty hunting workflow

项目地址:https://gitcode.com/gh_mirrors/bu/bug-bounty-hunting-prompts
点击查看免费下载
上一篇:LLM Zoomcamp 2025 课前直播问答全解读:预备知识、课程体系、成本预算与报名全流程
下一篇:Kubernetes SIG Node 技术全景指南:Pod 与宿主机资源交互、Kubelet 核心与 Node e2e 测试体系

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考