实验原理:
SHE的安全校验存在一个严重的缺陷:如果SHE中异常函数指针执行堆区,即使安全校验发现SHE不可信,仍会调用已经被修改过的异常处理函数!因此基于这个原理我们将shellcode布置到堆区中执行!
实验环境:
Winxp sp3 vs2010
Release版本、禁用优化
实验程序:
分析程序:
首先程序申请了一块500字节的堆空间,将sellcode复制到该空间中;
在test函数中存在溢出,如果溢出过长将覆盖程序的SHE信息;
之后通过构造除0异常,调用SHE信息。
调试程序:
OD载入程序在printf处下断点,单步运行,buf的地址为0x003A3EC0。
F8单步,shellcode将复制到0x0012FE9C处
SHE所在位置是0x0012FFB0
因此我们构造0x0012FFB4-0x0012FE9C=280个字节,然后加上shellcode在堆中的地址0x003A3EC0,构造shellcode。
F9运行,弹框出现!