为什么你的 Medium 能升级成 High?bug-bounty-hunting-prompts Stage C 漏洞串联与规模效应实战
【免费下载链接】bug-bounty-hunting-prompts
Reusable prompts for a structured, evidence-first bug bounty hunting workflow
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 里:
| 阶段 | 文件 | 作用 |
|---|---|---|
| 0 | phase-00-recon.md | 轻量级测绘(surface map) |
| 1 | phase-01-access.md | 账号与认证访问 |
| 2 | phase-02-sweep.md | 广度扫描 +Stage C 串联 |
| 3 | phase-03-closeout.md | 校验交接、释放资源 |
| 5b | phase-05b-critical.md | 高影响(critical)狩猎 |
| 6 | phase-06-triage.md | 初筛与去重 |
| 7 | phase-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):
- 🔁能重复吗?一次成功还是可以反复触发。
- 🌐能触达其他租户吗?单账号 vs 跨租户。
- 💰会不会批量碰到钱或 PII?单次 vs 批量。
- 👆能不能去掉"受害者交互"?需要受害者点一下,还是攻击者自己就能完成。
这被定性为"假设驱动的升级(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
- 选阶段:如果你只做未认证工作流,可以跳过账号/浏览器/邮件等分支,保留 recon、sweep、triage 的原则即可(README.md)。
- 替换变量:把
$YOUR_*/<YOUR_*>/{{target}}等占位符,按 ADAPTATION.md 的清单换成你自己的实现;凡是仍含未解析占位符的 prompt,"还不能执行"。 - 喂给 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
相关推荐
从发现到提交:bug-bounty-hunting-prompts Phase 6-10 分诊、验证、升级与去重流水线全解析
从发现到提交:bug bounty hunting prompts Phase 6 10 分诊、验证、升级与去重流水线全解析 bug bounty huntin
终极Bug Bounty指南:如何用Bug Bounty Cheatsheet快速提升漏洞挖掘技能
终极Bug Bounty指南:如何用Bug Bounty Cheatsheet快速提升漏洞挖掘技能 Bug Bounty Cheatsheet是一份专为漏洞猎人
网络安全教程Phase 0 轻量侦察实战:用 bug-bounty-hunting-prompts 快速绘制目标攻击面地图
Phase 0 轻量侦察实战:用 bug bounty hunting prompts 快速绘制目标攻击面地图 做漏洞赏金(Bug Bounty)时,大多数人习
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考