开源 AI 渗透测试工具,可验证每项发现。机器预言机会重新运行每个漏洞利用;通过验证的漏洞会附带一个证据胶囊,供你自行复现。
pip install ptai && ptai demo
ptai demo 会扫描一个内置的漏洞应用,并输出 4 findings, 3 oracle-VERIFIED。
它会从一份证明胶囊(proof capsule)中实时重放其中一条(replay 3/3),然后对
相同的路由在加固后再次运行,并输出 0 findings。
有两点值得注意。这些发现随漏洞的出现而出现、随漏洞的消失而消失,而不是因为工具 变得安静了——两次运行之间唯一改变的就是修复。而且四条中有一条始终是候选 (candidate):SQLi 登录绕过是真实的,但没有任何 oracle 能在该路由上重新证明 它,因此它不会获得徽章。这个缺口正是产品在正常运作,而不是演示中的 bug。
大多数扫描器告诉你某个东西可能可被利用,然后把分诊工作留给你。 ptai 将一条发现视为候选(candidate),直到某个具名的机器 oracle 重新运行 该漏洞利用,并在 N 次中复现 N 次。只有到那时,它才赢得 VERIFIED。
有三个特性使这不只是一句口号:
没有任何 LLM 会产生裁决。 这条规则由代码强制执行,而非政策:一个无法指明 为其赢得裁决的 oracle 的裁决会被拒绝。LLM 负责协调运行并对结果进行推理。它 从不决定某个 bug 是否真实。
每个 oracle 都有一个必须失败的对照。 一个受信任标头绕过必须在带标头时返回 特权内容,而在不带标头时返回拒绝。一个泄露凭据检查必须对真实密钥被接受,而对 一个故意损坏的孪生体被拒绝。一个对任何请求都返回 200 的端点什么也赢不到。这正是 阻止"它返回了 200"被误认为证据的原因。
第三方扫描器的输出会被扣留。 nuclei、nikto 和 zap 的结果不会凭自身权威成为 发现。它们保持未验证状态,直到 ptai 自己的某个 oracle 独立地重新证明它们。
每条 VERIFIED 发现都以一份**可移植的证明胶囊(portable proof capsule)**形式
交付——包含该发现、重新证明它的配方,以及回执。任何人都可以 ptai replay 它
针对实时目标,并观看 oracle 重新确认,而无需信任 ptai。胶囊被故意设计为不
签名:重放才是信任机制,而不是一个你必须凭信念接受的签名。
| 拥有可用 oracle 的漏洞类别 | 14 |
| 库中的探针 | 64 |
| 能赢得 VERIFIED 的探针 | 30 |
| Oracle 种类 | 24 |
| 工具包装器 | 203 |
| ……目前能将输出解析为发现的 | 18 |
| MCP 工具 | 52 |
| 专家代理 | 18 |
| 测试 | 2,729 个,运行于 Python 3.10 / 3.12 / 3.14 |
在一个故意设置漏洞的蜜罐上,23 条发现在这 14 个类别中验证通过,精确率 100%,
零误报。在一个原版 OWASP Juice Shop 上,2026-08-23 的扫描中验证了 17 条发现
——报告的是范围内的 HTTP / 已验证 / 精确率,而不是 17/116。一次 2026-08-25 的
Path 1 MCP 会话(MCP 客户端驱动 run_probe,目标在编排器验证前就挂了)在 64 个
范围内的 HTTP 挑战中赢得了 12 个已验证证明,精确率 100%(20 个不予追查)。OSINT、
Web3 和仅 UI 的 Juice Shop 密钥按设计不在自动化计分板上。
请仔细阅读这些数字,因为缺口正是重点。 存在 64 个探针,但只有 30 个能赢得 裁决;其余 34 个报告诚实的候选。注册了 203 个包装器,但只有 18 个能将工具输出 转化为发现——其余的只是运行并交回原始文本。oracle 门控换来的是精确率,而不是 捕获率:它消除误报,但不会发现更多 bug。
蜜罐测试装置(tests/honeypot/)和一个干净应用零误报门控
(tests/cleanapp/)都随本仓库交付并在 CI 中运行,因此这些
是可复现的,而非截图。
直白陈述,因为一个过度吹嘘自己的安全工具比无用更糟。
unsupported,而不是一个误导性
的零。ptai playbook run 解析依赖并打印计划。针对
目标运行它尚未接通。完整的内部缺陷清单,包括上述所有内容,都是公开跟踪的,而非悄悄处理。如果这里 有什么是错的,开一个 issue,它 会被纠正。
你现有的 AI 订阅就是 LLM。ptai 提供工具。
pip install ptai
ptai mcp install # 自动检测你的 MCP 客户端并写入其配置
重启客户端,52 个工具就在那里了。这条路径不需要 Anthropic 密钥——MCP 服务器 按设计不托管自己的 LLM。
pip install ptai
export ANTHROPIC_API_KEY=sk-... # 或 OPENAI_API_KEY
ptai start https://target.example.com
# 完全本地,无云:
export PENTEST_AI_LLM_PROVIDER=ollama
# 或确定性,完全不用 LLM:
ptai start https://target.example.com --no-llm
默认情况下,每次交战的支出上限为 $10(PTAI_PRICE_LIMIT)。
ptai tools install --tier core # 或 recommended / full
ptai tools install nmap nuclei # 或按名称
ptai serve # 用于仪表板的 HTTP REST + WebSocket
ptai menu # 交互式启动器,无 LLM
在交战开始时,规划器会预测本次运行需要哪些工具,并一次性询问是否安装缺失的 工具。拒绝后该答案会持续生效。
可复现,在 git 中,带原始产物。没有你无法审计的"98.7% 检测率"。
| 工具 | 发现数 | 严重+高危 | OWASP 类别 | 误报率 |
|---|---|---|---|---|
| ptai | 88 | 46 | 5 | 0% |
| ZAP 2.17.0 | 593 | 0 | 1 | 47% |
| Nuclei 3.8.0 | 1 | 0 | 1 | 0% |
| HexStrike v6.0 | 11 | 0 | 1 | – |
n=1,单一评分者,单次运行,针对 OWASP Juice Shop。方法与原始输出见
benchmarks/;完整报告见 docs/benchmarks/juice-shop.md。
诚实的解读: ptai 在具有精选探针覆盖的 SPA Web 目标上表现强劲。 HexStrike 覆盖面更广(云、二进制、CTF),在像 WordPress 这样的传统可爬取表面上 很可能胜过 ptai。Juice Shop 也是互联网上文档最详尽的漏洞应用,因此 LLM 和探针 作者都有先发优势——这正是私有蜜罐数字更低的原因,也是两者都被公布的原因。
- run: pip install ptai
- run: ptai start ${{ vars.STAGING_URL }} --ci --fail-on verified --sarif pentest.sarif
- uses: github/codeql-action/upload-sarif@v3
with: { sarif_file: pentest.sarif }
--fail-on verified 仅在 oracle 实际证明的发现上中断构建,因此该门控不会被
扫描器噪声触发。SARIF 上传到 GitHub Code Scanning,发现会作为 PR 评论发布。
GitLab 和 Jenkins 模板见 docs/ci-cd.md。
recon ──▶ auth ──▶ web ──┬──▶ ad
├──▶ cloud ┌──────────────────┐
└──▶ api ──────────▶│ findings DB │
│ scope-guarded │
└────────┬─────────┘
▼
verify (oracles, N/N)
▼
chain ─▶ validate ─▶ detect ─▶ report
md · html · pdf · SARIF · JUnit
18 个专家代理运行这些阶段。有 API 密钥时,每个代理使用 LLM 对结果进行推理; 没有时,它作为确定性工具循环运行。无论哪种方式,阶段顺序和检测都是相同的 ——探针发现 bug,LLM 只负责协调。
AppSec 团队,将经过身份验证的扫描接入每个 PR,并设置仅在已证明的发现上触发 的门控。顾问,希望报告自己写出来,并提供一个客户自己的工程师可以重放的 胶囊。漏洞赏金猎人,宁愿分诊 12 条已证明的发现,而不是 600 条可能。Claude Code / Cursor / Codex 用户,希望在其助手背后有真正的工具,而不产生另一笔 API 账单。
该工具是 MIT 且永久免费——这一点不会改变。
如果你希望交付一次渗透测试,而不是自己运行,或者想要一个带历史和团队访问权限 的托管工作区,两者都在 pentestai.xyz。 交付的交战中的每条发现都附带一份证明胶囊,你的工程师可以自己重放,这与一份 满是严重性评级的 PDF 是本质不同的产物。
问题咨询:[email protected]
ptai 对你指定的目标执行真实的网络和主机操作。 你对你拥有每个目标的明确书面授权负全部责任。 测试你不拥有的系统可能违反 《计算机欺诈和滥用法》、1990 年《计算机滥用法》、GDPR 第 32 条以及其他地方的 等效法律。
首次运行会提示接受 AUP 并持久化它。在 CI 中设置
PENTEST_AI_AUP_ACCEPTED=1。范围外的主机在工具调用时会被拒绝。三个护栏默认
关闭,值得开启:intensity=safe 跳过改变状态的探针,respect_rate_limits
遵守 429/Retry-After,strict_scope 拒绝主机外请求。