类别:栈溢出,fileformat类别漏洞windows
描述: This module exploits a stack-based buffer overflow in the handling of the 'pFragments' shape property within the Microsoft Word RTF parser.函数
参考资料:《Metasploit魔鬼训练营》p276-p286测试
利用的是exploit/windows/fileformat/ms10_087_rtf_pfragments_bof模块,它会生成一个.rtf文件,在靶机中打开后会执行payload。orm
我这里的payload是弹出计算器,成功实现!进程
MS10_087漏洞原理分析内存
用OllyDbg打开winword.exe,按f9运行。在word中打开测试文件ms10087.rtf,OllyDbg捕获异常:it
出错的缘由是什么呢?此处访问内存中0x00130000地址处,而经过alt+m可知0x00104000到0x0012ffff才是当前进程的栈空间,可知这次内存访问越界了。form
根据经验,越界通常是想触发异常,让程序执行seh,那么seh应该在以前被覆盖了。module
在OllyDbg标题栏能够看到此处的模块是mso,用IDA打开mso.dll分析。原理
可是ida反汇编彷佛要花很久时间,我一个午觉睡醒了还卡卡的在分析,就先不弄这个ida的了。并且这一步的目的也只是分析出错处所在的函数入口,以查看栈中对应此函数的参数。
这里咱们只要在函数入口处0x30ED4406(这里的地址为何又固定了?并且还有很诡异的一点就是:经过ctrl+g能够来到0x30ED4406处,可是一移动这个地址就消失,原本push edi的机器码57和其余机器码组成了这里的add指令,不知道为何两边的兄弟要这么强势。。)
源地址为0x1A54000C,目的地址为0x00123E98,长度为0x322b*4=0xC8AC个字节。目的地址离栈底0x0012ffff的距离0xC167少于复制长度,形成溢出,引起异常。
异常以后天然就是执行SEH,但是我这里被覆盖的SEH倒是指向0xBDB98B85,但是这个地址并不能访问!
在这里,我是先在OllyDbg中打开winword.exe,而后再在word中打开ms10087.rtf。因此我想会不会是这里出问题,就另外不经过ollydbg直接打开winword.exe,而后打开ms10087.rtf,结果出乎意料,程序并没溢出计算器,而是直接关闭了。
可是直接双击打开ms10087.rtf仍是能成功溢出的。
从新看了看书,说的挺模糊的。说是让修改下mso.dll,设置软断点。重启word,ollydbg就会加载进去。(未完待续。。)