正文
关于office的漏洞。先把进程attach上去然后打开exploit的文件。查看程序崩溃在这里:
查看一下栈回溯,发现此处函数地址的入口处为:0x300ce252
在此处下断点,重新运行程序。
查看esp的内容,此处为该函数的返回地址。
返回地址:0x13aa90。
在此处下内存访问断点。继续运行程序。发现程序断在了此处:
与此同时,esi所指向的字符串为:
这时候edi与ebp之间的偏移为:0x54,而所覆盖的字符串为0x300,远大于栈空间的大小,发生栈溢出。
再查看一下恶意文档的十六进制内容:
发现刚好与位于偏移0x670地址处的内容一样。
栈回溯一下:
查看调用情况:
0x306df0dc处调用了溢出函数。之后在此处下断点,然后查看一下该函数的参数:
三个参数依次为:0x13AA3B、0x300、0xFFFFEFE1。
我们可以根据前面所出现到的ebp:0x13AA3B大致猜测一下该函数的具体功能:第一参数为复制的目的地址,第二参数为复制的字节数,第三个参数为最大复制字节数。
现在再来理清一下程序执行的思路:
经过反复查看调用,发现整个程序执行流程是这样的:
从最开始crash的函数入口开始:
经跳转:
后调用函数:
后调用:
后就进入了溢出地址了。进入溢出地址后跳转到了最开始crash函数崩溃的地址了,我们在崩溃地址前下一个断点,执行:
eax的值为eax:0x51453844,ecx:0x00000006,此时的eax的地址是不存在的,所以会崩溃。因为poc样本是为2007所写的,2003并不适用,所以这里我们可以自己手动修改样本内容,达到shellcode的目的,此处我们可以抬高shellcode的位置,并把eax处的值修改为一个存在且可写的地址:
修改为如下:
其中0x308d5d8b为内存中一处call esp的地址,所以能够成功执行shellcode。
还有个后话,就是观察一下IDA中的伪代码:
Excel中的文件格式就不多说了,跟着上面所注释的地方可以看见两个格式类起着重要作用:TOOLBARDEF[0xA7]、CONTINUE[0x3C]。其中CONTINUE中的Len值0x300作为复制字节数。TOOLBARDEF中记录的Len值与cbtn字段控制着复制的目标地址。
修复