Internet Explorer(CVE-2012-1889)暴雷漏洞分析报告【WinXP&IE8版】

软件名称:Internet Explorer
软件版本:8.0
漏洞模块:msxml3.dll
模块版本:8.90.1101.0
编译日期:2008年4月14日
操作系统:Windows XP sp3
漏洞编号:CVE-2012-1889(MS12-043)
危害等级:超危
漏洞类型:缓冲区溢出
威胁类型:远程


1. 软件简介
Internet Explorer,是微软公司推出的一款网页浏览器。原称Microsoft Internet Explorer(6版本以前)和Windows Internet Explorer(7、8、9、10、11版本),简称IE。在IE7以前,中文直译为“网络探路者”,但在IE7以后官方便直接俗称"IE浏览器"。
msxml指微软的xml语言解析器,用来解释xml语言的。就好像html文本下载到本地,浏览器会检查html的语法,解释html文本然后显示出来一样。要使用xml文件就一定要用到xml parser。

2. 漏洞成因
Microsoft XML Core Services (MSXML)是一组服务,可用JScript、VBScript、Microsoft开发工具编写的应用构建基于XML的Windows-native应用。
Microsoft XML Core Services 处理内存中的对象的方式中存在一个远程执行代码漏洞。如果用户查看包含特制内容的网站,则该漏洞可能允许远程执行代码。Microsoft XML Core Services 3.0、4.0、5.0和6.0版本中存在漏洞,该漏洞源于访问未初始化内存位置。


3. 利用过程
远程攻击者可利用该漏洞借助特制的web站点,执行任意代码或导致拒绝服务(内存破坏)。

4. PoC
使用以下代码保存为html文件,在windbg条件下打开IE浏览器,并运行这个html文件,IE浏览器崩溃。

示例代码:

CVE 2012-1889 PoC v2 By:15PB.Com - 锐客网


【Internet Explorer(CVE-2012-1889)暴雷漏洞分析报告【WinXP&IE8版】】

点击是
Internet Explorer(CVE-2012-1889)暴雷漏洞分析报告【WinXP&IE8版】
文章图片




5.Exploit


Step2_Accurate_Heap Spray By:15PB.Com - 锐客网


6.利用原理

执行Exploit网页后在msxml3.dll中有以下汇编代码:


mov eax,[ebp-14h]//eax=0c0c0c08h …… mov esi,eax//esi=0c0c0c08h …… mov ecx,[eax]//ecx=[0x0c0c0c08] => 0c0c0c0ch …… call [ecx+18h]//call [0x0c0c0c24] …… mov eax,[esi]//eax=[0x0c0c0c08] => 0c0c0c0ch …… call [eax+8h]//call [0x0c0c0c14]




那么根据之前的汇编代码,构建以下Ret2libC:


0x0c0c0c040c0c0c0ch 0x0c0c0c080c0c0c0ch 0x0c0c0c0C0c0c0c0ch 0x0c0c0c10retn Addr<-espStep_3 0x0c0c0c14pop exx # retn AddrStep_4(直接执行下下一步) 0x0c0c0c18xchg eax,esp # retn AddrStep_2(关键步骤) 0x0c0c0c1Cretn AddrStep_5 0x0c0c0c20retn AddrStep_6 0x0c0c0c24retn AddrStep_1 / Step_7 0x0c0c0c28VirtualProtect AddrStep_8 0x0c0c0c2Cretn to PayLoad(0x0c0c0c40) 0x0c0c0c30lpAddress(这里写PayLoad地址0x0c0c0c40) 0x0c0c0c34dwSize(0x1000够了) 0x0c0c0c38flNewProtect(0x40 可执行可写可读) 0x0c0c0c38flOldProtect(找一个可以写入的地址就行) 往下面就是PayLoad……



7.结语
触发漏洞的代码是JavaScript中最后一句,即后面obj15PB.definition(0)。definition是DOM对象的一个属性,而且是只读的属性,不可以把属性当作函数来使用并往里面传递参数。

绕过DEP的关键原理就是RETN,在内存中找到你想要执行的代码,布局Ret2LibC,最后构建VirtualProtect,让PayLoad代码段可执行.


    推荐阅读