NEO-GDB-MCP
简介
这是一个将GDB连接到MCP的小项目。它对于CTF Pwn环境特别有用。通过启用的传统远程调试功能 gdbserver 仅将程序的执行信息发送到本地gdb。当本地gdb环境为Windows时,gdb无法加载 pwndbg 插件,意味着关键的CTF命令,如 heap 和 bins 不可用。
通过此项目,建立了第二个远程调试通道,作为 gdbserver.
它有两个部分:
gdb_plugin.py
- 加载到GDB中
- 添加
start-mcp-serverGDB命令 - 在GDB中执行命令,并为客户端公开TCP端口
client.py(MCP标准客户端)
- 在Windows主机上运行(由VS Code通过MCP启动)
- 露出工具
run_gdb_command - 通过网络直接向远程GDB插件发送命令
简言之: 它允许代理直接从Windows主机控制远程Linux GDB.
安装
运行这个 两者 您的Windows主机和Linux VM/WSL:
cd neo-gdb-mcp
pip install -e .用法
1.加载插件并在GDB中开始调试
在Linux环境中:
source /path/to/neo-gdb-mcp/gdb_mcp/gdb_plugin.py
start-mcp-server*(默认情况下,它监听0.0.0.0:10000。您还可以使用自定义端口/主机 start-mcp-server 9876 127.0.0.1)*
2.在VS Code(Windows)中配置MCP
配置VS代码以使用 client.py。更新您的 .vscode/mcp.json 或全局MCP设置。替换 YOUR_LINUX_IP 使用您的VM或WSL的IP地址(例如。, 192.168.1.x 对于虚拟机,或 127.0.0.1 WSL):
{
"servers": {
"neo-gdb-mcp": {
"command": "python",
"args": [
"-m",
"gdb_mcp.client",
"--host",
"YOUR_LINUX_IP", // or "localhost"
"--port",
"10200"
]
}
}
}3.开始使用它
连接就绪后,代理可以呼叫 run_gdb_command.
4.GDB中可用的命令
start-mcp-server [port] [host]:启动服务stop-mcp-server:停止服务mcp-status:显示状态
5.代理商提示
- 使用ida pro mcp彻底读取程序中的每个函数并识别漏洞。
- 根据发现的漏洞,编写exp.py。
- 使用tmux和gdb-mcp对exp.py进行动态调试。您可以参考下面的模板来启动调试代码。(调试时,请尝试使用pwndbg命令。)在每个调试会话中,在进行任何代码更改之前,必须停止调试器。
from pwn import *
context.binary = "./pwn"
context.terminal = ["tmux", "splitw", "-h"]
GDBSCRIPT = """
source /abs/path/to/neo-gdb-mcp/gdb_mcp/gdb_plugin.py
start-mcp-server
"""
def start():
# return process(context.binary.path)
return gdb.debug(context.binary.path, gdbscript=GDBSCRIPT)
p = start()
p.interactive()笔记:
- tmux是可选的:如果不使用tmux,请删除
context.terminal = ...pwntools将在当前终端中启动GDB。 - 自定义端口:如果您更改了GDB插件端口(例如。
start-mcp-server 9876),在MCP客户端参数中传递它(--port 9876). - 避免端口冲突:关闭GDB或停止调试后,套接字将被清理。检查是否有剩余
gdb如果端口保持锁定,则进行处理。
7.AI代理的常用Pwndbg命令
由于此MCP允许AI代理完全访问 pwndbg 在Linux内部运行时,您可以利用这些pwndbg特定的命令来有效地分析程序状态、查找漏洞和巧妙利用漏洞:
- 上下文和二进制信息
- context:打印出当前CPU寄存器、反汇编、堆栈和回溯。 - checksec:检查加载的二进制文件(PIE、RELRO、NX、Canary)的安全功能。 - vmmap:打印出虚拟内存映射,显示所有段的权限和路径。
- 堆栈和内存检查
- telescope [address] (或 tele):一个智能十六进制转储,递归地解引用指向字符串、代码或其他指针的指针。强烈推荐生食 x/gx 用于测量记忆。 - retaddr:查找本机存储在堆栈上的返回地址。 - canary:显示当前堆栈金丝雀值。 - search :在内存中搜索特定值或字符串。
- GOT&PLT决议
- got:显示全局偏移表。使用此功能检查加载的libc地址并验证GOT覆盖。 - plt:查看程序链接表。
- 堆分析(堆利用的关键)
- heap:打印当前堆竞技场中所有分配的块。 - bins, fastbins, tcachebins, unsortedbin:查看特定空闲块列表的状态,以识别泄漏或中毒块状态。 - arena:显示 malloc_state 变量和结构。 - vis_heap_chunks (或 vis):按上下文可视化堆块。 - find_fake_fast:识别适合快速箱损坏的重叠或错位区域。
- 利用开发助手
- rop:转储内存中加载的ROP小工具。 - distance :计算两个地址之间的精确字节距离。
备注
- GDB必须支持Python
- 需要Python 3.10+
- 适用于普通GDB以及pwndbg/GEF命令
