环境:
Windows7专业版32位
Office2003 XP3 完全版
POC来源:
网络样本
工具:
IDA OD 010Ediotr windbg
漏洞成因以及分析:
栈内存拷贝溢出漏洞,控件安全检查不严
查找漏洞触发点:
如果分析有错误,谢谢大家帮我指正
打开WORD 使用OD 附加WORD 打开POC
触发溢出
由于栈溢出会破坏向下的栈空间,如果足够大,那基本是找不到线索 所以我们往溢出点的栈往上看 找点线索定位溢出点
往上看发现两个返回地址 先看第一个
可能是栈溢出的函数位置 我们现在这里下断试试
然后再开,单步步过,观察堆栈返回地址是否被破坏
经过观察我们发现是这个函数执行完后堆栈被破坏
我们进函数里面观察一下 有没有可疑的内存拷贝语句
经观察 极有可能是这句拷贝语句造成的溢出
但是在汇编里不好观察,我们搜索一下最初在栈里发现那两个返回地址的名字
找到了这个模块,我们使用IDA观察一下
通过在OD里的位置 定位到了IDA里的函数
进去溢出函数里面看 发现是这句造成的溢出的函数
而对传进来的长度参数只有一句简单的判断
所以只要使这个局部变量V7 和传进来的参数相等就可以了,我们往上观察传参的地方
发现是定义的局部变量 而且要=>8 没有上限 这样更是我们shellocde的最佳利用点
我们打开010Ediotr 使用WinExec 然后使用OD动态调试 快速定位这两个局部变量的位置就是
所以我们在写shellocde时候也要往后移动八个字节
运行指令我们就是用跳板指令JMP ESP 接下来我们就要在里面搜索这个指令
我们打开windbg 附加 使用mona插件搜索模块
我们选择一个保护比较少 而且通用性高的模块 大家可以自己判断 我选择的是WININET.dll 这个模块
选一个地址作为我们的跳板
完成利用