Burp官方MCPServer

admin 2026-04-16 05:16:35 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: PortSwigger官方推出BurpSuiteMCPServer扩展,支持MCP协议的AI客户端直接操控Burp进行渗透测试。该工具通过SSE/Stdio双协议传输,提供HTTP请求发送、历史记录查询、Collaborator外带测试等核心功能,支持自定义工具扩展。安装需编译JAR并配置客户端连接,适用于自动化漏洞扫描、流量分析等渗透测试场景。 综合评分: 85 文章分类: 渗透测试,WEB安全,安全工具,红队,漏洞分析


cover_image

Burp 官方 MCP Server

原创

攻防路 攻防路

攻防录

2026年4月14日 11:27 北京

在小说阅读器读本章

去阅读

项目地址:https://github.com/PortSwigger/mcp-server

PortSwigger 官方给 Burp Suite 出了个 MCP Server 扩展。

装好之后,任何支持 MCP 协议的 AI 客户端——Claude Desktop、Cursor、Windsurf、Codex,只要接上这个 Server,就能直接操控 Burp 帮你做渗透测试。抓历史、改包、发请求、跑 Collaborator,全程不用你切窗口。


运行机制

两套传输协议并行

MCP 协议支持两种传输方式:SSE(Server-Sent Events)和 Stdio。Burp 扩展本身跑的是 SSE,默认监听 http://127.0.0.1:9876

支持 SSE 的 MCP 客户端(Cursor、Windsurf 等)直接填 URL 就能连上。但 Claude Desktop 目前只支持 Stdio,所以项目里还打包了一个 Stdio 代理服务器(mcp-proxy),专门负责在客户端和 Burp 之间做协议转换:

AI 客户端 (Stdio) → mcp-proxy (桥接) → Burp 扩展 (SSE, localhost:9876)

这个代理是独立 JAR,源码在 https://github.com/PortSwigger/mcp-proxy,也可以单独抽出来用。

工具定义机制

工具层完全用 Kotlin 数据类声明。每个 @Serializable 的 data class 就是一个工具,类名自动推导成工具名(snake_case),描述字符串直接传给 LLM 当 Tool Description。

分页通过实现 Paginated 接口来支持——数据类加上 count 和 offset 字段,框架统一处理翻页,不用每个工具单独写。

当前暴露的工具

| 类别 | 工具 | | — | — | | HTTP 请求 | 发送 HTTP/1.1 和 HTTP/2 请求 | | 模块联动 | 发包到 Repeater 或 Intruder | | 编解码 | URL 编解码、Base64 编解码、随机字符串 | | 配置管理 | 导出/导入项目和用户级配置(JSON 格式) | | 历史记录 | HTTP 历史、WebSocket 历史(支持正则过滤 + 分页) | | 任务控制 | 暂停/恢复扫描引擎、开关代理拦截 | | 编辑器交互 | 读写当前激活的 Repeater/Intruder 编辑器内容 | | 扫描器(专业版) | 获取漏洞扫描结果、生成 Collaborator 负载、轮询外带交互 |

安全性做了两层控制:HttpRequestSecurity 管发包权限,HistoryAccessSecurity 管历史读取权限。响应体超过 5000 字符会自动截断,防止 LLM context 撑爆。


安装步骤

1. 编译扩展 JAR

需要先装好 Java 并确保 jar 命令可用:

java --version
jar --version

然后 clone 仓库,用 Gradle 编译:

git clone https://github.com/PortSwigger/mcp-server.git
cd mcp-server
./gradlew embedProxyJar

编译完成后,JAR 文件在 build/libs/burp-mcp-all.jar

2. 在 Burp 里加载扩展

打开 Burp Suite → Extensions 标签页 → 点 Add → 类型选 Java → 选刚才的 burp-mcp-all.jar → Next。

加载成功后,顶部出现 MCP 标签页,在里面:

  • 勾选 Enabled 启用 MCP Server
  • 按需勾选 Enable tools that can edit your config(允许 AI 修改 Burp 配置)
  • 默认监听 http://127.0.0.1:9876,端口可以改

3. 接入各类 MCP 客户端

方式一:SSE 直连(Cursor / Windsurf / 其他支持 SSE 的客户端)

直接在客户端配置里填 SSE URL:

http://127.0.0.1:9876
# 或
http://127.0.0.1:9876/sse

方式二:Stdio 代理(Claude Desktop)

扩展内置了一键安装器,点一下能自动写入 Claude Desktop 配置。手动配置的话打开 ~/Library/Application Support/Claude/claude_desktop_config.json,填入:

{
  "mcpServers": {
    "burp": {
&nbsp; &nbsp; &nbsp;&nbsp;"command":&nbsp;"<Burp 自带的 Java 路径>",
&nbsp; &nbsp; &nbsp;&nbsp;"args": [
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;"-jar",
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;"/path/to/mcp-proxy-all.jar",
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;"--sse-url",
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;"http://127.0.0.1:9876"
&nbsp; &nbsp; &nbsp; ]
&nbsp; &nbsp; }
&nbsp; }
}

保存后重启客户端,确保 Burp 已经在跑且扩展已加载。


实战场景

场景一:用 AI 客户端翻 Proxy 历史找漏洞

测试期间流量全走 Burp 代理,测完之后让 AI 帮你审一遍:

“帮我看 Proxy 历史里有没有包含 SQL 关键字的请求,把参数列出来逐一分析是否有注入风险”

AI 客户端会调用 get_proxy_http_history_regex,正则匹配 SQL,分页拉取数据,逐条过。不需要你手动翻几百条记录。

技术要点:分页参数 count 和 offset 由 AI 自己控制;响应超长会自动截断到 5000 字符,防止 context 溢出。

场景二:Collaborator 外带测试

测 SSRF 或盲注时,Collaborator 负载很实用:

“给这个请求参数生成一个 Collaborator payload,注入进去发一次,然后帮我看有没有收到 DNS 或 HTTP 回调”

AI 会依次调用:

  1. generate_collaborator_payload — 拿到 payload URL 和 payloadId
  2. send_http1_request — 把 payload 注入请求发出去
  3. get_collaborator_interactions — 轮询外带交互结果

整个 OOB 测试链路完整走完,不用切 Collaborator 标签盯着等。

技术要点:Collaborator 功能需要 Burp Suite 专业版,社区版不含相关 API。

场景三:Repeater 联动改包

发现接口有问题,想让 AI 自动构造 payload 试一遍:

“读取当前 Repeater 里的请求,把 id 参数改成 ' OR 1=1--,发出去,看看返回了什么”

AI 调用 get_active_editor_contents 读当前 Repeater 窗口内容,改完之后用 set_active_editor_contents 写回去,再调 send_http1_request 实际发包。

技术要点get_active_editor_contents 取的是键盘焦点所在的文本区域,需要 Burp 窗口处于前台激活状态,否则返回 <No active editor>


自定义工具

项目工具层扩展很直接,在 Tools.kt 里按统一模式写:

第一步:定义数据类,字段对应 AI 需要传入的参数:

@Serializable
data&nbsp;class&nbsp;MyCustomScan(
&nbsp; &nbsp;&nbsp;val&nbsp;targetHostname: String,
&nbsp; &nbsp;&nbsp;val&nbsp;targetPort:&nbsp;Int,
&nbsp; &nbsp;&nbsp;val&nbsp;payload: String
)

第二步:在 Server.registerTools() 里注册:

mcpTool<MyCustomScan>("扫描指定目标并返回结果") {
&nbsp; &nbsp;&nbsp;val&nbsp;request = HttpRequest.httpRequest(
&nbsp; &nbsp; &nbsp; &nbsp; HttpService.httpService(targetHostname, targetPort,&nbsp;false),
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;"GET / HTTP/1.1\r\nHost:&nbsp;$targetHostname\r\n\r\n"
&nbsp; &nbsp; )
&nbsp; &nbsp;&nbsp;val&nbsp;response = api.http().sendRequest(request)
&nbsp; &nbsp; response?.toString() ?:&nbsp;"<no response>"
}

工具名由类名自动推导(转 snake_case)。带分页就改成 mcpPaginatedTool<T>,并在数据类里实现 Paginated 接口(加 count 和 offset 字段),框架负责翻页。

Burp Montoya API 能做的所有操作,都可以这样封成工具暴露给 AI 客户端。

往期推荐 📚

repo-analyzer:一句话生成开源项目深度架构报告

java-audit-skills:让 Claude 帮你做 Java 代码安全审计

WMPFDebugger 微信小程序调试神器

欢迎关注“攻防录” ✨


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:攻防录 攻防路 攻防路《Burp 官方 MCP Server》

评论:0   参与:  0