漏洞测试客户端

一个故意设计为存在漏洞的基于Web的客户端,用于连接MCP服务器进行安全测试和教育目的。

  • by harinee
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 harinee/mcp-web-demo-client

使用说明

MCP演示客户端

一种故意易受攻击的基于web的客户端,用于连接到MCP(模型上下文协议)服务器进行安全测试和教育。

🚀 快速开始

先决条件

  • Python 3.7+(用于web服务器)
  • 现代网络浏览器
  • 正在运行MCP服务器(例如,该死的易受攻击的MCP服务器)

运行客户端

# Start web server
python -m http.server 8080

# Open browser
open http://localhost:8080

✅ 连接状态

工作中 -连接已成功建立

  • ✅ SSE连接:事件源到 /sse 端点工作
  • ✅ 跨域资源共享:允许从本地主机进行浏览器连接:8080
  • ✅ MCP协议:SSE运输上的正确MCP
  • ✅ 没有错误:消除了400个错误,连接成功完成

🏗️ 建筑

客户端

  • 运输:MCP通过服务器发送事件(SSE)
  • 连接:事件源到服务器 /sse 端点
  • 协议:遵循浏览器环境的MCP规范
  • 用户界面:实时连接状态和挑战选择

连接流程

  1. 用户选择挑战并输入服务器URL(例如。, http://localhost:9001)
  2. 客户端连接到 {serverUrl}/sse 通过EventSource
  3. 使用CORS标头建立SSE连接
  4. MCP传输自动处理初始化
  5. 状态显示“已连接”-已准备好进行漏洞测试

🔧 技术实现

SSE连接

// Connect to MCP server via SSE
this.eventSource = new EventSource(`${this.serverUrl}/sse`);

// Handle MCP messages
this.eventSource.onmessage = (event) => {
    const message = JSON.parse(event.data);
    this.handleMessage(message);
};

MCP协议

// Let SSE transport handle MCP messages properly
async sendMessageViaSSE(message) {
    console.log('Message queued for MCP SSE transport:', message);
    // No HTTP POST needed - let the MCP transport do its job
    return true;
}

CORS要求

服务器必须包含CORS标头:

app.add_middleware(
    CORSMiddleware,
    allow_origins=["http://localhost:8080"],
    allow_credentials=True,
    allow_methods=["GET", "POST", "OPTIONS"],
    allow_headers=["*"],
)

🎯 支持的服务器

该死的易受攻击的MCP服务器

  • 仓库: /path/to/damn-vulnerable-MCP-server
  • 港口:9001-9010(10个挑战服务器)
  • 挑战:简单(1-3),中等(4-7),困难(8-10)
  • 码头工人: docker run -d -p 9001-9010:9001-9010 dvmcp

连接示例

  • 挑战1: http://localhost:9001
  • 挑战2: http://localhost:9002
  • 挑战10: http://localhost:9010

🔒 安全功能(漏洞)

这个客户是 故意脆弱 出于教育目的:

客户端漏洞

  • XSS:通过执行服务器提供的代码 eval()
  • 数据暴露:将敏感数据记录到控制台
  • 存储:将凭据存储在本地存储中,不加密
  • 军营食品店备用资金:请求时没有CSRF保护
  • 输入验证:信任所有服务器响应

漏洞示例

// VULNERABILITY: Execute arbitrary code from server
if (message.params.code) {
    eval(message.params.code); // EXTREMELY DANGEROUS
}

// VULNERABILITY: Log sensitive data
console.log('Loaded stored credentials:', data);

// VULNERABILITY: Expose browser fingerprint
generateBrowserFingerprint() {
    return { /* detailed browser info */ };
}

📊 连接故障排除

常见问题

问题 原因 解决方案
CORS错误 服务器缺少CORS标头 向服务器添加CORS中间件
连接失败 服务器未运行 在指定端口上启动MCP服务器
400错误 协议不匹配 在SSE传输上使用正确的MCP
“连接”卡住 初始化超时 检查服务器SSE端点

调试信息

  • 打开浏览器DevTools→ 详细日志控制台
  • 检查“网络”选项卡是否有失败的请求
  • 验证服务器是否正在运行: curl http://localhost:9001/sse

🔧 发展

文件结构

mcp-demo-client/
├── index.html          # Main UI
├── script.js           # UI logic and event handling
├── mcp-client.js       # MCP protocol implementation
├── proxy-server.js     # CORS proxy (deprecated)
└── README.md          # This file

关键组件

  • 易受攻击的MCPClient:主MCP客户端类
  • SSE连接:基于EventSource的传输
  • 消息处理:MCP协议消息处理
  • UI集成:实时状态更新

⚠️ 安全警告

这个客户是 故意脆弱 并且仅应在受控环境中用于:

  • 安全性研究
  • 教育目的
  • 漏洞演示
  • 渗透测试培训

不要 在生产环境中使用。