PWN-MCP
A CTF Pwn AI-assisted debugging platform based on MCP, enabling AI to directly interact with remote GDB and CTF services for automated heap exploitation.
README
PWN-MCP
面向 CTF Pwn 题的 AI 辅助调试平台。基于 MCP(Model Context Protocol)协议,让 AI 模型直接操作远程靶机上的 GDB、与 CTF 服务交互、分析堆状态,实现自动化堆利用。
架构
AI (MCP Client) ──stdio──▶ PWN-MCP Server ──SSH──▶ 远程靶机
│ ├─ GDB + heap_logger.py
│ ├─ CTF binary (socat)
│ └─ /tmp/heap_*.json
└── 本地 IDA headless
安装
pip install -e .
依赖:mcp、paramiko
运行
# 以下三种方式均可
ctf-debugger
python -m src
python src/server.py
MCP 客户端配置
{
"mcpServers": {
"ctf-debugger": {
"command": "python",
"args": ["-m", "src"],
"cwd": "/path/to/PWN-MCP"
}
}
}
模块总览
| 模块 | 文件 | 职责 |
|---|---|---|
| MCP Server | src/server.py |
FastMCP 入口,注册全部工具组,stdio transport |
| SSH Manager | src/ssh_manager.py |
单例 SSH 连接管理(paramiko),提供 exec/upload/download |
| GDB Controller | src/gdb_controller.py |
单例 GDB 会话控制,通过 SSH PTY Channel 操控远程 GDB |
| CTF Connector | src/ctf_connector.py |
单例 CTF 服务连接,SSH direct-tcpip 端口转发,pwntools 风格接口 |
| Heap Analyzer | src/heap_analyzer.py |
解析 heap_logger 产生的 JSON(delta/snapshot),过滤与格式化 |
| GDB Plugin | remote_scripts/heap_logger.py |
上传到靶机的 GDB Python 插件,hook malloc/calloc/realloc/free |
MCP Tools
SSH 工具组(src/tools/ssh_tools.py)
| Tool | 说明 |
|---|---|
ssh_connect |
建立 SSH 连接(密钥/密码认证) |
ssh_exec |
远程执行 shell 命令 |
ssh_upload_file |
SFTP 上传文件 |
ssh_download_file |
SFTP 下载文件内容 |
ssh_disconnect |
断开 SSH 连接 |
GDB 工具组(src/tools/gdb_tools.py)
| Tool | 说明 |
|---|---|
gdb_start |
启动 GDB 会话,可加载 heap_logger.py 插件 |
gdb_run |
运行目标程序 |
gdb_continue |
继续执行(前台) |
gdb_continue_background |
continue& 后台继续,用于请求粒度采集 |
gdb_interrupt |
Ctrl-C 中断程序 |
gdb_pause |
暂停程序(优先 GDB interrupt 命令,兼容后台 continue 场景) |
gdb_restart |
kill + run 重启 |
gdb_stop |
退出 GDB 会话 |
gdb_command |
执行任意 GDB/pwndbg/gef 命令 |
gdb_memory |
内存 dump(bytes + words 双视图,支持 GDB 表达式) |
gdb_chunk |
查看 glibc malloc chunk header(prev_size/size + pwndbg malloc_chunk) |
gdb_source_window |
围绕 source chunk 查看溢出窗口内存 |
gdb_read_output |
读取 GDB 输出缓冲区(不等待 prompt) |
Heap 分析工具组(src/tools/heap_tools.py)
请求粒度追踪
| Tool | 说明 |
|---|---|
heap_begin_action |
标记堆操作阶段开始 |
heap_end_action |
结束阶段,返回增量 delta(支持 caller/地址/类型过滤) |
heap_snapshot |
获取完整堆状态快照(所有活跃 chunk) |
heap_get_state |
快速查看堆统计概览 |
heap_query_delta |
对最近一次 delta 做二次查询过滤 |
heap_query_log |
查询完整文本日志 heaplog.txt |
Bin 与 Chunk 追踪
| Tool | 说明 |
|---|---|
heap_bins_json |
导出 glibc bin 状态 JSON(fastbins/unsorted/smallbins/largebins) |
heap_find_chunk |
查找 chunk 在哪个 bin 中 |
heap_chunk_bin |
返回 chunk 所属 bin 描述 |
track_chunk |
开始追踪 chunk 生命周期(header/bin/memory diff) |
untrack_chunk |
停止追踪 chunk |
tracked_chunks_status |
查看已追踪 chunk 状态 |
请求级 Timeline
| Tool | 说明 |
|---|---|
begin_request |
开始网络请求粒度的 heap timeline |
end_request |
结束请求 timeline |
request_timeline |
读取请求级 heap timeline |
request_events |
按 label 查询请求内 heap 事件 |
高级能力
| Tool | 说明 |
|---|---|
add_probe / remove_probe / list_probes |
条件断点 + 自动采样 probe |
mem_snapshot |
保存内存快照 |
mem_diff |
比较两个内存快照(offset/old/new/u32/ascii) |
run_heap_sweep |
Payload sweep 自动化框架(批量测试配置,按停止条件终止) |
CTF 交互工具组(src/tools/ctf_tools.py)
| Tool | 说明 |
|---|---|
ctf_connect |
通过 SSH 端口转发连接 CTF 服务(自动接收 banner) |
ctf_send |
发送数据(支持 hex 模式发送原始字节) |
ctf_sendline |
发送一行文本(自动追加换行) |
ctf_recv |
接收响应数据 |
ctf_recv_until |
接收到指定 pattern |
ctf_close |
关闭 CTF 连接 |
ctf_menu_action |
组合工具:自动完成菜单式交互(选菜单 → 等 prompt → 填值) |
IDA 静态分析工具组(src/tools/ida_tools.py)
| Tool | 说明 |
|---|---|
ida_headless_scan |
调用本地 IDA headless 分析 ELF,输出 JSON 扫描结果 |
ida_find_functions |
在扫描结果中按正则/子串搜索函数 |
ida_get_pseudocode |
获取函数反编译伪代码 |
ida_get_xrefs |
获取函数交叉引用(xrefs_to / calls_from) |
项目结构
PWN-MCP/
├── pyproject.toml # 项目配置与依赖
├── README.md
├── src/
│ ├── __init__.py
│ ├── __main__.py # python -m src 入口
│ ├── server.py # MCP Server 入口,注册全部工具
│ ├── ssh_manager.py # SSH 连接管理器(单例)
│ ├── gdb_controller.py # GDB 会话控制器(单例,PTY Channel)
│ ├── ctf_connector.py # CTF 服务连接器(单例,端口转发)
│ ├── heap_analyzer.py # 堆日志 JSON 解析与格式化
│ └── tools/
│ ├── __init__.py
│ ├── ssh_tools.py # SSH 工具组(5 tools)
│ ├── gdb_tools.py # GDB 工具组(13 tools)
│ ├── heap_tools.py # Heap 工具组(20 tools)
│ ├── ctf_tools.py # CTF 工具组(7 tools)
│ └── ida_tools.py # IDA 工具组(4 tools)
├── remote_scripts/
│ └── heap_logger.py # GDB Python 插件(上传到靶机)
├── scripts/
│ └── verify_mcp_heap_debug.py
├── skills/
│ └── ctf-heap-spray.md # AI Skill:堆喷射自动化工作流
└── docs/
└── mcp_heap_debug_capabilities.md
典型工作流
ssh_connect → ssh_upload_file(heap_logger.py)
→ gdb_start(binary, plugin) → gdb_command("set disable-randomization on") → gdb_run
→ ctf_connect(127.0.0.1, port)
→ 迭代循环:
heap_begin_action("spray")
→ gdb_continue → ctf_menu_action("1", [...]) → gdb_interrupt
→ heap_end_action() # 分析 delta
→ heap_snapshot() # 关键步骤验证布局
→ 发送 exploit payload
GDB 插件(heap_logger.py)
上传到靶机后通过 gdb -x heap_logger.py 加载。特性:
- x86_64 / i386 ABI 感知的参数与返回值提取
- Hook malloc / calloc / realloc / free(raw + pending libc 断点)
- user pointer → chunk header 转换,chunk size 字段读取
- caller 解析到主程序调用点
- action-scoped delta JSON(
/tmp/heap_delta.json)和全量 snapshot JSON(/tmp/heap_snapshot.json) - 自定义 GDB 命令:
heap-begin、heap-end、heap-snapshot、heap-status、heap-bins-json、heap-find-chunk、track-chunk、add-probe-json等
技术栈
- MCP SDK — MCP 协议支持(FastMCP + stdio transport)
- Paramiko — SSH2 协议(连接、SFTP、PTY Channel、端口转发)
- asyncio — 异步运行时,通过
asyncio.to_thread桥接同步调用 - IDA Pro — headless 模式静态分析(可选)
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。