Mcp Vulnerable Server Demo

Mcp Vulnerable Server Demo

🚀 不安全的MCP演示项目

本项目展示了一个易受攻击的MCP服务器及多个客户端,包含概念验证攻击客户端和正常客户端。其主要用于教育,旨在揭示MCP服务器潜在的安全漏洞。

🚀 快速开始

1. 安装依赖项

pip install -r requirements.txt

2. 启动服务器和标准客户端

在一个终端中:

python good-mcp-client.py vuln-mcp.py

根据提示插入/查询记录进行交互式操作。

3. 运行攻击客户端

在另一个终端中:

python attack-mcp-client.py vuln-mcp.py

这将自动执行以下操作:

  • 尝试SQL注入攻击
  • 执行任意的SQL查询
  • 尝试读取几个常见的环境变量

✨ 主要特性

项目结构

  • vuln-mcp.py:易受攻击的MCP服务器,暴露了不安全的工具。
  • good-mcp-client.py:正常交互的标准客户端(插入/查询记录)。
  • attack-mcp-client.py:自动化攻击客户端,演示对服务器漏洞的利用。
  • requirements.txt:项目所需的Python依赖项。

暴露的服务器工具

  1. insert_record
    • 插入用户提供的姓名和地址记录到数据库中。
    • 漏洞:直接将用户输入插值到SQL查询中,容易遭受SQL注入攻击。
  2. query_records
    • 列出数据库中的所有记录。
    • 漏洞:未经过身份验证或访问控制,暴露了所有数据。
  3. execute_sql
    • 执行客户端提供的任意SQL查询。
    • 漏洞:允许执行任何SQL命令,包括破坏性的操作(如数据窃取、修改表结构)。
  4. get_env_variable
    • 返回用户请求的任何环境变量的值。
    • 漏洞:泄露敏感的环境变量(例如密钥、API密钥)。

示例输出

攻击客户端会显示哪些payload成功或失败,并打印出数据库内容和环境变量值(如果可访问)。

演示的漏洞

  • SQL注入:用户输入未经消毒,允许攻击者操纵SQL逻辑并插入任意数据。
  • 任意代码执行execute_sql工具允许攻击者运行任何SQL命令,包括数据盗窃或破坏。
  • 敏感数据泄露get_env_variable工具允许攻击者读取机密信息和配置值。
  • 缺乏访问控制:无需身份验证即可运行所有工具并访问所有数据。

🔧 技术细节

缓解策略

为了保护实际的MCP服务器,应该:

  1. 使用参数化查询
    • 始终使用参数替换而不是字符串插值进行SQL查询,以防止注入。
    • 示例(安全):
      cursor.execute("INSERT INTO records (name, address) VALUES (?, ?)", (name, address))
      
  2. 限制危险工具
    • 移除或严格限制execute_sqlget_env_variable等工具。
    • 只暴露必要的功能。
  3. 实现身份验证与授权
    • 要求用户进行身份验证,并检查权限以在允许访问敏感工具或数据之前。
  4. 验证和清理输入
    • 检查并清理所有用户输入,特别是在与数据库或系统交互时。
  5. 限制对环境变量的访问
    • 只允许访问非机密变量,或者完全禁用此功能。
  6. 定期安全审计
    • 定期审查代码和配置,以发现潜在的安全漏洞。

📄 许可证

文档中未提及相关内容,暂不展示。

⚠️ 免责声明

该项目仅供教育用途。请勿在生产环境中部署或使用类似配置,否则可能会导致严重的安全风险。

  • 0 关注
  • 0 收藏,12 浏览
  • system 提出于 2025-09-30 07:36

相似服务问题