Link-Start

CVE-2012-0158

  • 漏洞介绍:

    CVE-2012-0158漏洞是一个栈溢出漏洞,该漏洞是微软Office办公软件中的MSCOMCTL.ocx中MSCOMCTLListView控件中检查失误造成的,攻击者可以通过精心心构造的数据控制程序EIP实现任意代码执行。

  • CVE-2012-0158漏洞的微软编号时ms12-027

 

 

  • 文件格式漏洞分析的方法:

  • 漏洞分析环境和工具:

    • 操作系统:Windows 7 专业版(32位)

    • 软件:ofiice 2003 sp3

    • 工具:Ollydbg,windbg,IDA Pro,OfficeMalScanner, python模块oletools(rtfobj)

 

 

 

漏洞分析:

  1. 获取POC

  2. 复现漏洞

    • 搭建漏洞执行环境,执行漏洞poc

    • 安装office 2003 sp3

    • 执行poc以及样本

 

  1. 分析漏洞

    • 调试漏洞,定位漏洞触发点,分析漏洞成因

    1. 定位漏洞触发模块:

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

     

 

  1. 定位漏洞函数

根据刚刚找到的MSCCOMCTL模块中的地址,在反汇编窗口中跟随,进入到该模块中,堆该指令所在的函数入口和ret位置下断点。

 

在ret位置下断点。

 

函数入口:

 

然后重新启动word,用x32dbg附加,然后用word打开poc,然后断点。在断点断下来之后,单步F8运行,主要观察堆栈的变化。

 

在执行完call mscomctl.275c876d指令后,返回地址被覆盖了,定位到了触发漏洞的函数。

 

  1. 分析漏洞成因

调试漏洞,定位漏洞触发点即函数mscomctl.275c876d

使用IDA打开MSCOMCTL.ocm

 

使用x32dbg进入该函数动态调试进行分析:

 

在执行rep movsd指令之后,ret返回地址被覆盖

 

 

总结:

CVE-2012-0158漏洞触发在MSCOMCTL.ocx模块中,漏洞成因是在读取数据时,读取的数据长度和验证的长度都在文件中,所以可以自行构造,进而触发栈溢出。

 

分类:

技术点:

相关文章: