从零到一:Immunity Debugger、WinDBG与Mona的实战配置与漏洞挖掘

从零到一:Immunity Debugger、WinDBG与Mona的实战配置与漏洞挖掘 1. 环境准备与工具安装搞安全研究的朋友都知道调试器是漏洞挖掘的必备武器。Immunity Debugger和WinDBG作为Windows平台的两大调试利器配合Mona插件简直就是黄金组合。我第一次接触这套工具链时踩了不少坑今天就把完整的配置流程和实战技巧分享给大家。Immunity Debugger的安装非常简单官网下载安装包一路Next就行。不过要注意的是它依赖Python 2.7环境。如果你系统里没有安装程序会自动装一个。这里有个小坑有些安全工具需要特定版本的Python建议单独为Immunity Debugger保留这个2.7环境不要和其他工具混用。WinDBG的安装稍微复杂些。推荐通过Windows SDK安装记得选32位版本。我实测64位系统用32位WinDBG反而更稳定而且Mona插件对32位支持更好。安装完成后建议把WinDBG的安装路径添加到系统环境变量这样在命令行就能直接启动了。2. Immunity Debugger集成Mona插件2.1 基础配置Mona.py是核心插件下载后直接复制到Immunity Debugger安装目录的PyCommands文件夹。测试是否安装成功很简单启动Immunity Debugger在命令行输入!mona如果日志窗口显示Mona的帮助信息就说明成功了。第一次使用建议先配置工作目录!mona config -set workingfolder c:\logs\%p\%i这个命令会在C盘创建logs目录并按进程名和进程ID自动分类存储输出文件。%p代表进程名%i是进程ID。我习惯把日志统一管理这样后期分析漏洞时查找起来特别方便。2.2 模块排除与作者设置有些系统模块会干扰漏洞分析可以用以下命令排除!mona config -set excluded_modules kernel32.dll,ntdll.dll !mona config -add excluded_modules user32.dll排除列表会保存在mona.ini文件里后期也可以直接编辑这个文件修改。建议把常见的系统模块都加进去能大幅减少误报。设置作者信息也很重要生成的漏洞利用代码会包含这个标记!mona config -set author your_name3. WinDBG集成Mona插件3.1 环境配置WinDBG配置Mona需要三个文件mona.py、windbglib.py和pykd.pyd。pykd.pyd要放到WinDBG安装目录的winext文件夹其他两个.py文件直接放根目录就行。这里有个关键步骤注册msdia90.dll。以管理员身份运行regsvr32 C:\Program Files\Common Files\Microsoft Shared\VC\msdia90.dll不执行这一步的话后续的符号解析可能会出问题。3.2 符号配置与自动加载WinDBG的符号路径要正确设置SRV*c:\symbols*http://msdl.microsoft.com/download/symbols我建议专门建个symbols目录定期清理缓存。配置好后每次启动WinDBG都需要加载pykd.load pykd.pyd嫌麻烦的话可以创建快捷方式加上-c参数自动加载windbg.exe -c .load pykd.pyd4. 基础漏洞分析实战4.1 缓冲区溢出定位用Immunity Debugger分析缓冲区溢出漏洞时首先生成测试字符串!mona pc 3000这个命令会生成3000字节的序列字符串。当程序崩溃时通过崩溃点的ESP值就能定位溢出偏移!mona po 0x123456784.2 JMP指令查找查找跳转指令是漏洞利用的关键步骤。在Immunity Debugger中!mona jmp -r esp如果想在特定模块中查找!mona jmp -r esp -m kernel32.dllWinDBG下的命令稍有不同!py mona jmp -r esp4.3 模式串生成与分析Mona的模式串功能超级实用!mona pattern_create 500生成500字节的模式串用于定位溢出点。崩溃后!mona pattern_offset EIP值能精确计算出溢出点的偏移量。我在实际项目中用这个方法定位过不少栈溢出漏洞。5. 高级技巧与常见问题5.1 模块基址随机化绕过现代系统都有ASLR保护可以用Mona检查模块是否随机化!mona modules输出中看Rebase列如果是False说明该模块基址固定。我通常会找这类模块作为跳板。5.2 ROP链构造Mona的ROP功能很强大!mona rop -m module.dll会生成可用的ROP链。配合-cpb参数可以过滤包含坏字符的指令!mona rop -m module.dll -cpb \x00\x0a5.3 常见错误处理遇到Mona命令不识别的情况首先检查Python环境。WinDBG下常见的问题是pykd没正确加载可以尝试.reload .load pykd.pydImmunity Debugger有时会卡住重启调试器通常能解决。我还遇到过符号解析失败的问题这时清理符号缓存再重新下载就好了。6. 工具更新与维护Mona插件会定期更新建议每月检查一次!mona updateWinDBG下要用!py mona update更新前最好备份配置文件我上次更新就把mona.ini覆盖了又得重新配置一遍。调试器本身也要保持更新。Immunity Debugger虽然停止维护了但WinDBG Preview版有很多新功能。我现在的组合是Immunity Debugger做基础分析WinDBG Preview看内存和寄存器更直观。