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版】_第1张图片


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:

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代码段可执行.

你可能感兴趣的:(漏洞)