0day 第11章--11.4节:从堆中绕过SafeSEH

实验原理:

SHE的安全校验存在一个严重的缺陷:如果SHE中异常函数指针执行堆区,即使安全校验发现SHE不可信,仍会调用已经被修改过的异常处理函数!因此基于这个原理我们将shellcode布置到堆区中执行!

实验环境:

Winxp sp3 vs2010
Release版本、禁用优化
0day 第11章--11.4节:从堆中绕过SafeSEH

实验程序:
0day 第11章--11.4节:从堆中绕过SafeSEH

分析程序:

首先程序申请了一块500字节的堆空间,将sellcode复制到该空间中;
在test函数中存在溢出,如果溢出过长将覆盖程序的SHE信息;
之后通过构造除0异常,调用SHE信息。

调试程序:

OD载入程序在printf处下断点,单步运行,buf的地址为0x003A3EC0。
0day 第11章--11.4节:从堆中绕过SafeSEH
F8单步,shellcode将复制到0x0012FE9C处
0day 第11章--11.4节:从堆中绕过SafeSEH
SHE所在位置是0x0012FFB0
0day 第11章--11.4节:从堆中绕过SafeSEH
因此我们构造0x0012FFB4-0x0012FE9C=280个字节,然后加上shellcode在堆中的地址0x003A3EC0,构造shellcode。

F9运行,弹框出现!
0day 第11章--11.4节:从堆中绕过SafeSEH