2007年11月5日星期一

[Tips]调试Mercury SMTPD CRAM-MD5的一些tips

by void
http://www.ph4nt0m.org
2007-11-06

调试Mercury SMTPD CRAM-MD5的一些tips
-------------------------------------------------------------
1. jmp esp(机器码:FFE4)的等效指令: call esp(FFD4), push esp/ret(54C3, 54C2), mov reg,esp/jmp reg, mov reg, esp/call reg.

2. OD中,在整个ring3内存搜索机器码地址的方法:
Alt+M切换到"内存"窗口.
Ctrl+B输入机器码.
od会从低-->高开始搜索,若匹配成功,od弹出机器码所在内存块的"数据"窗口.
如果想在该块内继续搜索,Ctrl+L搜索本内存块.
如果不想在此块内搜索,ESC键过掉,Ctrl+L搜索剩下的内存块.

3. .tls section(线程局部存储节)在exe启动后进行初始化,Mercury v4.01b的一个跳转地址就是从中找到的.

4. 一个想法:因为不同机器mercury的功能dll加载基址不固定,所以利用Mercury本身的dll地址进行跳转,会不稳定.
但是这个溢出特殊在于:如果被攻击机器是用loader.exe加载mercury.exe的话,loader.exe会在mercury.exe崩溃后,重启进程.可以尝试以0x10000(64k)粒度(windows加载dll的基址粒度)来手工猜测dll的加载地址.

没有评论: