文章总结: 文档揭示了ModelContextProtocol(MCP)服务器作为新兴攻击面的安全风险,并介绍了Fenrisk团队开发的BurpSuite插件MCPwned。该插件能自动识别MCP服务器、枚举其工具能力,并预填充渗透测试载荷,通过四步流程(被动识别、主动探测、能力审计、漏洞利用)提升测试效率。文章以实际漏洞案例说明MCP安全现状,同时指出插件当前局限(如SSE支持不足)并规划了未来功能扩展。 综合评分: 85 文章分类: 渗透测试,WEB安全,安全工具,漏洞分析,红队
当模型协议成为攻击入口:一款给你的Burp套件装上MCP利刃的插件
幻泉之洲
2026年4月29日 09:46 北京
在小说阅读器读本章
去阅读
Model Context Protocol (MCP)服务器正在快速成为新的攻击面,但主流安全测试工具却缺乏支持。Fenrisk安全团队为此开发了Burp Suite插件MCPwned,它能自动识别、枚举MCP服务器能力,并预填充渗透测试载荷,为安全审计提供了第一把趁手的工具。
一片正在疯狂扩张的安全荒野
最近几周,安全社区连续爆出几个跟MCP相关的严重漏洞。一个是Nginx UI的验证缺失,直接让攻击者能执行特权操作。另一个是在AWS的MCP服务器里发现的命令注入。更震撼的是上周Ox Security披露的那个远程代码执行漏洞,直接引发了十来个CVE。
这些新闻不是孤立的,它们共同指向一个事实:MCP服务器这个攻击面,正在以惊人的速度增长。
在Shodan上用”MCP”搜一下,结果近10万条。这10万里有些是知名大厂,有些是AI初创公司,还有些是个人搭建的。说白了,从市值万亿的巨头到自家地下室捣鼓的程序员,大家一股脑儿地把MCP服务器部署到了公网上。
为什么问题这么多?一个新生态在“快跑猛冲”阶段的通病。很多MCP服务器的部署根本顾不上基本的安全原则,什么凭证保护、供应链安全、最小权限原则,统统抛在脑后。
开发者常有一个误区:觉得MCP是给AI调用的接口,不是给人直接访问的(虽然技术上完全可以),所以暴露风险低。这种想法很危险,它会直接导致输入校验不严,或者根本不做鉴权。
这块安全荒地,太缺趁手的开荒工具了。
这就是我们为什么要开发MCPwned。
MCP到底是什么?
简单说,MCP是让AI客户端(Agent)从服务器获取能力的协议。这些“能力”可以是工具、资源,或者一些上下文提示。
举个例子,一个设计软件可以通过MCP暴露一些接口,让你的本地AI助手能直接在这个软件里帮你修改文件。
关键在于它的灵活性。只要一个服务用MCP协议暴露了能力,它就能成为MCP服务器。传输方式有两种:同一个机器上用本地STDIO,远程服务器就用HTTP流。
它底层用JSON-RPC传递消息,有会话ID和递增的消息ID。最开始时,协议本身没有内置任何授权机制,当然,后来可以加上。但这种默认状态,加上“不是给人用”的错觉,就埋下了不少隐患。
看个例子,下面这段代码用FastMCP库启动了一个MCP服务器:
from fastmcp import FastMCP import subprocess
mcp = FastMCP(“Minas Tirith Battle Supplies”)
@mcp.tool() def light_beacon(beacon_name: str) -> str: try: output = subprocess.check_output(f”ping -c 1 {beacon_name}”, shell=True, text=True) except Exception as e: raise Exception(f”Beacon tower ‘{beacon_name}’ is unreachable. The signal cannot be lit.”) return f”The beacon of {beacon_name} is lit! Gondor calls for aid.\n\n{output}”
mcp.run(transport=”streamable-http”, host=”0.0.0.0″, port=8000)
这个叫“米那斯提力斯战备物资”的服务器只提供了一个工具:light_beacon。它用subprocess去ping一个信标名,然后返回结果。
注意看,shell=True。这个工具是故意留了命令注入漏洞的,我们稍后就在Repeater里利用它。
如果一个客户端想调用这个工具,它会发一个类似下面的请求:
POST /mcp HTTP/1.1 … Content-Type: application/json Accept: text/event-stream, application/json Mcp-Session-Id: 4ee9dfeccb8148fbb0f4d6fabb220600
{ “jsonrpc”: “2.0”, “id”: 1, “method”: “tools/call”, “params”: { “name”: “light_beacon”, “arguments”: { “beacon_name”: “…” } } }
服务器会以SSE(Server-Sent Events)流返回结果。这就是MCP交互的基本样子。
MCPwned:给Burp的渗透测试工具箱
目前的Burp Suite BApp商店里,还没有一个能够清晰、高效地列出MCP服务器所有能力并进行测试的扩展。我们渗透测试时遇到的MCP服务器越来越多,必须得有个专门的工具了。
MCPwned是我们给出的第一个答案。
它的工作流程是这样的:
第一步:被动识别。插件在后台监控经过Burp的请求,只要看起来像是MCP流量,就用灰色高亮标记出来。
第二步:主动探测。你可以把标记的请求发送到扩展标签页(Ctrl + M 和 Ctrl + Shift + M 快捷键也可以用)。然后,插件会主动连接目标服务器,收集所有信息,包括协议版本、支持的能力列表,并且获取一个可供后续使用的有效会话ID。
第三步:能力枚举与审计。插件把所有发现的能力清晰地展示出来。你可以查看每个工具的详细信息(参数、类型、描述),方便后续测试。它还支持添加笔记、颜色标签,甚至可以导出为Markdown格式,直接用在报告里。
第四步:轻松利用。这是最省事的一步。当你选中一个工具,并把它发送到Repeater标签页时,插件已经帮你把请求模板预填充好了。审计人员只需要替换掉payload占位符就行,比如把上面例子中的 beacon_name参数值从“TODO”换成 x; cat /etc/passwd。
瞧,那个看似无害的烽火台工具,就这么被我们利用来读系统密码了。插件还能帮你自动解析服务器返回的、有时会非常臃肿的MCP响应消息,让你看得更清楚。
当前局限与未来构想
MCPwned目前还只是个第一步,有不少限制。
最大的技术挑战来自Burp Suite本身对SSE的原生支持不足。我们尝试用Burp的API发送探测请求时,如果服务器返回SSE流,会直接抛异常。所以,目前部分探测请求是通过官方的MCP Java SDK来完成的,这就导致这部分请求不会经过Burp的Logger。
另外,第一版也不支持基于WebSocket的MCP传输方式,虽然这种只占不到10%,但也不能忽视。
我们计划在未来版本解决这些问题,并增加更多功能:
- 让探测请求完全走Burp原生通道,并支持WebSocket。
- 实现按实现库扫描。自动识别服务器用的是fastMCP、Python SDK、Spring Java MCP还是RMCP,并关联已知漏洞库。
- 集成Burp Suite的主动扫描器,让它能自动发现MCP端点。
- 支持MCP协议的新特性,比如Tasks。
我们已经把插件提交到了Burp Suite BApp商店。在此之前,你可以手动安装,从我们GitHub仓库的发布页面下载.jar文件就行:MCPwned v1.0.0 (https://github.com/FenriskSecurity/MCPwned/releases/download/v1.0.0/MCPwned.jar)
如果你发现了bug,或者有功能建议,甚至想贡献代码,都欢迎来GitHub上提issue或者PR。
MCP服务器的浪潮已经来了,安全测试不能再用原始的方式刀耕火种。MCPwned是我们扔出的一把开山斧,路还长,我们边走边打磨。
参考资料
[1] https://fenrisk.com/mcpwned-burp-suite-extension-mcp-servers
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:幻泉之洲 《当模型协议成为攻击入口:一款给你的Burp套件装上MCP利刃的插件》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论