第一步 编写一个包含异常处理的漏洞程序
环境:
XP SP3
VS 2008
禁止优化选项(C/C++------optimization:disable)
Release版本编译 关闭DEP(还是那个问题,我在vs2008里并没有关闭DEP(截图在上一个帖子),可是执行结果却没有影响,有没有遇到相同问题的同学??)
接下来就是跳转指令的选择了,怎么能在执行溢出点的异常处理函数后,再跳回来呢,这就需要我们的SafeSEH OFF的模块了
如果shellcode紧邻着溢出点B,我们可以直接找ret指令的函数,跳回来继续执行shellcode,由于用了两个DWORD填充shellcode前两个字节,所以考虑选择pop pop ret指令
shellcode布置如下:
220字节0x90||4字节pop pop ret地址||8字节0x90||168字节shellcode内容
好了,还剩最后一个问题了,跳板指令地址哪里来?我们自己构造一个dll,包含这个指令的。
第四步 制作SafeSEH OFF的DLL
环境:
XP SP3
VC 6.0(编译器不会启用SafeSEH)
链接选项:/base:"0x11120000"(这里是防止跳转指令地址出现0x00截断字符串,问题:如果跳转指令必须有00,怎么处理,大神快告诉我)
[C] 纯文本查看复制代码#include "stdafx.h"BOOL APIENTRY DllMain( HANDLE hModule,DWORD ul_reason_for_call, LPVOID lpReserved){ return TRUE;}void jump(){__asm{ pop eax pop eax retn }}
可以看出了,这个dll就包含了一个pop pop ret的内容