Xavrir/burp-autopilot
GitHub: Xavrir/burp-autopilot
一个通过 CLI 和 AI agent 按需驱动 Burp Suite 的自动化安全测试工具,支持脚本化 fuzzing、扫描启动和代理历史检索等功能。
Stars: 1 | Forks: 0
# Burp Autopilot Skill
**通过命令行驱动 Burp Suite。** 它发送实时请求、搜索代理历史记录、
运行 Collaborator (OOB) 检查、启动扫描并对 fuzzing 进行脚本化,每一项都是一个普通的 CLI
子命令,您可以将其串联成一个 Web 安全工作流。
它是运行常驻型 Burp MCP server 的一种按需替代方案。您无需注册
持久的 MCP client,只需调用一个小型的 Python client,仅在需要时与 Burp 进行通信。
这使得它可以轻松融入脚本、CI 任务或编码 agent 的工具循环中。
该仓库包含两部分:
- `skills/controlling-burpsuite-autonomously/` 包含 agent skill:其传输 client
`burp_client.py`、一个通过 Burp 驱动浏览器的封装器,以及参考文档。您可以将其加载到
[Claude Code](https://docs.claude.com/en/docs/claude-code) 或兼容 opencode 的
运行器中,或者直接将 client 作为 CLI 调用。
- `extension/` 是一个可选的配套 Burp 扩展(`burp-autopilot-ext`,构建于
[Montoya API](https://portswigger.github.io/burp-extensions-montoya-api/) 之上)。它添加了原生 MCP 扩展无法做到的
两件事:启动扫描,以及一个可脚本化的 fuzzing 引擎。
## 功能说明
| 能力 | 支持来源 |
|---|---|
| 发送实时 HTTP/1.1 & HTTP/2 请求 | 原生 MCP 扩展 (阶段 1) |
| 读取 / 正则搜索代理 & WebSocket 历史记录 | 原生 MCP 扩展 |
| 生成 & 轮询 Burp Collaborator (OOB) payload | 原生 MCP 扩展 |
| 读取 scanner 问题、切换拦截、导出/修改配置 | 原生 MCP 扩展 |
| 编码/解码 (URL, base64) | 原生 MCP 扩展 |
| 启动主动审计 & 爬取,轮询状态 | 配套扩展 (阶段 2) |
| 带有机器可读的逐请求结果的脚本化 fuzzing | 配套扩展 |
| 会话结束后依然存活的原生 REST-API 扫描 | Burp Pro REST API (阶段 3) |
| *通过* Burp 浏览目标 (Playwright) | `burp-browser` + Burp proxy |
## 本 Skill 与原生 Burp MCP server 的对比
此 skill 的阶段 1 与您通常作为独立 MCP server 注册的同一个原生 "MCP Server" 扩展进行通信。
下表说明了当您将此 skill 放在其前面时会有什么变化,而不是对扩展本身的批评;它是这里所有其他内容
构建的基础。
| | 原生 Burp MCP (直接使用) | Burp Autopilot Skill |
|---|---|---|
| 连接模型 | 常驻开启,在您的 agent 配置中注册为持久的 MCP client | 按需:仅在命令运行时生成连接,随后退出 |
| 调用方式 | 原始 JSON-RPC 工具调用;您每次都需要提供完整的 schema | 确定性的 CLI 子命令(`send-request`, `proxy-history-regex` 等),具有合理的默认值 |
| 工具命名 | 固定为 client 在连接时缓存的内容 | 每次运行时从 `list-tools` 实时解析,因此重命名或添加的工具不会破坏它 |
| 输出大小 | 无论扩展返回什么,都没有上限 | 字段截断 + 总输出上限,为 agent 的上下文窗口进行了调整 |
| 启动扫描 | 不支持;该扩展只能读取现有的 scanner 问题 | 通过配套扩展实现 `scan-start` / `scan-status` (Pro) |
| 脚本化 fuzzing | 不支持;没有可编程的攻击引擎 | `fuzz`,提供每个请求的状态/长度/时间结果 (Community + Pro) |
| REST API 扫描 | 未连接;您需要自己编写 Burp REST API 的脚本 | `rest-scan-start` / `rest-scan-status` 子命令 (Pro) |
| 通过 Burp 浏览 | 超出了 MCP server 的范围 | `burp-browser`:一个通过 Burp proxy 路由的 Playwright 会话 |
| 在不支持 MCP 的 client 下工作 | 否,需要一个支持 MCP 的 client | 是,它是一个纯 Python 脚本;可以从 shell、CI 任务或 cron 运行 |
| 设置 | 添加到您的 MCP client 配置中,并保持运行 | `npx skills add Xavrir/burp-autopilot`,然后临时调用 |
**特别说明关于输出大小的这一行:** 原生扩展会返回 Burp 提供给它的任何内容,
没有上限。单个 `proxy-history-regex` 匹配可以包含完整的请求和响应体,
而 Burp 的主体通常每个都有数 KB;如果在没有 client 端限制的情况下拉取哪怕数量适中的条目,单次调用就可能达到六位数的字节数,这相当于针对您的上下文的数万个 token。这个 client 在构造上对其进行了限制:
每个超过 1,000 个字符(大约 250 个 token,按照人们用于英文/JSON 文本的粗略的 4 个字符/token 速率计算)的字符串字段都会被截断,并且完整的 JSON 响应在打印之前会被硬性限制在 50,000 字节(大约 12,500 个 token)以内。因此,对于“它能节省多少”的真正回答是:它将无限制的开销转变为有限的开销,每次调用最多大约值 12,500 个 token,无论 Burp 持有多少流量。可以通过 `--field-cap` / `--total-cap` 为每次调用提高或降低这些上限,或者在您故意想要完整查看某一条记录时使用 `--raw`。
在两者重叠的地方(代理历史、Repeater 暂存、Collaborator、编码器、配置导出/修改),它们的表现是一样的,因为底层使用的是相同的扩展。下面描述的 Community/Pro 门槛对两者同样适用;此 skill 不会解锁原生扩展同样需要 Pro 才能使用的任何内容。
## 架构
分为三层。仅阶段 1 是必需的;其余为可选。
```
your CLI / agent / script
│
▼
burp_client.py ───────────────┬─────────────────────────┐
│ (Phase 1) │ (Phase 2) │ (Phase 3)
│ stdio↔SSE │ loopback HTTP │ REST
▼ ▼ ▼
mcp-proxy.jar burp-autopilot-ext.jar Burp Pro REST API
│ SSE :9876 (Montoya) :9877 :1337
▼ ▲ ▲
Burp "MCP Server" ext ─────────┴──────────────────────────┘
(27 live tools) scan-start / scan-status / fuzz
burp-browser → Playwright Chromium ──(proxy :8080)──▶ Burp (history + passive scan)
```
- 阶段 1 是核心。`burp_client.py` 启动 `mcp-proxy.jar`(一个 stdio↔SSE 桥接器)并通过
JSON-RPC 与 Burp 内置的 MCP Server 扩展通信。工具名称是从扩展中 *实时* 解析的,
而不是硬编码的,因此 client 能够在扩展更新后继续正常工作。
- 阶段 2 添加了配套扩展,用于通过单独的环回 endpoint 进行扫描启动和 fuzzing。
- 阶段 3 将 Burp 的原生 REST API 连接为替代扫描路径。
有关完整设计及其限制,请参阅 [`docs/architecture.md`](docs/architecture.md)。
## 前置条件
- 启用了内置 "MCP Server" 扩展的 Burp Suite(在 Settings 中,然后打开 MCP
server;环回 SSE `127.0.0.1:9876`)。Community 或 Pro 都可以,但请先阅读
[版本矩阵](#burp-edition-community-vs-pro):Community 涵盖了请求、代理
和编码器功能以及通过 Burp 运行的 Playwright,而 scanning、Collaborator (OOB) 和
REST API 则需要 Pro。
- `mcp-proxy.jar`,用于 MCP endpoint 的 stdio↔SSE 桥接器。您需要自行提供(参见
[获取 mcp-proxy.jar](#obtaining-mcp-proxyjar)) 并使用
`BURP_MCP_PROXY_JAR` 指向它。
- Java 17+。构建配套扩展需要 JDK 21。
- Python 3.8+。该 client 仅使用标准库,因此无需进行任何 `pip install`。
- 可选,仅适用于 `burp-browser`:
[`playwright-cli`](https://github.com/microsoft/playwright) 和
`playwright-cli install-browser chromium`。
## 安装说明
### 使用 `npx skills` (推荐)
使用 [`skills`](https://github.com/vercel-labs/skills) 包管理器进行安装,这也是
[skills.sh](https://www.skills.sh) 目录背后使用的同一
工具。只需一条命令:
```
npx skills add Xavrir/burp-autopilot
```
它会获取此仓库,找到 skill,并将其放在您的 agent 查找的位置(Claude Code、
opencode 等)。相关命令:
```
npx skills use Xavrir/burp-autopilot # try it without installing
npx skills list # show what's installed
```
这仅安装 skill(Python client 和参考资料)。配套扩展需要
Java 构建并手动加载到 Burp 中,下文会有说明。
### 或者将提示词粘贴到您的 agent 中
如果您想让 CLI agent 来进行设置,请将以下内容粘贴进去:
```
Install the Burp Autopilot skill for me by running:
npx skills add Xavrir/burp-autopilot
Then confirm the controlling-burpsuite-autonomously skill shows up (npx skills list). Do not
send any live Burp traffic until I give you an authorized, in-scope target.
```
### 手动安装
```
git clone https://github.com/Xavrir/burp-autopilot.git
cd burp-autopilot
./install.sh # symlinks the skill into ~/.claude/skills/
```
或者跳过安装,直接从克隆的仓库中运行 client:
```
python3 skills/controlling-burpsuite-autonomously/scripts/burp_client.py ping
```
### 配套扩展 (可选,用于扫描 + fuzzing)
```
cd extension
./fetch-deps.sh # one-time: pulls Montoya API + org.json from Maven Central into lib/
./build.sh # -> extension/build/burp-autopilot-ext.jar
```
然后在 Burp 中,转到 **Extensions ▸ Installed ▸ Add ▸ Java** 并选择
`extension/build/burp-autopilot-ext.jar`。请参阅 [`extension/README.md`](extension/README.md)。
## 快速入门
```
cd skills/controlling-burpsuite-autonomously # or your installed skill dir
C="python3 scripts/burp_client.py"
# 1. Preflight:Burp 是否已启动并加载 MCP Server extension?
$C ping
# 2. 发现实时 tool surface(source of truth;切勿硬编码 tool 名称)
$C list-tools
# 3. 通过 Burp 发送实时请求(仅限授权目标)
$C send-request --args '{"content":"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n","targetHostname":"example.com","targetPort":443,"usesHttps":true}'
# 4. Regex 搜索 Burp 已捕获的内容
$C proxy-history-regex --args '{"regex":"api/v1","count":50}'
```
加载配套扩展后:
```
$C autopilot-health
$C scan-start --args '{"type":"audit","urls":["https://in-scope.example/path"],"requireInScope":true}'
$C scan-status --task-id all
```
## 配置 (环境变量)
| 变量 | 默认值 | 用途 |
|---|---|---|
| `BURP_MCP_PROXY_JAR` | `~/mcp-proxy.jar` | stdio↔SSE 桥接器 jar 包的路径 |
| `BURP_MCP_SSE_URL` | `http://127.0.0.1:9876` | Burp MCP Server SSE endpoint |
| `BURP_MCP_JAVA` | `/usr/bin/java` | 用于运行桥接器的 Java 二进制文件 |
| `BURP_AUTOPILOT_URL` / `_PORT` | `http://127.0.0.1:9877` | 配套扩展 endpoint |
| `BURP_AUTOPILOT_TOKEN` | *(未设置)* | 可选的 `X-Autopilot-Token` 共享密钥 |
| `BURP_REST_URL` / `BURP_REST_KEY` | `http://127.0.0.1:1337` | Burp Pro REST API (阶段 3) |
| `BURP_PROXY` | `http://127.0.0.1:8080` | `burp-browser` 使用的代理监听器 |
## Burp 版本:Community 与 Pro
Burp Autopilot 会在您的 Burp 版本暴露的任何接口上运行。大多数传输和
请求级别的功能都可以在 Community 上运行。扫描层需要 Pro,因为这些引擎
根本没有在 Community 中提供。
| 功能 | Community | Pro |
|---|:---:|:---:|
| `send-request` / `send-request-http2`,Repeater 暂存 | 是 | 是 |
| 代理 / WebSocket 历史记录 + 正则搜索 | 是 | 是 |
| 拦截切换、编码器、配置导出/修改 | 是 | 是 |
| `burp-browser` (通过代理的 Playwright) | 是 | 是 |
| 脚本化 `fuzz` (配套扩展,通过 HTTP API 发送) | 是¹ | 是 |
| 主动/被动 scanner (`scan-start`, `scan-status`, `scanner-issues`) | 否 | 是 |
| Burp Collaborator / OOB (`collab-generate`, `collab-poll`) | 否 | 是 |
| REST API 扫描 (`rest-scan-start`, `rest-scan-status`) | 否 | 是 |
| 原生 Intruder 攻击引擎 | 受限 | 是 |
¹ 配套的 `fuzz` 引擎通过 Montoya HTTP API 发送请求,因此 Community 的
Intruder 时间限制不适用于它。无论如何,请保持 payload 集较小并设置 `delayMs`。
## 获取 `mcp-proxy.jar`
`mcp-proxy.jar` 是一个通用的 stdio↔SSE MCP 桥接器,它不包含在此仓库中。请构建或
下载您自己的,放在任何地方,并使用 `BURP_MCP_PROXY_JAR` 指向它。如果您没有配置
桥接器 jar,`burp_client.py` 将回退为直接使用 Python 标准库与 Burp SSE endpoint 进行通信。
## 限制
您可以自动化的范围是 Montoya 和 REST API 暴露的内容。对于任何工具来说,都有一些东西是
无法触及的:DOM Invader、嵌入式 Chromium 浏览器、BApp 和扩展管理
以及仅限 GUI 的对话框。GUI Intruder 攻击引擎也没有完全脚本化,这就是为什么
配套扩展在 HTTP API 之上重建了 fuzzing。因此,这里的“自主”指的是整个 Montoya 加上 REST 接口,而不是字面意义上的 GUI 中的每一次点击。
## 贡献
欢迎提交 Issue 和 PR。请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 许可证
[MIT](LICENSE)。配套扩展链接了在
[`extension/THIRD_PARTY_NOTICES.md`](extension/THIRD_PARTY_NOTICES.md) 中列出的第三方库。
标签:Burp Suite, CISA项目, JS文件枚举, MCP, Web安全, 安全测试, 密码管理, 攻击性安全, 特征检测, 蓝队分析, 逆向工具