懒得装office 2003了,直接用魔鬼训练营的英文版xp sp3
这个漏洞跟Lotus Blossom行动有关
基于OffVis工具的Office漏洞分析方法
打开poc看看
eip被覆盖成0x41414141了
由于我这边immunity debugger看不到栈,是空的
我就用od看看吧,但还是看不到,那就用windbg吧,⊙﹏⊙b汗
可惜也看不到
(3a4.d3c): Access violation - code c0000005 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. eax=00000000 ebx=01fa06b0 ecx=7c91003d edx=00140608 esi=01bf1a04 edi=00000000 eip=41414141 esp=001278ec ebp=00000000 iopl=0 nv up ei pl zr na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010246 <Unloaded_PI32.dll>+0x41414140: 41414141 ?? ??? 0:000> kb ChildEBP RetAddr Args to Child WARNING: Frame IP not in any known module. Following frames may be wrong. 001278e8 00000000 00000000 00000000 00000000 <Unloaded_PI32.dll>+0x41414140
看一下样本,应该是这里覆盖到了返回地址
那我把后面的0都删掉估计就可以看到了,实践一下,连触发异常都不行
发现我错了,原来是向上看,
可以看到这个返回地址在下面sub_275C89C7函数中
那我们在这里下断看看吧
由于是动态加载,我们设置在载入模块的时候会断下来,这时再去下断点即可
贮备载入的模块也会是红色的,这是过去下断点即可,
我们在sub_275C89C7下断后单步到下面,发现时这个函数造成的溢出
那我们进入sub_275C89C7后,执行完mov ebp,esp后 对返回地址(即ebp+4)下内存写入或者硬件写入断点
那就会停在下面的语句那我们跟一下那个函数,申请了一个比较大堆空间,0x8282
下面复制时的ecx也是0x8282
看ida的话就是这个
继续看看里面
由于rtf文件是以文本保存OLE数据(0xD0CF11E0是OLE前面,代表DOCfile),就是下面的读取进去就当做十六进制,所以OffVis无法解析,我们将D0CF11E0开始以十六进制到一个文件中就可以了
如下图,保存为.doc
CLSID是指windows系统对于不同的应用程序,文件类型,OLE对象,特殊文件夹以及各种系统组件分配一个唯一表示它的ID代码
我们这里也可以看到
我们看到0x41414141在第4个Directory的data那里
我们再来看看
再看看ida那里,那么size的值也是来源于这里了
漏洞利用
我们看看漏洞利用,返回地址poc都帮我们定位了
看看ida
动态调试一下
最由于是retn 8, 所以只有有8个0x90做垃圾字符,之后jmp esp到栈上执行shellcode,
但这里的shellcode应该有点问题,没有弹出计算器