ღ Miranda

CVE-2010-3333 Micrisoft RTF 栈溢出分析

环境

系统: windows XP SP3
office版本:2003 11.5612.5606

调试分析

使用msf生成crash样本分析:

打开word,附加到windbg上,然后打开样本,运行一段时间后,停在了下面指令处:

是一个违规内存访问的异常,可以看一下esiedi分别都是什么:

!address命令的输出可以看到edi这段内存是PAGE_READONLY,也就是只读的,所以出发了异常,在这条指令上下断点再次附加调试,然后查看栈回溯:

栈回溯的第二条记录就是调用崩溃函数的函数:

反编译一下漏洞点处处的函数:

这里ecx保存的是复制字符串的长度,由于rep movsdword型的,所以ecx要除以4,也就是右移两位,之前的调试发现右移后ecx值为0000322b,可以恢复为c8ac,对应了crash文件中的:

所以为了简化crash,可以构造文件为:

30f4cc5d处下断点再次调试。

这里开辟了栈上的空间。

这里调用了漏洞点所在的函数,单步跟进。

这里将大小放到ecx中,也就是构造的2222eax处应该是个对象,保存了文档的各项信息。

这里把内容的起始地址放到esi中。

目标地址其实是栈上的地址,在immunity debugger中看的更清楚:

执行后:

00123EAC处的返回地址被覆盖。

可以控制eip,这里的利用较为简单,因为可以精确控制栈,直接jmp esp或者构造rop链都可以。

发表评论

电子邮件地址不会被公开。