首页
社区
课程
招聘
[翻译]Advanced Exploitation of Internet Explorer Heap Overflow(MS12-004)
发表于: 2012-2-11 20:15 8227

[翻译]Advanced Exploitation of Internet Explorer Heap Overflow(MS12-004)

2012-2-11 20:15
8227

翻译:Advanced Exploitation of Internet Explorer Heap Overflow Vulnerabilities (MS12-004)

题注:由仙果翻译,其中肯定有错误之处,欢迎大家指正,感激不尽。
原始链接为:
http://www.vupen.com/blog/20120117.Advanced_Exploitation_of_Windows_MS12-004_CVE-2012-0003.php

嗨,大家好!
2012年刚刚开始CVE上就爆出了很多有趣的漏洞。其中一个就是CVE-2012-0003,一个危急级别的漏洞影响到了微软多媒体库并且与MIDI文件处理流程有关。在上个星期已经作为MS12-004公告的一部分进行修补。
鉴于此漏洞的危急程度,我们建议尽快打上补丁。
从维基百科上,我们能知道:“MIDI 是一个1982年制定的行业标准协议”,基本上在它制定30年后,这种格式仍然触发像微软这样的软件厂商的漏洞。
单独来说,这种漏洞非常常见但是漏洞利用并不容易,像Windows Media Player 或者Internet Explorer这样的应用程序解析一个MIDI文件时,
分配一个静态的堆缓冲区但写入却是超过0x440个字节(漏洞触发原因)。为了处理如此大的分配大小,Internet Explorer下通用的利用技巧并不适用这个漏洞,
这才是真正有挑战性的事情。
此博客中,我们将演示说明此漏洞的危急程度,通过Internet Explorer 9/8/7/6绕过ASLR/DEP实现代码执行。

1.漏洞分析技巧
这是漏洞的关键点。一个MIDI文件只要包含2种类型结构块,一个名称是MThd,另一个是MTrk。下列表格是2个部分的结构:

处理文件之前,Windows Media 在”winmm.dll”中使用”mseOpen”函数分配2个缓冲区:

.text:76B5CDB1 mov edi, [ebp+arg_4]
.text:76B5CDB4 mov eax, [edi+10h]
.text:76B5CDB7 lea eax, ds:94h[eax*8]
.text:76B5CDBE cmp eax, 10000h
.text:76B5CDC3 mov [ebp+var_4], 7
.text:76B5CDCA jnb loc_76B5CED7
.text:76B5CDD0 push ebx
.text:76B5CDD1 push esi
.text:76B5CDD2 push eax
.text:76B5CDD3 call winmmAlloc(x)              //分配一个缓冲区
.text:76B5CDD8 mov esi, eax
.text:76B5CDDA xor ebx, ebx
.text:76B5CDDC cmp esi, ebx
.text:76B5CDDE jz loc_76B5CED5
.text:76B5CDE4 push 400h
.text:76B5CDE9 call winmmAlloc(x)             // 分配第二个大小为0x400的缓冲区
 .text:74903483 loc_74903483:
.text:74903483 push [ebp+arg_C]
.text:74903486 lea eax, [ebp+var_14]
.text:74903489 push eax
.text:7490348A push esi
.text:7490348B call smfGetNextEvent(x,x,x) // 读取一个事件并放在var_8(变量8)
74903490 test eax, eax
.text:74903492 jnz loc_749035B1
.text:74903498 mov ecx, [ebp+var_8]
.text:7490349B cmp cl, 0F0h
.text:7490349E jnb short loc_749034EC
 .text:749034B4 loc_749034B4:
.text:749034B4
.text:749034B4 mov eax, [esi+10h]
.text:749034B7 add eax, [ebp+var_14]
.text:749034BA movzx ecx, cl
.text:749034BD mov [edi], eax                    // 写入第一个dword
.text:749034BF and dword ptr [esi+10h], 0
.text:749034C3 add edi, 4
.text:749034C6 and dword ptr [edi], 0         //写入 0
.text:749034C9 movzx eax, byte ptr [ebp+var_8+2]
.text:749034CD movzx edx, byte ptr [ebp+var_8+1]
.text:749034D1 shl eax, 8
.text:749034D4 or eax, edx
.text:749034D6 shl eax, 8
.text:749034D9 add edi, 4
.text:749034DC or eax, ecx
.text:749034DE
.text:749034DE loc_749034DE:
.text:749034DE mov [edi], eax                    //写入事件
.text:749034E0 add edi, 4
.text:749034E3 add dword ptr [ebx+8], 0Ch // 增加计数器
.text:749034E7 jmp loc_749035A2
 .text:76B5D0B2 mov eax, [ebp+wParam]
.text:76B5D0B5 mov ecx, [ebx+eax]          // 读取一个事件存放在ECX 中
.text:76B5D0B8 add ebx, 4
.text:76B5D0BB mov eax, ecx
.text:76B5D0BD mov [esi+24h], ebx
.text:76B5D0C0 shr eax, 18h 
.text:76B5D0C3 and ecx, 0FFFFFFh             // ecx = e3 e2 e1
.text:76B5D1B6 loc_76B5D1B6:
.text:76B5D1B6 cmp [ebp+hmo], ebx
.text:76B5D1B9 mov esi, [edi+84h]
.text:76B5D1BF jz loc_76B5D276
.text:76B5D1C5 test cl, cl                         // cl = e1
.text:76B5D1C7 mov al, cl                        // al = e1
.text:76B5D1C9 mov ebx, ecx
.text:76B5D1CB js short loc_76B5D1E3     // jump if 80h <= e1 <= FFh
 [...]
.text:76B5D1E3 loc_76B5D1E3:
.text:76B5D1E3 mov edx, ecx
.text:76B5D1E5 shr edx, 8                       // dl = e2
.text:76B5D1E8 mov [edi+54h], cl
.text:76B5D1EB mov byte ptr [ebp+wParam+3], dl
.text:76B5D1EE shr ebx, 10h                   // bl = e3
 .text:76B5D1F1 loc_76B5D1F1:
.text:76B5D1F1 mov dl, al                      // dl = e1
.text:76B5D1F3 and dl, 0F0h
.text:76B5D1F6 cmp dl, 90h
.text:76B5D1F9 mov [ebp+var_1], dl
.text:76B5D1FC jz short loc_76B5D203
.text:76B5D1FE cmp dl, 80h
.text:76B5D201 jnz short loc_76B5D25F
.text:76B5D203 loc_76B5D203:
.text:76B5D203 movzx edx, byte ptr [ebp+wParam+3] // edx = e2
.text:76B5D207 and eax, 0Fh                                      // eax = e1 & 0Fh
.text:76B5D20A shl eax, 7 
.text:76B5D20D add eax, edx
.text:76B5D20F cdq
.text:76B5D210 sub eax, edx
.text:76B5D212 sar eax, 1
.text:76B5D214 cmp [ebp+var_1], 80h
.text:76B5D218 jz short loc_76B5D244

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

上传的附件:
收藏
免费 6
支持
分享
最新回复 (12)
雪    币: 207
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
仙果大牛~~你还没贴完啊!!想占楼出售
2012-2-11 20:29
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
3
贴完了。呵呵
我修改下
2012-2-11 20:31
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
4
这个漏洞在利用技巧上还是有不少学习的价值,漏洞修复也是相当之简洁
2012-2-11 22:02
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
5
其中有几个地方:内存泄露,和绕过ASLR的地方需要弄清楚
2012-2-11 22:42
0
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
6
支持一下,好好学习。
2012-2-12 16:42
0
雪    币: 589
活跃值: (119)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
7
回帖学习~~
2012-2-12 16:49
0
雪    币: 306
活跃值: (85)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
8
回帖学习,分析+利用才是王道.
2012-2-13 14:12
0
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这个漏洞确实值得认真分析
2012-2-13 16:11
0
雪    币: 82
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
前面看了英文的文章 英文不太懂  现在有翻译的了 好啊  赞一个
2012-2-13 16:28
0
雪    币: 435
活跃值: (1282)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
11
顶,MThd头应该是14字节,其中lenth是4字节,不过这不重要哈哈
2012-2-27 18:44
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
12
这帖咋还没加精呢
2012-2-27 23:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
学习下,就是不知道该怎么利用
2012-2-28 15:36
0
游客
登录 | 注册 方可回帖
返回
//