软件名称:Microsoft Office
软件版本:2003
漏洞模块:MSCOMCTL.OCX
POC来源:Kail(Linux)Metasploit框架
操作系统:Windows 7\sp1\x86 32位
漏洞编号:CVE

0x01 漏洞原理

关于本漏洞原理,网上有各种分析文章,一般都基于实例样本来定位漏洞的二进制代码并分析原理,这里不作详细的分析过程,直接给出漏洞成因,后面也有少部分的调试演示。这个漏洞发生在office的一个组件MSCOMCTL.OCX,多个版本office的该模块都存在这个漏洞,本文的测试环境均以WINDOWS+office2003为例。MSCOMCTL.OCX这个漏洞模块是office解析activeX控件用到的一个动态库,如果一个office文档中包含activeX这类控件元素的话,比如按钮、列表、树形控件等,当文档通过office打开时MSCOMCTL.OCX就会被自动载入office程序的进程空间被调用来解析和显示控件。
本漏洞属于经典缓冲区溢出漏洞里的栈内存拷贝溢出漏洞,当office解析到一个被构造好的控件(以ListView列表控件为例),会发生栈内存越界拷贝。以下栈回溯示意图可以代表本漏洞的发生过程:

0x02 漏洞成因

栈内存拷贝溢出漏洞,控件安全检查不严
综上可以得出漏洞成因是在读取数据的时候,读取的长度和验证的长度都在文件中,且可以人为修改,进而出发缓冲区溢出

0x03 利用过程

proc溢出点

eip被覆盖成41414141
Microsoft Office2003(CVE-2012-0158)漏洞分析报告

加载模块

Microsoft Office2003(CVE-2012-0158)漏洞分析报告

漏洞动态利用

Microsoft Office2003(CVE-2012-0158)漏洞分析报告Microsoft Office2003(CVE-2012-0158)漏洞分析报告

ida动态分析

Microsoft Office2003(CVE-2012-0158)漏洞分析报告

0x04 结果

用010edit写,第一个是jmp esp地址,4个90是跳板(可能存在少了一个字节),解密shellcode,加密shelloce(要把DE改为90与7异或==97),edit如图10所示:
41414141(jmp esp )后面4个nop +shellcode起始位置
运行结果,弹出个MessageBox图片,结果如图11所示:

0x05 漏洞原理

要先准备一段加密的shellcode,解密shellcode,都要用vs编写,用od抠出来,注意加密解密秘钥要相同,shellcode的大小要一样,找溢出点通过sublime_text这个工具切一半再精确,sublime_text这个要和虚拟机版本一样,颜色深度代表里面输入的字符串不同。

相关文章: