-
-
[原创]小白分析office漏洞 CVE-2012-0158
-
发表于:
2020-11-21 08:10
10860
-
[原创]小白分析office漏洞 CVE-2012-0158
操作系统:Window 7 专业版(32位)
Microsoft Office是由Microsoft(微软)公司开发的一套基于 Windows 操作系统的办公软件套装。常用组件有 Word、Excel、PowerPoint等。最新版本为Microsoft 365(Office 2019)
CVE-2012-0158漏洞是一个栈溢出漏洞,该漏洞的产生来自于微软Office办公软件中MSCOMCTL.ocx中的MSCOMCTL.ListView控件检查失误。在读取数据的时候,读取的长度和验证的长度都在文件中,且可以人为修改,进而触发缓冲区溢出,攻击者可以通过精心构造的数据修改EIP指向来实现任意代码的执行。
用OllyDbg附加office,打开问题文档,发现弹出错误提示框,通过esp找到溢出点

分析溢出点附近堆栈,溢出点下面的堆栈一般是刚刚调用的函数的上一层函数堆栈,溢出后可能已经破坏,溢出点上面的堆栈─般是刚刚执行的函数堆栈,可以发现有一个地址275C8AOA,可以看出这个地址是MSCOMCTL模块中的地址,由此判断刚刚执行的函数中执行了MSCOMCTL模块中的代码

动态调试溢出点所在的函数,可以跟踪到是CALL275C876D时出的问题

重新动态调试观察CALL275C876D的参数

函数275C876D内部

在文件中搜索定位长度,发现有两个长度,猜测一个是dwBytes,一个是v7

在OllyDbg中单步调试以及修改8282为8283对比前后状态,发现两个长度确实一个是dwBytes,一个是v7

函数275C876D内部

修改8282为8283


函数275C876D内部

用IDA继续分析,后面疑似有拷贝函数

用OllyDbg找到了执行拷贝的语句

在读取数据时,读取的长度和验证的长度都在文件中,所以可以自行构造,进而触发栈溢出,栈溢出即在拷贝时,多余的部分向栈地址增加的方向覆盖,当函数返回地址被覆盖的时候,函数返回时会读取被覆盖的数据作为即将执行代码的地址,进而产生未知的后果
产生漏洞的根本原因是一个判断(即dwbytes>=8)。在函数sub_275c89c7中先后调用两次函数sub_275c876d,第一次调用该函数前分配了0x14字节的栈空间,第二次调用该函数前已使用0xc字节的空间(剩余0x8字节)。在函数内部会有拷贝数据这一行为,若拷贝数据量大于0x8字节就会引起栈溢出

官方修改如下,判断v9(dwBytes)是否等于8,不为8则返回
[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!
最后于 2020-11-27 09:28
被哦哈哈哈哈编辑
,原因: