返回市场
mcp-易受攻击服务器示例

mcp-易受攻击服务器示例

作者:kenhuangus4 星标更新:2025-04-22

项目介绍

不安全的MCP演示

概述

此项目展示了存在漏洞的MCP服务器和多个客户端,包括一个概念验证攻击客户端和一个正常客户端。它旨在用于教育目的,以展示MCP服务器中可能存在的安全漏洞。

项目结构

  • 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密钥)。

如何运行

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查询
  • 尝试读取几个常见的环境变量

示例输出

  • 攻击客户端将显示哪些负载成功或失败,并打印出可访问的数据库内容和环境变量值。

展示的漏洞

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

缓解策略

为了确保实际MCP服务器的安全,您应该:

  1. 使用参数化查询:
    • 始终使用参数替换而不是字符串插值来防止注入。
    • 示例(安全):
      cursor.execute("INSERT INTO records (name, address) VALUES (?, ?)", (name, address))
      
  2. 限制危险工具:
    • 移除或严格限制如 execute_sqlget_env_variable 等工具。
    • 仅暴露必要的功能。
  3. 实施身份验证和授权:
    • 要求用户进行身份验证并在允许访问敏感工具或数据之前检查权限。
  4. 验证和清理输入:
    • 检查并清理所有用户输入,特别是与数据库或系统交互的输入。
  5. 限制环境变量访问:
    • 仅允许访问非敏感变量,或完全移除此工具。
  6. 审计和监控使用情况:
    • 记录所有工具调用并监控可疑或滥用行为。
  7. 最小权限原则:
    • 以最小权限运行服务器,并尽可能限制数据库和操作系统访问。

免责声明

此项目仅用于教育和演示目的。请勿在生产环境中部署此代码。


如有问题或改进建议,请提交问题或联系项目维护者。