CVE-2011-0104浅析-excel栈溢出漏洞

来源:互联网 发布:淘宝评价怎么看不到 编辑:程序博客网 时间:2024/06/13 21:20

前言

CVE-2011-0104是Excel在解析XLB文件中的TOOLBARDEF Record时存在的栈溢出漏洞,著名的安全组织Abysssec也在其博客上公布了漏洞原理及相应的利用代码,不过Abysssec公布的EXP只适用于特定版本的Excel 2007。此处我们用其公布的EXP作为调试样本,在深入分析漏洞成因的基础之上对其修改使得在Excel 2003下也能利用。

成因分析

这里的调试环境是XP SP3+Excel 2003 SP3,在2007里面windbg会crash到一个莫名其妙的地址,搞得我不知道怎么继续调了,所以只好用2003。
这里写图片描述
崩溃地址位于函数sub_300E05AD,重新加载在该函数下断,然后再对栈顶下内存写入断点,执行后来到下面的位置。
这里写图片描述
这里复制的字节大小是0x300,显然大于了栈空间的大小造成溢出。在IDA中看看。
这里写图片描述
这里写图片描述
下面利用py-office-tools对exploit.db文件格式进行解析。
这里写图片描述
这里写图片描述
我们发现0x300正是来自CONTINUE记录中Len的值,由于没有检验它与实际分配的内存空间的大小关系最终在复制数据时导致溢出。0xA7和0x3C也和我们在IDA中看到的能对的上。

在Excel 2003中的利用

接下来我们试着对EXP进行修改使得在Excel 2003下也能利用。用Immunity Debugger调试发现出现了内存访问异常。
这里写图片描述
这里EAX的值来源于前面的EBP+0x2C,EBP+0x2C来源于shellcode。
这里写图片描述
样本中的CALL ESP跳板也需要修改。
这里写图片描述
因此考虑在shellcode前面继续添加0x90同时确保返回地址处的值为EXCEL 2003下CALL ESP的地址,另外还需要将访问异常处的的值填充为一个可写的内存地址。这样,既解决了访问异常的问题,又不会影响shellcode的执行。
来复习一下retn A指令:retn A指令相当于EIP=[ESP],ESP=ESP+0xA+0x4。
这里写图片描述
这里写图片描述
这里还有一个小细节需要注意,shellcode中用了FSTENV指令来取当前PC,不过这个指令对栈会造成破坏,所以前面需要加一些0x90缓冲一下。
这里写图片描述
这里写图片描述
成功弹出计算器的样本如下。
这里写图片描述

参考资料

1.《漏洞战争》第二章第五节
2.CVE-2011- 0104 Microsoft Excel ToolBardef Record 栈溢出漏洞在Excel 2003下利用分析

原创粉丝点击