Files
reverse-skill/burp-mcp-full/README.md
T
2026-08-08 18:32:33 +08:00

182 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# BurpSuite MCP Full Control Extension
通过 MCP 协议完整控制 BurpSuite 的所有核心功能。跨平台支持 Windows / Linux (Kali) / macOS。
## 快速开始
### 1. 编译扩展
**Windows**:
```cmd
cd burp-mcp-full
build.bat
```
**Linux / Kali / macOS**:
```bash
cd burp-mcp-full
chmod +x build.sh
./build.sh
```
构建脚本会自动:检测 JDK 21+、下载依赖(montoya-api 2025.5 / gson / nanohttpd)、编译、把扩展描述符(`META-INF/extensions/burp-extension.properties`)打入 jar、打包 fat jar。无需 Gradle。
输出:`build/libs/burp-mcp-full.jar`。
### 2. 加载到 Burp
```
Burp Suite → Extensions → Add → Java → 选择 build/libs/burp-mcp-full.jar
```
加载后在 Output 看到:
```
[MCP] Server started on http://127.0.0.1:9876
```
### 3. 鉴权(v2 起默认启用)
扩展启动时自动生成随机 token 并写入 `~/.burp-mcp-token`。`mcp-bridge.js` 会自动读取该文件并在每个请求携带 `Authorization: Bearer <token>` 头,无需手动配置。
需要固定 token 时(例如多个客户端共享),可用:
- JVM 参数:`-Dburp.mcp.token=<token>`
- 环境变量:`BURP_MCP_TOKEN=<token>`(同时用于 bridge 侧)
所有 `/health`、`/tools`、`/`(POST)请求均要求携带该头,否则返回 403。CORS 已收敛为仅允许 `http://127.0.0.1` 来源。
### 4. 配置 MCP 客户端
在任何 MCP 客户端(Claude Code / Kiro / Cursor / Cline / Windsurf)中添加(stdio 模式):
```json
{
"mcpServers": {
"burpsuite": {
"command": "node",
"args": ["<本目录路径>/mcp-bridge.js"]
}
}
}
```
### 5. 开始使用
对 AI 说:"分析 Burp 代理历史中的请求,找出安全漏洞"
## 功能列表
扩展暴露 78 个工具。常用分类如下(完整列表见 `src/main/java/com/burpmcp/McpHttpServer.java` 的 `getToolList()`,或访问 `GET http://127.0.0.1:9876/tools`,需携带 Authorization 头):
| 分类 | 工具 |
|------|------|
| Proxy 历史 | `proxy_history`, `proxy_detail`, `proxy_history_filtered`, `proxy_websocket`, `proxy_clear`, `search_history`, `highlight`, `annotate`, `compare` |
| 发送请求 | `send_request`, `send_to_repeater`, `repeater_send`, `repeater_modify_send`, `send_to_intruder` |
| Intruder 攻击 | `intruder_attack`, `intruder_attack_async`, `intruder_attack_wordlist`, `intruder_pitchfork`, `intruder_cluster_bomb`, `intruder_battering_ram`, `intruder_with_options`, `payload_process` |
| 扫描 / 爬取 | `scan`(主动/被动), `scan_active`, `scan_results`, `scan_issue_detail`, `crawl`, `sequencer` |
| Scope / Sitemap | `sitemap`, `target_info`, `get_scope`, `add_to_scope`, `remove_from_scope`, `add_issue` |
| 拦截 / 规则 | `intercept_toggle`, `register_http_handler`, `remove_http_handler`, `register_proxy_rule`, `remove_proxy_rule` |
| 编解码 | `encode`, `decode`, `convert_request`, `export_request`, `generate_csrf_poc`, `extract_from_response`, `token_analysis` |
| Collaborator | `collaborator_generate`, `collaborator_poll` |
| 配置 | `export_config`, `import_config`, `set_upstream_proxy`, `set_dns_override`, `set_http2`, `cookie_jar`, `save_project`, `burp_version`, `extensions_list`, `log` |
> 扫描/爬取(`scan`、`scan_active`、`crawl`)需要 **Burp Professional**。Community 版会返回明确的许可证错误。手动添加的 issue(`add_issue`)会写入 Site map。
## 关键工具参数
### `intruder_attack` — 自动化枚举攻击
| 参数 | 说明 |
|------|------|
| `url_template` | URL 模板,占位符默认 `@@` |
| `placeholder` | 占位符字符串(默认 `@@`) |
| `from` / `to` | 枚举起止值 |
| `pad_digits` | 补零位数(0 不补) |
| `method` | HTTP 方法(默认 GET) |
| `body_template` | 请求体模板(含占位符) |
| `headers` | 请求头对象 |
| `success_length_not` | 命中条件:响应长度 ≠ 此值 |
| `success_contains` | 命中条件:响应体包含此字符串 |
### `scan` — 启动审计
| 参数 | 说明 |
|------|------|
| `url` | 目标 URL(必填,自动加入 scope) |
| `mode` | `active`(默认)或 `passive` |
启动后用 `scan_results` 轮询 issues 与活动审计状态(请求数、错误数、插入点数)。
### `register_proxy_rule` — 代理请求拦截规则
| 参数 | 说明 |
|------|------|
| `url_contains` | 命中条件:URL 包含此串 |
| `intercept` | `true` 拦截 / `false` 放行不拦截(默认 true) |
通过 `remove_proxy_rule` 注销规则(基于 `Registration.deregister()`,真正从 Burp 卸载)。
## 调用示例
### 查看代理历史
```json
POST http://127.0.0.1:9876
{"tool": "proxy_history", "params": {"limit": 10, "url_filter": "personalblog"}}
```
### 发送请求
```json
POST http://127.0.0.1:9876
{"tool": "send_request", "params": {"method": "GET", "url": "https://example.com/api/test"}}
```
### 自动化枚举攻击(核心功能)
```json
POST http://127.0.0.1:9876
{
"tool": "intruder_attack",
"params": {
"url_template": "https://target.com/api/verify?code=@@",
"method": "POST",
"from": 0,
"to": 999999,
"pad_digits": 6,
"success_length_not": 176,
"headers": {"User-Agent": "Mozilla/5.0"}
}
}
```
### 开关拦截
```json
POST http://127.0.0.1:9876
{"tool": "intercept_toggle", "params": {"enable": false}}
```
## 端口配置
默认监听 `127.0.0.1:9876`。如需更改(例如与 PortSwigger 官方 MCP 扩展同端口冲突):
1. **Burp 侧**:启动 Burp 时传 JVM 参数 `-Dburp.mcp.port=9877`,或设环境变量 `BURP_MCP_PORT=9877`。
2. **桥接侧**:MCP 客户端配置里设环境变量 `BURP_MCP_PORT=9877` 与 `BURP_MCP_HOST=127.0.0.1`。
两侧端口必须一致。若 Burp 未运行或端口不通,桥接会在 `tools/list` 与 `tools/call` 返回明确的连接错误指引。
## 故障排查
| 现象 | 排查 |
|------|------|
| Burp Output 无 "[MCP] Server started" | 端口被占用或扩展加载失败,查 Burp Errors 面板 |
| MCP 客户端报 "Burp MCP not connected" | 确认 Burp 已运行且扩展已加载;确认两侧端口一致 |
| 扫描返回 "requires Burp Professional" | 正常,Community 版不支持 Scanner API |
| `remove_http_handler` / `remove_proxy_rule` 无效 | 确认之前 `register_*` 返回 success=true |
## 源码构建(Gradle 可选)
```bash
cd burp-mcp-full
gradle jar # 需本机已装 Gradle 8.7+
# 输出: build/libs/burp-mcp-full.jar
```
> 推荐使用 `build.bat` / `build.sh`(零依赖,自动下载 jar)。Gradle 路径仅作备选。