own2pwn-fr/a2pwn
GitHub: own2pwn-fr/a2pwn
a2pwn 是一个基于 LangGraph 多 agent 编排的自主 Web 渗透测试工具,通过对抗性验证和流量沙箱实现零误报的漏洞发现与证据固化。
Stars: 2 | Forks: 0
a2pwn
一个自主的、基于证据的 Web 渗透测试编排器。
一个 LangGraph master 会分发经过对抗性验证的子 agent,对真实目标进行侦察和漏洞利用
—— 每一个请求都通过 burpwn
沙箱路由,每一个发现都在被允许进入报告之前,由确定性预言机重新推导得出。
## 它是什么
a2pwn 之于自主 agent,就如同完整的测试方法论之于人类渗透测试人员:它
不会仅仅停留在检查安全头和发送两个探测请求上。它会深入挖掘 —— 反射型/存储型/DOM型/突变型 XSS、盲打和 OOB SQLi、SSTI、SSRF(云元数据 / DNS重绑定 / gopher)、请求走私(CL.TE / TE.CL /
CL.CL / TE.TE)、HTTP/2+ 和 HTTP/3 异步脱节、逐跳 header 注入、缓存投毒 / CPDoS、Web
缓存欺骗、Host header 攻击、CORS、JWT/认证漏洞、IDOR/BOLA、跨链访问控制、
原型链污染、反序列化、XXE、路径遍历 / LFI、开放重定向、竞态条件以及
JS 供应链(解包应用 → 识别库 → 拉取代码 → 检查已知 CVE → 在实时站点上验证)—— 将各个发现中的基础攻击手法串联起来。
两项核心准则驱动着所有的设计决策:
1. **架构上保证历史记录纯净。** master 仅在追加式的 `(task → clean result)` 记录链条上进行推理。子 agent 的澄清问答、ReAct 记录、验证者的
批判与重试都仅存在于无状态的子图中存活和消亡 —— 它们*绝不*会合并到
master 的规范历史中。master 看到的永远是子 agent “一次就成功”。这是
在结构上强制执行的(master 状态没有任何通道可以让记录泄露出去),而不是
靠人为约束。
2. **0 误报 (0-FP) 证据。** 只有当确定性预言机
(差分 / OOB 回调 / 标记 / 时序 / 双身份)*在沙箱内部*重新推导出该发现,**并且**有一个非空的 burpwn 流量批次证明确实捕获到了相关流量时,该发现才会被标记为 `confirmed`。一个
捕获到零流量的网络操作是一个明显的警报(流量逃脱了沙箱),而绝不
是静默的证据。
## 安装与运行
```
# 一次性,无 clone(uv 安装到临时 env 中)
uvx a2pwn run --target https://app.example.com --objective "find and prove exploitable web vulns"
```
或者从代码检出运行:
```
uv sync
uv run a2pwn run --target https://ginandjuice.shop --objective "audit the shop end to end" --yes
```
发现的漏洞结果和每个批次的 HAR 导出文件将存放在运行目录下。
### 环境要求
- 位于 `PATH` 路径下的 [burpwn](https://github.com/own2pwn-fr/burpwn)(沙箱 + 拦截代理)。运行
一次 `burpwn doctor` 以确认主机支持无 root 权限的用户/网络命名空间。
- 一个模型后端(见下文)。默认配置需要一个可用的 Claude Code 登录 —— 无需其他。
## 后端
a2pwn 通过一个工厂函数(`a2pwn.backends.make_model`)与任何 LangChain 聊天模型进行通信。为每个角色(`master`、`clarifier`、`executor`、`verifier`)选择一个
提供商;验证者默认使用
Opus 级别的模型,并且要求与执行者不同,以保持验证的对抗性。
| `provider` | 认证 | 额外依赖 |
|-------------------|-----------------------------|-----------------|
| `claude-code` | **Claude Code 订阅(OAuth,默认)** | 内置 |
| `anthropic` | `ANTHROPIC_API_KEY` | 内置 |
| `openai` | `OPENAI_API_KEY` | `a2pwn[openai]` |
| `bedrock_converse`| AWS credentials | `a2pwn[aws]` |
| `google_vertexai` | GCP ADC | `a2pwn[vertex]` |
| `litellm` | 视提供商而定 | `a2pwn[litellm]`|
| `codex` / `antigravity` | 订阅(尽力而为,回退到密钥) | 内置 |
## 工作原理
```
MASTER graph (dispatch-only; never touches a target)
bootstrap → plan → route_dispatch ──▶ [Send × N] run_subagent ──▶ integrate → plan | report
│ (FORK BOUNDARY)
▼
SUB-AGENT graph (own state, checkpointer=False, dies on return)
clarify → [Send × question] answer_one → compose_prompt
→ execute (ReAct: skills + tools + burpwn) → verify (adversarial, oracle)
→ distill → clean result
```
- master 可以分发**单个**任务、并行的**批次**任务,或者**验证工作流**。
- **澄清分叉(“比特币分叉”):** 子 agent 会根据需要提出尽可能多的问题;每个问题都由一个独立的分叉并行回答,该分叉注入了 master 上下文的*精简*快照。
这些都不会进入 master 的历史记录。
- **对抗性验证:** 一个不同的、更强大的模型通过其预言机重新推导每一个候选结果,并
拒绝任何没有真实捕获证据的内容。一次**独立的**第二次分发会在干净的环境下复现
已确认的发现;协调机制只会*提升*(绝不会静默丢弃)
某个发现。
- **证据 = 高亮的 burpwn 批次。** 每个发现的请求都被分组到专用的
工作区中,被打上标签(例如 `xss`,红色)并进行注解 —— 因此“此批次 == XSS”是可查询的,并且
能干净地导出为 HAR。
## 技能与工具
- **技能**(`skills/`)是精心策划的、自我描述的安全知识 —— 包含忠实于 Claude-Code 的
frontmatter 以及 a2pwn 的扩展(标签、工具、payload 来源、一个 `verify.py` 预言机)。子 agent
通过 FTS/标签预过滤器发现它们,然后加载相关的一个或多个技能。
- **Payload** 通过*引用*来自固定的内置来源
([PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings) MIT,
[HackTricks](https://github.com/HackTricks-wiki/hacktricks) CC-BY-SA,nuclei-templates MIT) —— 绝不
复制。运行 `git submodule update --init` 来填充 `vendor/`。参见 `ATTRIBUTION.md`。
- **工具**(nuclei、katana、hydra、nmap、ffuf、sqlmap、subfinder、httpx、webcrack…)通过
`burpwn exec` 运行,以便捕获它们的流量。无法被捕获的工具(例如,位于自己
netns 中的 Docker)会在警告下运行,并且永远不会声称掌握了证据。
## 状态
`0.1.0` —— 早期阶段。编排核心、后端、burpwn 集成、预言机、目录、报告和
CLI 已就绪,并且纯净历史 / 协调 / 捕获警报等不变量正在测试中。
基础技能库正在不断扩展,以在各个类别上达到完全的深度。
## 许可证
[AGPL-3.0-or-later](LICENSE)。
标签:CISA项目, LangGraph, LLM代理, Web渗透测试, 红队自动化, 自动化安全工具, 逆向工具