
pentest-ai v1.2.0
开源 AI 渗透测试工具,可验证每项发现。机器预言机会重新运行每个漏洞利用;通过验证的漏洞会附带一个证据胶囊,供你自行复现。
两分钟上手,无需 API 密钥,无需自有目标
pip install ptai && ptai demo
ptai demo 会扫描一个捆绑的易受攻击应用,并输出 4 findings, 3 oracle-VERIFIED。
它会从证明胶囊中重放一个实时漏洞(replay 3/3),然后对加固后的相同路由再次扫描,并输出 0 findings。
有两点值得注意。发现项会随着漏洞的出现和修复而出现和消失,而不是因为工具静默了——两次运行之间唯一的变化就是修复本身。而且四个发现项中有一个仍是候选状态:SQLi 登录绕过是真实存在的,但没有 oracle 能在该路由上重新证明它,因此它没有获得徽章。这个缺口正是产品在正常工作的体现,而不是演示中的 bug。
这里的 VERIFIED 究竟意味着什么
大多数扫描器只会告诉你某个东西可能可以被利用,然后把分类工作留给你。 ptai 会将发现项视为候选,直到一个指定的机器 oracle 重新运行该利用并 N 次中复现 N 次。只有到那时,它才会获得 VERIFIED 状态。
三个特性让这不仅仅是一句口号:
LLM 永远不会产生判定。 这条规则是在代码层面强制执行的,而非靠策略:无法指明是哪个 oracle 获得该判定的结论会被拒绝。LLM 负责协调运行并推理结果,但它永远不会决定一个 bug 是否真实存在。
每个 oracle 都有一个必须失败的对照组。 一个可信头绕过必须带该头返回特权内容,不带该头时返回拒绝。一个泄露凭据检查必须对真实密钥被接受,而对一个故意损坏的孪生密钥被拒绝。一个对所有请求都返回 200 的端点什么也得不到。这阻止了“返回了 200”被误认为是证据。
第三方扫描器输出会被保留。 nuclei、nikto 和 zap 的结果不会仅凭其自身权威就成为发现项。在 ptai 自己的 oracle 独立重新证明之前,它们保持未验证状态。
每个 VERIFIED 发现项都会附带一个可移植的证明胶囊——发现项、重新证明的配方和收据。任何人都可以针对实时目标运行 ptai replay,并观察 oracle 重新确认,无需信任 ptai。胶囊故意不签名:重放就是信任机制,而不是一个你必须盲目相信的签名。
诚实的数字
| 具有可用 oracle 的漏洞类别 | 14 |
| 库中的探针数量 | 63 |
| 可获得 VERIFIED 的探针数量 | 28 |
| Oracle 种类 | 23 |
| 工具包装器 | 203 |
| …目前能将输出解析为发现项的 | 18 |
| MCP 工具 | 52 |
| 专家代理 | 18 |
| 测试 | 在 Python 3.10 / 3.12 / 3.14 上共 2,729 个 |
在一个故意设置的易受攻击蜜罐上,23 个发现项在 14 个类别中以 100% 的精确率通过验证,零误报。在一个标准的 OWASP Juice Shop 上,单次扫描即可验证 12 个发现项。
请仔细阅读这些数字,因为缺口才是重点。 存在 63 个探针,但只有 28 个能获得判定;其余 35 个报告的是诚实的候选。注册了 203 个包装器,但只有 18 个能将工具输出转化为发现项——其余的运行后只返回原始文本。oracle 门槛换来的是精确率,而不是检出率:它消除了误报,但不会发现更多 bug。
蜜罐测试框架(tests/honeypot/)和干净应用零误报门槛(tests/cleanapp/)都随本仓库发布并在 CI 中运行,因此这些结果是可复现的,而非截图。
它不能做什么
直说无妨,因为一个过度宣传自己的安全工具比没用更糟糕。
- 它是一个 Web 应用扫描器。 所有 63 个探针和所有 23 种 oracle 都针对 HTTP。AD、云、移动和无线领域有代理和工具包装器,但背后没有探针库和 oracle。
- 它无法进行本地提权。 这需要在您已拥有的主机上执行代码。ptai 是远程测试的,没有这样的通道,因此提权代理会报告
unsupported,而不是一个误导性的零。 - 它不是 CVE 扫描器。 没有版本到 CVE 的数据库,也没有漏洞利用库。CVE 相关工作仅限于对泄露清单进行 osv.dev 查询。
- Playbook 只做规划,不执行。
ptai playbook run会解析依赖关系并打印计划。针对目标运行它尚未实现。 - 它不是自主的。 完全自主的 LLM 渗透测试代理端到端完成任务的概率为 21–31%;人工辅助的设置可达 64%。ptai 是为第二种模式构建的。在运行中途按两次 Ctrl+C 即可接管。
完整的内部缺陷清单(包括上述所有内容)是公开跟踪的,而不是悄悄处理。如果这里有什么不对,提交一个 issue,它就会被修正。
安装
路径 1 — 从 Claude Code、Cursor 或 Codex 驱动(无需 API 密钥)
您现有的 AI 订阅就是 LLM。ptai 提供工具。
pip install ptai
ptai mcp install # 自动检测您的 MCP 客户端并写入其配置
重启客户端后,52 个工具就位。此路径不需要 Anthropic 密钥——MCP 服务器按设计不托管自己的 LLM。
路径 2 — 独立 CLI
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)。
安全工具、REST API 和其他选项
ptai tools install --tier core # 或 recommended / full
ptai tools install nmap nuclei # 或按名称安装
ptai serve # 用于仪表盘的 HTTP REST + WebSocket
ptai menu # 交互式启动器,无需 LLM
在参与开始时,规划器会预测运行所需的工具,并询问一次是否安装缺失的工具。选择拒绝后,该选择会被记住。
基准测试
可复现、在 git 中、带原始产物。没有您无法审计的“98.7% 检出率”。
| 工具 | 发现项 | Critical+High | 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 和探针作者都有先发优势——这正是私有蜜罐数字更低的原因,也是两者都被公开的原因。
集成到 CI
- 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 拒绝非目标主机的请求。
带外回调(OAST)— 隐私
盲注类别(盲 SSRF/SQLi/XXE、存储型 XSS、SSTI、Log4Shell)通过回调检测,默认路由到 ProjectDiscovery 的公共 oast.fun。
每次参与都会在本地生成一个新的 RSA-2048 密钥对。交互负载在静态时使用 AES-CTR-256 加密,密钥用 RSA-OAEP-SHA256 包装到您的公钥,因此只有您的本地进程可以解密它们。但元数据对服务器可见:发生了交互、目标源 IP、时间戳和协议。
PortSwigger 在其漏洞赏金规则中禁止使用公共 collaborator,大型项目也越来越要求测试者自控回调基础设施。对于付费参与,请自托管 Interactsh:
ptai start http://target --oast-server https://oast.example.com --oast-token <T>
ptai start http://target --no-oast # 或完全禁用
常见问题
我需要 API 密钥吗? MCP 路径不需要——您的 Claude Code / Cursor / Codex 订阅就是 LLM。只有独立 CLI 需要,而且即使在那里,Ollama 也可以完全本地运行。
它是自主的吗? 不是,它也不声称是。探针负责检测,LLM 负责协调,您来做决定。按两次 Ctrl+C 可在运行中途接管。
对生产环境安全吗? 只有在有书面授权并开启上述三个防护栏的情况下才安全。
它会回传数据吗? 没有遥测;发现项留在您的磁盘上。OAST 回调是唯一的例外——见上文,或运行 --no-oast。
这与让 Claude 去黑客攻击有什么不同? 一个精选的确定性探针库发现 bug,一个机器 oracle 证明它们。单独的 LLM 只会给您一个看似合理的猜测,而无法判断它是否真实。
生态系统
| 仓库 | 内容 |
|---|---|
| pentest-ai | 本仓库。CLI + MCP 服务器。 |
| pentest-ai-agents | 独立的 Claude Code 子代理文件。可选。 |
Star 历史
许可证
MIT。随您怎么用。
如果 ptai 为您省下了一个周日,请 给仓库点个 star。