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下利用分析
- CVE-2011-0104浅析-excel栈溢出漏洞
- CVE-2017-7269浅析-IIS6.0栈溢出漏洞
- CVE-2012-0158浅析-word栈溢出漏洞
- CVE-2010-3333浅析-word栈溢出漏洞
- CVE-2010-5301浅析-Kolibri栈溢出漏洞
- CVE-2010-2883浅析-Adobe Reader栈溢出漏洞
- CVE-2017-6008浅析-HitmanPro内核池溢出漏洞(Win7)
- CVE-2016-10190浅析-FFmpeg堆溢出漏洞
- CVE-2012-1876浅析-Internet Explorer堆溢出漏洞
- CVE-2014-6332浅析-Internet Explorer整数溢出漏洞
- CVE-2014-3791浅析-Easy File Sharing Web Server栈溢出漏洞(从fuzzing到0day)
- CVE-2013-4694 WinAmp 5.63 栈溢出漏洞分析
- 漏洞分析之CVE-2010-2883(栈溢出)
- CVE-2011-0073浅析-firefox释放重引用漏洞
- cve-2011-0027漏洞分析
- 浅析CVE-2011-3874(zergRush)
- 浅析cve-2011-1823(Gingerbreak)
- 影响所有Nexus手机的漏洞,浅析CVE-2015-1805
- TCP三次握手四次挥手详解
- tomcat配置本地开发虚拟域名
- 自动化engine-setup
- 深入理解JavaScript的对象模型
- 插入排序及优化(java实现)
- CVE-2011-0104浅析-excel栈溢出漏洞
- MySQL中InnoDB的间隙锁问题
- 【数据结构】链表的原理及java实现
- Linux 下获取Root权限的几种方法
- 神舟笔记本如何进BIOS设置u盘启动?
- 分享SourceTree的分支创建切换合并删除和标签管理等操作
- HTML,css旋转轮播图
- 网站邮件配置时,提示 SMTP Error: Could not authenticate
- PRML第一章笔记