用途
php-exploit-chain-audit 是一个 PHP 跨漏洞利用链聚合工具。它的目标是把 vuln_audit/_{timestamp}.md(以及可能的 auth_audit/_{timestamp}.md)里已确认或待验证的漏洞,基于“可利用前置条件”串联成跨阶段利用链,并输出可观测的利用链叙事。
主要能力
- 将各 sink 子 skill 产出的漏洞报告按前置条件承接关系聚合为利用链。
- 输出利用链总览表,包含 chain_id、链路类型、起点/中间/终点漏洞编号、链路可利用性、关键依赖(路由/前置条件)。
- 输出最短利用链的逐步叙事,按 Step 顺序说明每个漏洞的触发路由、可利用性、前置条件是否满足。
- 输出“未能串联”的原因清单,至少覆盖缺少关键落点/可访问性证据、路由鉴权不一致、trace_status 不满足、需要特定环境依赖等类别。
- 按强制规则计算链路可利用性:由链路最弱环节决定。
使用方式
输入依赖(建议):
- vuln_audit/*_{timestamp}.md:来自各 sink 子 skill 的漏洞报告集合,包含编号、可利用性、触发条件、位置证据与数据流链。
- auth_audit/auth_audit_report_{timestamp}.md:用于补充链路中“鉴权门槛”是否一致。
- route_tracer/:如需补充“同一 route 的 sink 执行证据”,可通过漏洞报告中的 trace 证据引用回溯(不强制)。
输出到:
{output_path}/exploit_chain/exploit_chains_{timestamp}.md
输出模板必须包含以下结构:
Exploit Chains (PHP) - Aggregation
项目路径: {source_path} 生成时间: {timestamp}
1) 利用链总览表
| chain_id | 链路类型 | 起点漏洞(编号) | 中间漏洞(编号) | 终点漏洞(编号) | 链路可利用性 | 关键依赖(路由/前置条件) |
|---|---|---|---|---|---|---|
2) 最短利用链(强制至少 1 条;若无则输出“未发现可拼接利用链”)
chain_id: {id}
2.{n}) 链路逐步叙事(按顺序)
Step 1: {漏洞编号}(类型 {SQL/CMD/FILE/WRITE/UPLOAD/DESER/TPL/EXPR/...})
- 触发路由/入口:{route info from vuln report}
- 可利用性:{✅/⚠️/❌/🔍}(来自漏洞报告“可利用性”字段)
- 前置条件是否满足:{是/否/待验证}(解释依据:鉴权门槛、输入可控性、trace_status)
Step 2: {漏洞编号}
- ...
Step Final: {终点漏洞编号}
- 为什么它是终点(导致最关键的敏感操作):{从 vuln report 中提取的结论性描述;不需要再堆证据点细节}
关键证据引用(链路级)
按 Step 顺序列出:
- {漏洞报告文件名}:{漏洞编号}(从该漏洞报告中提取“触发条件/可利用性前置条件/PoC 所需路由”)
3) “未能串联”的原因清单(强制)
列出至少以下类别:
- 缺少关键落点/可访问性证据(例如 WRITE/UPLOAD 后未形成可读/可执行面)
- 路由鉴权不一致(链上部分漏洞需要的权限与另一路由不匹配)
- trace_status 不满足(PARTIAL/UNRESOLVED 导致无法确认链路可利用)
- 需要特定环境依赖(🔍)
每条原因必须至少引用 1 个具体漏洞编号(来自 vuln_audit)。
适用场景
- 已通过各 sink 子 skill 产出漏洞报告,需要进一步判断这些漏洞能否串联成跨阶段利用链。
- 需要以链路视角评估整体可利用性,而非孤立看待单个漏洞。
- 需要输出结构化的利用链叙事文档,供后续审计或复核使用。
限制
- 不新增 EVID_* 证据点字典,也不要求 php-route-tracer 直接输出额外契约字段。
- 不复写每条漏洞的完整修复建议,只在链路层说明“为何下一步前置条件成立/不成立”。
- 链路可利用性以构成链的最弱环节决定:任一环节不可利用或证据缺失,则链整体状态相应降级。
- 必须使用漏洞报告里的编号作为链的 Step 纽带,禁止用抽象描述替代编号。
- 若只能找到孤立漏洞且无法满足前置条件承接,不应强行输出链,而应在“未能串联原因清单”中解释原因。
- 链路类型建议方向包括:落点写入/覆盖 -> 包含/读取 -> 代码执行;落点写入 -> 模板/表达式利用;对象注入(DESER)-> 后续敏感操作。这些为建议方向,不强制。
链路可利用性计算规则
- 若所有 Step 的可利用性均为 ✅ 已确认,则链路为 ✅ 已确认。
- 若任一 Step 为 ⚠️ 待验证(且非仅信息性缺失),则链路为 ⚠️ 待验证。
- 若任一 Step 为 ❌ 不可利用,则链路为 ❌ 不可利用。
- 若任一 Step 为 🔍 环境依赖,且无法在其它 Step 中兜底,则链路为 🔍 环境依赖。