WorkBuddy + IDA MCP + Kali MCP 组合拳分析 PWN 题
本文最后更新于 2026年7月2日 晚上
WorkBuddy + IDA MCP + Kali MCP 组合拳分析 PWN 题
[TOC]
背景
最近遇到一道 CTF PWN 题,需要分析一个二进制文件 pwn(ELF x86-64)。传统的做法是用 IDA 在 Windows 上静态分析,写脚本爆 seed,然后传到 Kali 上验证和打远程。文件来回传、两边环境不一致导致 rand() 结果对不上等问题非常折磨。
这次尝试了 WorkBuddy + IDA MCP + Kali MCP 的组合工作流,全程在一个聊天窗口内完成,体验丝滑。
Step 1: IDA MCP 配置
IDA MCP (ida-pro-mcp) 是一个开源项目,让 AI 可以直接与 IDA Pro 交互——查询函数、反编译、搜索交叉引用等,无需手动操作 IDA。
安装:
1 | |
注册插件:
装好后插件自动注册到 C:\Users\<user>\AppData\Roaming\Hex-Rays\IDA Pro\plugins\ida_mcp.py。打开 IDA,Plugins > IDA MCP(小锤子图标),点”启动分析”,IDA 就在 http://127.0.0.1:13337/mcp 上提供 MCP 服务了。
WorkBuddy 配置(HTTP 模式):
1 | |
Step 2: 题目分析
IDA MCP 连接后,直接用 survey_binary 获取全局概览,然后用 decompile 反编译关键函数。
main 函数逻辑
1 | |
需要 5 轮输入 seed,前 4 轮生成指定前缀,最后一轮让 amaz == "/bin/sh" 即可 getshell。
R1-R4: LLucky 函数
1 | |
从 30 字符表中按 rand() % 30 取字符,共 7 个。
R5: LLucky1 函数
1 | |
v2 的原始指令字节为 48 B8 6E 69 73 62 2F 68 30 00,小端序内存为:
1 | |
即 MAGIC = "nisb/h0"。
/bin/sh 对应的索引为 [4, 3, 1, 0, 4, 2, 5]。
Step 3: 踩坑记录
第一次写爆破脚本时自定义实现了 glibc 的 rand()(TYPE_3 LFSR),但 warmup 阶段多做了 mod R 导致状态值始终为正,而实际 glibc 的 warmup 是纯 int32_t 加法溢出。
第二次写 C 版直接用系统 srand()/rand(),在 Windows 上写好后传给 Kali 编译。但跑出来的 seed 在 ./pwn 上验证不通过。
根本原因:MAGIC 字符串读错了。
IDA 反编译显示 v2 = 0x30682F6273696E4CLL;,但通过 xxd 检查实际指令字节为 48 B8 6E 69 73 62 2F 68 30 00。IDA 反编译多了一个 0x4C ('L') 字节,导致我误以为 MAGIC 是 "Lnis/bh0" 或 "nis/bh0",实际是 "nisb/h0"(s 在 b 前面)。
1 | |
Step 4: Kali MCP 配置
由于 ./pwn 运行在 Kali 虚拟机上,之前需要把脚本传到 Kali 再编译运行,效率很低。于是配置了 Kali MCP,让 WorkBuddy 可以直接在 Kali 上执行命令。
Kali 服务端:
1 | |
WorkBuddy 配置:
1 | |
配置完成后,WorkBuddy 可以直接通过 execute_command 工具在 Kali 上编译、运行、验证,一步到位。
Step 5: 最终 seed
通过在 Kali 上直接用系统 srand()/rand() + 正确的 MAGIC 和索引搜索,得到最终 seed:
| 轮次 | Seed | 生成的 amaz | 状态 |
|---|---|---|---|
| R1 | 1240 | M!hN9MF |
✅ |
| R2 | 11110 | !K9M&DA |
✅ |
| R3 | 930359 | MN4LGnJ |
✅ |
| R4 | 42726653 | n!$bGG% |
✅ |
| R5 | 332394 | /bin/sh |
✅ |
Exploit 命令:
1 | |
进入 shell 后 cat flag 拿 flag。
总结
这次经验有几个收获:
- IDA MCP 极大提高了逆向效率——直接在对话中反编译、查函数,不用在 IDA GUI 里手动翻找
- 不要完全信任反编译器的输出——IDA 反编译显示的值和实际指令字节有差异,最终用
xxd确认了真相 - Kali MCP 解决了跨平台问题——不用来回传文件、对齐环境,WorkBuddy 直接远程操作 Kali
- MAGIC 字符串的
s和b顺序非常容易看错——在6E 69 73 62 2F 68 30 00这串字节中,62是b,73是s,顺序是...s b / h 0...而不是.../ b h 0...
WorkBuddy + IDA MCP + Kali MCP 的组合拳让整个分析、爆破、验证流程完全在聊天窗口内完成,从 IDA 分析到 getshell 全程无中断,非常爽。