首页
社区
课程
招聘
[原创]小白分析office漏洞 CVE-2012-0158
发表于: 2020-11-21 08:10 10770

[原创]小白分析office漏洞 CVE-2012-0158

2020-11-21 08:10
10770


操作系统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则返回


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2020-11-27 09:28 被哦哈哈哈哈编辑 ,原因:
上传的附件:
收藏
免费 1
支持
分享
最新回复 (4)
雪    币: 292
活跃值: (850)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
感谢分享,加油哈~
另外提一点小意见,感觉楼主只分析了溢出的位置,但是木有分析漏洞的根本原因哦,我记得最早前我调试这个漏洞的时候感觉这个漏洞根本原因是在楼主的2.3节第一张图片sub_275c89c7函数中在调用sub_275c876d之前有一个if判断,其中判断dwbytes时错误的设置了边界值,漏洞函数是dwbytes>=8,最后进行memcpy的目的地址使用的v7则是在sub_275c89c7中的栈地址,最终导致了可以拷贝超出分配栈空间大小从而引发栈溢出。我记得patch是修改dwbytes的判断为dwbytes<8,因为这个漏洞实在太经典了,所以有很印象(如果错了请轻喷哈),其实我有看过很多分析文章多数情况下只说明了触发漏洞的位置,但还稍稍欠缺一些root cause的分析,我觉得只有每一次分析都抓住root cause才能为以后漏洞挖掘或者分析更难的漏洞打下基石(毕竟溢出位置只要crash就能看到实在是太简单了),说的不正确的地方希望原谅,感谢交流哈
2020-11-23 16:49
0
雪    币: 7
活跃值: (4331)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
3
Keoyo 感谢分享,加油哈~ 另外提一点小意见,感觉楼主只分析了溢出的位置,但是木有分析漏洞的根本原因哦,我记得最早前我调试这个漏洞的时候感觉这个漏洞根本原因是在楼主的2.3节第一张图片sub_275c89c ...
捕捉K0师傅
2020-11-23 17:04
0
雪    币: 1620
活跃值: (2405)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
4
Keoyo 感谢分享,加油哈~ 另外提一点小意见,感觉楼主只分析了溢出的位置,但是木有分析漏洞的根本原因哦,我记得最早前我调试这个漏洞的时候感觉这个漏洞根本原因是在楼主的2.3节第一张图片sub_275c89c ...
感谢指导⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄
2020-11-23 17:17
0
雪    币: 299
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
技术很强
2021-9-3 10:56
0
游客
登录 | 注册 方可回帖
返回
//