CVE-2012-0158于2012年被发现,虽然存在时间长,但其利用方法稳定成熟,影响office版本多,且经分析可知其内存地址几乎不变,可以稳定的找到对应的触发漏洞的地址,所以仍然是漏洞利用者喜爱的攻击之一。
CVE-2012-0158于2012 作为office的入门漏洞,
借这个漏洞来学习一下对这类office内嵌ActiveX控件漏洞的基本分析过程。
软件名称:Microsoft Office
软件版本:Office2003SP3_20120218
漏洞模块:MSCOMCTL.OCX
操作系统:windows7 32位
漏洞编号:CVE-2012-0158
漏洞类型:缓冲区溢出
CVE-2012-0158漏洞发生在MSCOMCTL.OCX模块,在一段内存拷贝时,由于检查条件错误造成基于栈的缓冲区溢出。
POC程序触发漏洞发生内存访问错误,返回值覆盖为41414141
①OD附加winword文档,并打开poc文件
②触发漏洞,程序崩溃,分析栈区
③单步运行程序可定位漏洞触发点
最后可知漏洞触发函数是0x275c87cd
④分析漏洞代码所在模块
①在ida找到MSCOMCTL.OCX模块中的0x275c87cd地址进行分析
②od中查看分析①中分析的几个数值
结合IDA和OD中的分析猜测两个8282是在进行长度检查,8282的长度足够造成缓冲区溢出覆盖返回地址以及给利用者构造shellcode的空间
③经上分析,结合资料,分析漏洞成因
根据分析可以推测,正常情况从控件数据读取出来dwBytes值不会大于8,因为如果大于8的话必然导致栈拷贝异常,所以图示cmp > 8才是漏洞成因,应改成< 8
①010分析poc文件
很容易发现两个8282和溢出点41414141,鉴于函数有ret 8,所以溢出点往后移动16位才是shellcode执行位置
②查找jmp esp跳板指令
使用ImmunityDebugger+mona查找模块内可用的jmp esp指令地址,填充到溢出点
③构建shellcode代码
这里使用之前漏洞课程使用的shellcode代码
最后,我们以CVE-2012-0158漏洞为起点,对最近几年的office漏洞做一个总结:
1.CVE-2012-0158这个漏洞属于OLE(对象嵌入与链接)里面的“嵌入”,与之相同的有CVE-2014-4114/CVE-2014-6352,CVE-2017-11882等;与之对应的有CVE-2017-0199,CVE-2017-8759等,这两个属于“链接”。
2.CVE-2012-0158这个漏洞属于ActiveX控件漏洞,漏洞原因为栈溢出;ActiveX控件方面的其他漏洞类型还有如CVE-2012-1856(UAF)等。
3.近几年出现一些利用其它组件在office内触发的漏洞,如CVE-2013-3906(TIFF图像解析漏洞),又如CVE-2015-2545/CVE-2017-0261/CVE-2017-0262(EPS文件解析漏洞),再如CVE-2017-8759(.NET注入漏洞)。
4.flash文件也可以作为ActiveX控件嵌入office文档,近几年著名的flash 0day攻击如CVE-2011-0609,CVE-2012-0754,CVE-2013-0634,CVE-2015-5119/CVE-2015-5122,CVE-2016-4117,还有CVE-2017-11292,都曾以嵌入在office文档中的形式出现在网络攻击行动中。
5.除常规漏洞外,office最近还出现了一些bypass各种防御措施的逻辑漏洞,如著名的沙虫漏洞CVE-2014-4114/CVE-2014-6352,低调的CVE-2015-0097,还有今年很火的CVE-2017-0199。
6.大多数office漏洞都可以以rtf格式为载体,所以在针对rtf类型时需要尤其注意
7.2017年共公布了6个office的或者和office相关联的0day,分别是:CVE-2017-0199,CVE-2017-0261,CVE-2017-0262,CVE-2017-8759,CVE-2017-11826和CVE-2017-11292(嵌入在office文档中)。此外,作为1day的CVE-2017-11882最近用的也比较频繁。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课