关于 generate-poc
generate-poc 是 OpenTaint 的安全技能,用于动态验证经静态分析确认的 SAST 发现。它通过 Python PoC 请求运行中的应用,并记录可观察证据是否确认漏洞。
主要功能
- 01启动或复用运行中的应用
- 02将发现映射为实际请求
- 03编写并运行 Python PoC
- 04记录结果和服务实例信息
适用场景
- 01验证 SAST 发现是否可利用
- 02检查构造请求是否产生可观察证据
- 03记录复现失败而不更改分诊结论
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ seqra/ opentaint --skill generate-poc安装后在 Claude Code 中输入/generate-poc确认已加载。
附带文件references/java.md
详细介绍
技能:生成 PoC
尝试动态复现 SAST 发现并经静态分析确认的漏洞。通过 Python 脚本在运行中的实例上进行测试,并记录结果
输入
由调用方提供;未提供时使用默认值。仅当缺少必需输入且没有合理默认值时才追问
project-root(可选)— 目标项目的根目录。Opentaint 将所有分析产物保存在固定的<project-root>/.opentaint/目录下,因此下方所有.opentaint/...路径都会解析到该目录。默认值:当前目录language(必需)— 此项目的目标语言及语言专属说明finding(必需)— 要复现的 TP finding,.opentaint/tracking/findings/<name>.yamlbase-url(可选)— 应用已在运行时的基础 URL;否则构建并启动应用
工作流
1. 启动应用
如果提供了 base-url,则复用它。否则,按项目预期构建并启动应用(语言参考中可能列有构建和运行命令),等待应用开始监听(健康状态),并记录基础 URL——PoC 必须针对运行中的实例。若应用需要后端服务(DB、broker、cache,……),则在共享网络上使用一个 docker compose 一并启动所有服务,而不是逐个手动启动,并将其登记为单个 compose 条目。将实例绑定到回环地址(遵循约束)。开始监听后,登记该实例(遵循跟踪),以便编排器之后将其回收。
2. 将 finding 映射到实际请求
从 finding 的源代码位置找出入口点——路由和方法,以及承载污点输入的参数/请求头/请求体字段——并构造能将其传递到汇点的载荷。常见形式包括:
- SQL 注入 —
?id=1' OR '1'='1 - 命令注入 —
?cmd=;cat /etc/passwd - 路径遍历 —
?path=../../../etc/passwd - XSS —
?q=<script>alert(1)</script> - SSRF —
?url=http://169.254.169.254/latest/meta-data/ - XXE — 包含
<!ENTITY xxe SYSTEM "file:///etc/passwd">的 XML 请求体
3. 编写并运行 PoC 脚本
编写独立的 Python 脚本,保存到 .opentaint/pocs/<name>.py,使其完成必要的设置(身份验证、初始化状态)、发送请求,并断言可观察到的证据——确保脚本可重复运行并能自我检查。运行脚本。确认漏洞需要可观察的证据——例如返回的行、文件内容、命令输出、时间延迟、带外回调、能暴露注入的错误等。
4. 记录结果
confirmed— 脚本触发漏洞并证明所述漏洞。设置poc: confirmed,并在notes中描述有效的操作步骤(设置 → 请求 → 观察到的证据),而不只是最后的请求failed— 多次尝试后仍无法确认 finding,或无法访问应用/路由。设置poc: failed,保存脚本,并在notes中记录尝试过的变体及其未能触发漏洞的原因
输出
产物
.opentaint/pocs/<name>.py— PoC 脚本,无论是否确认漏洞都予以保留.opentaint/tracking/findings/<name>.yaml— 已更新 finding 的poc和notes(遵循跟踪).opentaint/tracking/poc-servers.yaml— 已登记启动的实例,保持运行以供复用(遵循跟踪)
摘要
- 结果(confirmed / failed);若为 failed,则注明 finding 未确认;如果启动了实例,还要注明基础 URL
跟踪
此技能只会写入发现项的 poc(confirmed / failed)以及追加到 notes 的结果;绝不会更改 verdict 或其他发现项字段。启动应用实例时,它会向服务注册表追加一条记录,然后就此止步——拆除实例不属于它的职责。注释中应明确说明
sarif_hashes: [a1b2c3d4, e5f6a7b8]
rule_id: <language>/security/sql-injection.yaml:sql-injection
verdict: TP
notes: >
<analyzer report for these results — seeded from the scan>
triage: the request's order field is attacker-controlled and reaches raw query construction → TP
poc: a crafted order value produced the expected database delay → confirmed
poc: confirmed
.opentaint/tracking/findings/<name>.yaml — 单个发现项,汇总一条规则的 SARIF 结果,并在分类和 PoC 阶段持续更新。脚本会根据扫描结果为每个文件填入初始内容,包括 sarif_hashes、rule_id 以及 notes 中的分析器报告。分类阶段会设置 verdict 并追加判断理由。PoC 阶段会设置 poc 并追加执行结果。注释中应明确说明
servers:
- kind: process
port: 8080
ref: "12345"
约束
- 将启动的实例绑定到回环地址(或测试确实需要的特定 IP),绝不能绑定到
0.0.0.0或公共接口——运行中的漏洞利用必须留在本机上 - 不要停止你启动的实例,并始终将其登记——拆除工作由编排器负责,而且它只能回收
.opentaint/tracking/poc-servers.yaml中登记的实例 - 结果只能写入发现项文件——绝不能写入
.opentaint/vulnerabilities.md
注意事项
- 要复现,不要推测——未运行的脚本,或没有可观察效果的 200 响应,都不能算确认
failed≠ 误报——无法复现并不能证明代码安全(可能是认证问题、缺少状态或载荷有误)。记录failed,并且不要在此处更改verdict