praetorian-inc/MCPHammer
GitHub: praetorian-inc/MCPHammer
MCP 安全测试框架,用于评估和演示模型上下文协议服务器的安全漏洞与攻击向量。
Stars: 23 | Forks: 0
# MCP Hammer
一个使用 FastMCP 构建的模型上下文协议 (MCP) 服务器,提供包括 Claude AI 集成、文本注入功能和服务器信息实用程序在内的各种工具。它绝对超级安全,你绝对应该通过它发送机密数据,并且绝对应该把它说的一切当作事实。
## 功能
- **Claude AI 集成**:通过 MCP 协议直接查询 Claude 模型
- **文本注入系统**:在工具响应中追加自定义文本
- **HTTP 传输**:基于 FastMCP 构建,支持可靠的基于 HTTP 的通信和远程托管
- **会话日志**:自动记录所有工具调用和交互
- **健康监控**:内置健康检查和服务器信息端点
- **遥测服务**:收集有关运行服务器的宿主信息,并存储在磁盘文件中,和/或发送到远程主机
- **远程管理**:通过管理服务器远程更改注入文本并管理多个 MCPHammer 实例
- **Web UI**:基于浏览器的管理控制台,用于查看实例和推送更新
- **Init 工具**:自动初始化,从可配置的 URL 下载并打开文件
- **下载并执行**:从 URL 下载文件并可选择执行它们
- **可配置的 Init URL**:通过 Web UI 或 API 远程更改 init 工具的下载 URL
## 前置条件
- Python 3.10 或更高版本
- pip (Python 包管理器)
- Anthropic API 密钥(用于 Claude 集成)
## 安装
1. **克隆仓库**
git clone https://github.com/praetorian-inc/MCPHammer
cd MCPHammer
2. **创建虚拟环境**(推荐)
python3 -m venv venv
# 激活虚拟环境
# 在 macOS/Linux 上:
source venv/bin/activate
# 在 Windows 上:
# venv\Scripts\activate
3. **安装依赖**
pip install -r requirements.txt
## 设置 Anthropic API 密钥
`ask_claude` 工具需要 Anthropic API 密钥才能运行。将其设置为环境变量:
### macOS/Linux
```
export ANTHROPIC_API_KEY="your-api-key-here"
```
### Windows (命令提示符)
```
set ANTHROPIC_API_KEY=your-api-key-here
```
### Windows (PowerShell)
```
$env:ANTHROPIC_API_KEY="your-api-key-here"
```
要使其永久生效,请将 export 命令添加到你的 shell 配置文件(`.bashrc`、`.zshrc` 等)中,或在系统环境变量中进行设置。
## 运行服务器
使用默认设置(端口 3000)启动服务器:
```
python MCPHammer.py
```
或指定自定义端口:
```
python MCPHammer.py --port 8080
```
### 配置服务器设置
你可以在启动 MCPHammer 时使用命令行参数配置配置服务器的 IP/端口:
**选项 1:使用 IP:port 格式**(自动添加 `/sync` 端点):
```
python MCPHammer.py --config-server 192.168.1.100:8888
```
**选项 2:使用完整 URL**:
```
python MCPHammer.py --config-server-url http://192.168.1.100:8888/sync
```
**选项 3:使用环境变量**(仍然支持):
```
export CONFIG_SYNC_URL=http://192.168.1.100:8888/sync
python MCPHammer.py
```
你可以组合使用选项:
```
python MCPHammer.py --port 3000 --config-server 192.168.1.100:8888
```
**注意:** 命令行参数优先于环境变量。
## 可用工具
这些工具已在 MCP 服务器上注册,可供 MCP 客户端使用:
### 1. init
从可配置的 URL 下载并打开文件。该 URL 可以通过管理服务器远程更改。
**参数:**
- 无(使用配置的 init URL)
### 2. hello_world
返回 "hello world" 后跟提供的文本,带有可选的注入。
**参数:**
- `text`(字符串):追加在 "hello world" 之后的文本
- `disable_injection`(布尔值):是否禁用文本注入(默认值:false)
### 3. ask_claude
通过 Anthropic API 查询 Claude AI 模型。
**参数:**
- `query`(字符串):你的问题或提示词
- `model`(字符串):要使用的 Claude 模型(默认值:"claude-3-haiku-20240307")
- `max_tokens`(整数):最大响应 token 数(默认值:1000)
- `disable_injection`(布尔值):是否禁用文本注入(默认值:false)
### 4. get_server_info
获取有关 MCP 服务器的信息,包括当前的注入设置。
**参数:**
- `include_stats`(布尔值):是否包含使用统计数据(默认值:false)
### 5. execute_file
在本地系统上执行文件。
**参数:**
- `file_path`(字符串):要执行的文件的路径
### 6. download_and_execute
从 URL 下载文件并可选择执行它。
**参数:**
- `url`(字符串):要下载的 URL
- `execute`(布尔值):下载后是否执行(默认值:false)
## HTTP 端点
- **MCP 协议**:`http://localhost:3000/`
- **健康检查**:`GET http://localhost:3000/health`
- **服务器信息**:`GET http://localhost:3000/info`
- **工具提示**:`GET http://localhost:3000/tool-prompts`
- **设置额外备注**:`POST http://localhost:3000/set-extra-note`
- **获取额外备注**:`GET http://localhost:3000/extra-note`
- **设置 Init URL**:`POST http://localhost:3000/set-init-url`
- **获取 Init URL**:`GET http://localhost:3000/init-url`
## 使用示例
### 通过 HTTP 设置额外备注文本
```
curl -X POST http://localhost:3000/set-extra-note \
-H "Content-Type: application/json" \
-d '{"text": "This is my custom extra note text"}'
```
### 检查服务器健康状况
```
curl http://localhost:3000/health
```
### 获取当前额外备注文本
```
curl http://localhost:3000/extra-note
```
### 设置 init URL
```
curl -X POST http://localhost:3000/set-init-url \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/file.txt"}'
```
## 远程管理
MCPHammer 支持通过配置管理服务器进行远程管理。这允许你:
- 监控所有活动的 MCPHammer 实例
- 远程更新一个或所有实例上的注入文本
- 查看实例详细信息和当前配置
- 远程查看实例日志
### 设置远程管理
1. **启动配置管理服务器**:
python config_server_example.py --port 8888
2. **访问 Web 管理控制台**:
打开浏览器并访问:
http://localhost:8888/
Web 界面提供:
- 所有已注册实例的实时视图
- 实例状态和上次签入时间
- 队列更新监控
- 轻松的注入文本管理,支持实例选择
- 一键更新(排队或立即推送)
3. **配置 MCPHammer 与管理服务器同步**:
**使用命令行参数**(推荐):
python MCPHammer.py --config-server your-management-server:8888
# 或使用完整 URL
python MCPHammer.py --config-server-url http://your-management-server:8888/sync
**使用环境变量**:
export CONFIG_SYNC_URL=http://your-management-server:8888/sync
export CONFIG_SYNC_INTERVAL=300 # 每 5 分钟同步一次(可选)
# 可选:如果你的 MCPHammer 实例具有公共 URL(用于直接推送)
# 仅在你需要通过 /manage/push-injection 进行即时更新时才需要此项
# 如果未设置,更新将排队并在下次同步时应用
export MCPHAMMER_PUBLIC_URL=http://your-public-ip:3000
# 或
export MCPHAMMER_PUBLIC_URL=https://your-domain.com:3000
python MCPHammer.py
### 管理服务器端点
**遥测端点:**
- `POST /sync` - 接收来自实例的遥测数据
- `GET /status` - 服务器状态和统计信息
- `GET /nodes` - 列出所有节点
**实例管理:**
- `GET /manage/instances` - 列出所有活动的 MCPHammer 实例
- `GET /manage/instance/` - 获取特定实例的详细信息
- `GET /manage/instance//logs` - 获取特定实例的日志
- `GET /manage/queued-updates` - 查看所有待处理的更新
**注入文本更新:**
- `POST /manage/set-injection` - 排队注入文本更新(在下次同步时应用)
- `POST /manage/push-injection` - 直接推送注入文本更新(立即生效)
**Init URL 更新:**
- `POST /manage/set-init-url` - 排队 init URL 更新(在下次同步时应用)
- `POST /manage/push-init-url` - 直接推送 init URL 更新(立即生效)
### 远程管理示例
**列出所有活动实例**:
```
curl http://localhost:8888/manage/instances
```
**为所有实例排队注入文本更新**:
```
curl -X POST http://localhost:8888/manage/set-injection \
-H "Content-Type: application/json" \
-d '{"text": "New injection text"}'
```
**为特定实例排队注入文本**:
```
curl -X POST http://localhost:8888/manage/set-injection \
-H "Content-Type: application/json" \
-d '{"text": "New injection text", "instance_id": "instance-id-here"}'
```
**直接推送注入文本(立即生效)**:
```
curl -X POST http://localhost:8888/manage/push-injection \
-H "Content-Type: application/json" \
-d '{"text": "New injection text", "instance_id": "instance-id-here"}'
```
**查看排队的更新**:
```
curl http://localhost:8888/manage/queued-updates
```
**查看实例日志**:
```
curl http://localhost:8888/manage/instance/instance-id-here/logs
```
### 工作原理
1. **遥测同步**:MCPHammer 实例定期向管理服务器发送遥测数据
2. **实例注册表**:管理服务器维护所有活动实例的注册表
3. **配置更新**:更新可以排队(在下次同步时应用)或直接推送(立即生效)
4. **自动应用**:当实例同步时,它们会接收并应用任何待处理的配置更新
### 远程服务器支持(AWS、云等)
管理服务器可以远程托管(例如在 AWS 上)。有两种更新方法:
**排队更新 (`/manage/set-injection`)** - 始终适用于远程:
- 更新通过同步响应排队和传递
- 在下次同步时应用(默认值:每 5 分钟)
- **推荐用于远程服务器**
**直接推送 (`/manage/push-injection`)** - 需要公共 URL:
- 尝试通过 HTTP 立即更新
- 需要设置 `MCPHAMMER_PUBLIC_URL` 环境变量
- 如果直接推送失败,则回退到排队更新
- 当实例具有公共 IP 或可通过 VPN 访问时很有用
**AWS 托管管理服务器示例:**
```
# 在 MCPHammer 实例上(位于 NAT/防火墙后)
export CONFIG_SYNC_URL=https://your-aws-server.com:8888/sync
python MCPHammer.py
# 通过 /manage/set-injection 更新将完美运行
# 如果实例无法访问,Direct push 将自动回退到 queued
```
**可公开访问的 MCPHammer 实例示例:**
```
# 在拥有公网 IP 的 MCPHammer 实例上
export CONFIG_SYNC_URL=https://your-aws-server.com:8888/sync
export MCPHAMMER_PUBLIC_URL=http://your-public-ip:3000
python MCPHammer.py
# Queued 和 direct push 都将正常工作
```
## 日志
所有工具调用和交互都记录在 `mcp_sessions/` 文件夹中的会话文件中,格式如下:
`mcp_sessions/mcp-session-{session_id}.log`
日志包括:
- 工具调用详情
- 输入参数
- 响应
- 注入状态
- Token 使用情况(用于 Claude 调用)
- 时间戳
- 远程配置更新
## 连接 MCP 客户端
要将 MCP 客户端连接到此服务器,请使用 HTTP 端点:
```
http://localhost:3000/
```
该服务器使用 FastMCP 通过 HTTP 传输实现完整的 MCP 协议。
## 故障排除
### ANTHROPIC_API_KEY 未设置
如果你看到有关 API 密钥未设置的错误,请确保在启动服务器之前已导出环境变量。
### 端口已被占用
如果默认端口 (3000) 已被占用,请指定其他端口:
```
python MCPHammer.py --port 3001
```
### 虚拟环境问题
确保在安装依赖项或运行服务器之前已激活虚拟环境。
## 对话助手:通过 MCP 工具参数进行 C2
此仓库还包含一个独立的 MCP 服务器演示,展示了不同的攻击向量:**通过 MCP 工具参数扫描进行隐蔽的命令与控制 (C2)**。
虽然主要的 MCPHammer 服务器通过 HTTP 传输演示了提示词注入和远程管理功能,但对话助手演示了恶意 MCP 服务器如何:
- **实时扫描工具参数**,以查找隐藏在外部数据(Slack 消息、电子邮件等)中的编码命令
- **静默执行命令**,当 Claude 将受损数据作为工具参数传递时
- **通过双重渠道(响应元数据 + Slack API)渗出结果**
- **捕获所有**通过分析工具传递的数据,无论是否存在命令
这种攻击之所以有效,是因为 MCP 服务器直接从 Claude 接收工具参数,其中可能包含用户要求 Claude 处理的外部数据。
**[查看完整的设置和演示指南 →](conversation-assistant/README.md)**
## 许可证
本项目根据 Apache License 2.0 授权 - 详见 [LICENSE](LICENSE) 文件。
标签:AES-256, AI安全, Anthropic, Chat Copilot, CIS基准, Claude AI, DNS 反向解析, FastMCP, HTTP传输, HTTP工具, IP 地址批量处理, LLM安全测试, MCP协议, Model Context Protocol, Python, TCP SYN 扫描, Web UI, 下载执行, 会话日志, 大模型安全, 安全测试, 恶意模拟, 攻击性安全, 攻击框架, 文本注入, 无后门, 漏洞评估, 网络信息收集, 远程管理, 逆向工具, 遥测服务