软件名称: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版】】
点击是
文章图片
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代码段可执行.