0%

CVE-2010-3333 Microsoft rtf栈溢出漏洞

漏洞描述:office处理RTF格式的文档时,pFragments属性存在栈溢出。

思考漏洞分析思路:
由于已经拿到poc.ttf(debugging),就很好分析了。

1、用word打开poc文件,在30e9eb88位置程序异常中断,观察异常原因。
2-1
2-2
从图中可以看到,由于该操作将ESI中的数据拷贝到一个只读内存空间(130000)里导致程序异常,而且此时栈空间已经被破坏被恶意数据填充(12a200-13000)可以判断是栈溢出。

2、由于此时栈空间已经被破坏,因此在30e9eb88下断点,观察栈溢出前的函数调用,并确定调用崩溃函数的函数
2-3
2-4
3、在30f4cc5d下断点,观察调用崩溃函数前的执行流程,单步步过到30f4cc93 call [eax+1ch](30e9e62)执行后程序崩溃

4、观察rep movs时的几个关键参数

ecx

esi

edi

发现edi距离ebp栈底只有10字节,而ecx等于322b,rep movs复制的数据远远超过了分配的栈空间,导致栈溢出。

5、从poc文件中寻找导致漏洞触发的循环变量ecx(caac)2-10

6、rtf格式规范
参考rtf格式规范,2-9
确定pFragement为一个数组,当处理该属性的第三个字段时,会把偏移八个字符后的4个字符当作数据大小,而没有对这四个字符进行检查

exploit的利用,在看完exloit编写系列教程补充。