# cve-2014-0569 漏洞利用分析

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2014-11-26T02:09:00Z
Canonical: https://wepostx.com/topics/645

> 乌云历史资料归档
>
> **原始作者：** 绿盟科技
> **原始编号：** superkieran-wooyundrops:410
> **原始发布时间：** 2014-11-26 10:09
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 0×00 简述

来自CVE的漏洞描述：

![原文图片](/media/2016/06/18b4e8a2e277c84695b011da13777517)

测试环境： Win7 SP1 + Flash ActiveX 15.0.0.167

# 0×01 漏洞利用分析

介绍有关漏洞关键代码前，先看一下heap spray后的内存布局：

![原文图片](/media/2016/06/82f8225cbe52574434743792150b2d32)

简单描述为：

![原文图片](/media/2016/06/7f4dd2267aeb6a4823f1508cbc87d977)

漏洞致使Uint Vector的length字段被改写。
漏洞关键代码：

![原文图片](/media/2016/06/a292b28759205f05fcbdebf69fe6df22)

红线标注的部分其操作流程：
取预定大小0×1000的ByteArray对象_loc3，赋值给domainMemory，以便casi32函数操作此内存
预置大小0×1000的ByteArray对象：

![原文图片](/media/2016/06/0ec7b65179885a84f62eaebab468abaa)

通过函数atomicCompareAndSwapLength将_loc3长度置0
casi32函数内由于整数溢出造成执行流改变，致使向_loc3偏移0×1000处成功写入0×40000001
上述过程细节：

![原文图片](/media/2016/06/b83f05fbe1618a12b515855b7242f5b7)

![原文图片](/media/2016/06/71298d74cd87f4d6c3646785a6ebf5de)

![原文图片](/media/2016/06/4aabc74f7f97be478baf6d1b39e9540a)

![原文图片](/media/2016/06/e25ad504aed53eee24f8ccffd106db85)

这样就可以以超长的Uint Vector为起点，读取预置的对象数据。
利用关键点：
搜索预置的sound对象进而计算出flash控件基址
预置的sound对象包含于喷射的少量Vector Object里，这里称之为vec_3。
具体的喷射代码：

![原文图片](/media/2016/06/2f08aef25ba2ffd458d5f520e408df22)

通过特征比对遍历以获取vec_3中元素：

![原文图片](/media/2016/06/f1514bfd7f1b22bac3ad9a177541ac67)

搜索到的其中一项：
计算flash控件基址：

![原文图片](/media/2016/06/377aed756630f7bd9e86c8b069a2db29)

在flash控件基址基础上获取rop链所需指令，用VirtualAlloc分配可执行内存过DEP。

![原文图片](/media/2016/06/c118637c11a57b2df07dfe236b8832d6)

![原文图片](/media/2016/06/e4fc59b0be15fbbe6dd56d420118f6ac)

构造rop链（部分）：

![原文图片](/media/2016/06/0fad64910dd60c64924e1ec93e63774c)

修改sound对象虚表指针，并调用修改后的虚表函数将执行流导向stack pivot。

![原文图片](/media/2016/06/6b685bbb36c22d9acd9d39b26c0ee439)

sound对象虚表指针修改前后：

![原文图片](/media/2016/06/e3bf3fc72f469a9ee30dd6d78055674c)

![原文图片](/media/2016/06/3c94b5e29b143b2752ea35ee7bc79d50)

修改后的虚表指针指向内容：

![原文图片](/media/2016/06/30d0e742e1c6ed457e06e1cfdfa9466d)

调用虚函数触发利用。

![原文图片](/media/2016/06/2119127b4635aba030f672d080c9284e)

# 0×02 分析总结

完整的利用至少由两部分组成（html + swf），其中swf并不能独立执行，需要html传入的参数（shellcode），只拿到swf并不能获知攻击者的意图。

# 0×03 参考文章

- [CVE-2014-0569漏洞分析](http://weibo.com/p/1001603769606924861349)

- [Cracking the CVE-2014-0569 nutshell](http://blogs.technet.com/b/mmpc/archive/2014/11/05/cracking-the-cve-2014-0569-nutshell.aspx)

## Replies
