-
漏洞介绍:
CVE-2012-0158漏洞是一个栈溢出漏洞,该漏洞是微软Office办公软件中的MSCOMCTL.ocx中MSCOMCTLListView控件中检查失误造成的,攻击者可以通过精心心构造的数据控制程序EIP实现任意代码执行。
-
CVE-2012-0158漏洞的微软编号时ms12-027
-
文件格式漏洞分析的方法:
-
-
网络,论坛:Metasploit
-
-
复现漏洞
-
搭建漏洞环境,执行漏洞poc
-
-
分析漏洞
-
调试漏洞,定位漏洞触发点,分析漏洞成因
-
-
漏洞利用
-
自己编写shellcode漏洞利用
-
-
-
漏洞分析环境和工具:
-
操作系统:Windows 7 专业版(32位)
-
软件:ofiice 2003 sp3
-
工具:Ollydbg,windbg,IDA Pro,OfficeMalScanner, python模块oletools(rtfobj)
-
漏洞分析:
-
获取POC
-
复现漏洞
-
搭建漏洞执行环境,执行漏洞poc
-
安装office 2003 sp3
-
执行poc以及样本
-
-
分析漏洞
-
调试漏洞,定位漏洞触发点,分析漏洞成因
-
定位漏洞触发模块:
-
分析溢出点附近堆栈,溢出点下面的堆栈一般是刚刚调用的函数的上一层函数堆栈,移除后可能已经破坏,溢出点上面的堆栈一般是刚刚执行的函数堆栈,可以发现有一个地址275CA0A,可以看出这个地址是MSCOMCTL模块中的地址,由此判断刚刚执行的函数中执行了MSCOMCTL模块中的代码。
-
-
-
定位漏洞函数
根据刚刚找到的MSCCOMCTL模块中的地址,在反汇编窗口中跟随,进入到该模块中,堆该指令所在的函数入口和ret位置下断点。
在ret位置下断点。
函数入口:
然后重新启动word,用x32dbg附加,然后用word打开poc,然后断点。在断点断下来之后,单步F8运行,主要观察堆栈的变化。
在执行完call mscomctl.275c876d指令后,返回地址被覆盖了,定位到了触发漏洞的函数。
-
分析漏洞成因
调试漏洞,定位漏洞触发点即函数mscomctl.275c876d
使用IDA打开MSCOMCTL.ocm
使用x32dbg进入该函数动态调试进行分析:
在执行rep movsd指令之后,ret返回地址被覆盖
总结:
CVE-2012-0158漏洞触发在MSCOMCTL.ocx模块中,漏洞成因是在读取数据时,读取的数据长度和验证的长度都在文件中,所以可以自行构造,进而触发栈溢出。