漏洞描述:office处理RTF格式的文档时,pFragments属性存在栈溢出。
思考漏洞分析思路:
由于已经拿到poc.ttf(debugging),就很好分析了。
1、用word打开poc文件,在30e9eb88位置程序异常中断,观察异常原因。
从图中可以看到,由于该操作将ESI中的数据拷贝到一个只读内存空间(130000)里导致程序异常,而且此时栈空间已经被破坏被恶意数据填充(12a200-13000)可以判断是栈溢出。
2、由于此时栈空间已经被破坏,因此在30e9eb88下断点,观察栈溢出前的函数调用,并确定调用崩溃函数的函数
3、在30f4cc5d下断点,观察调用崩溃函数前的执行流程,单步步过到30f4cc93 call [eax+1ch](30e9e62)执行后程序崩溃
4、观察rep movs时的几个关键参数
发现edi距离ebp栈底只有10字节,而ecx等于322b,rep movs复制的数据远远超过了分配的栈空间,导致栈溢出。
5、从poc文件中寻找导致漏洞触发的循环变量ecx(caac)
6、rtf格式规范
参考rtf格式规范,
确定pFragement为一个数组,当处理该属性的第三个字段时,会把偏移八个字符后的4个字符当作数据大小,而没有对这四个字符进行检查
exploit的利用,在看完exloit编写系列教程补充。