-
-
[翻译]Fuzzing(一个off-by-one漏洞)
-
发表于:
2011-3-17 12:04
4640
-
[翻译]Fuzzing(一个off-by-one漏洞)
【题目】Fuzzing
【作者】zelik
【译者】后恋
【时间】原文时间:2010 -11月-22 日,译文时间:2011年-3月-17日
【原文】http://www.exploit-db.com/fuzzing-vs-reversing-round-1-fuzzing/
最近笔者一直在测试Adobe Flash Playe。在笔者自主研发的框架上对Flash的一个简单格式进行测试。这项测逐步深入渐渐的覆盖到了
更多的格式。一段时间后,笔者注意到在加载一个SWF格式的文件时会发生奇怪的崩溃,当用OD对它进行调试的时候程序会终止。如下
图所示:
*
说明:调试环境为安装了Adobe Flash 10.1.85.3的XP SP2系统。在调试这个程序前,我们先调试下IE浏览器发现它被定位到了0x03281000h.
笔者在调试的时候发现在解析“DefineFont2”标签数据的函数中存在一个Off-by-One溢出漏洞。这个漏洞看上去并不是很明显,但是当解析“DefineFont2”的主函数在解析整个标签时,随着数据和我们定义的字体的提交这个漏洞就出现了。“DefineFont2”标签允
许我们指定一个不超过0xFFh字节的字体名称。“DefineFont2”标签格式如下:
图
在有关"DefintFont2"标签的程序初始化完成之后,0x032ACB45h处函数"CopyFontName"会分配一个缓冲区用来存储函数所接收到的字体名称参数。这个缓冲区的分配是通过调用0x032CA7FEh处的"AllocateBuffer"函数进行分配的。
.text:032ACB45 CopyFontName
...
.text:032ACB68 push [esp+0Ch+FontName]
.text:032ACB6C jge short loc_32ACB79
.text:032ACB79 allocateFontName:
.text:032ACB79 lea esi, [edi+10h]
.text:032ACB7C mov ecx, esi
.text:032ACB7E call AllocateBuffer ; // AllocateBuffer(Buf, FontName);
.text:032ACB83 mov ecx, esi
.text:032ACB85
.text:032ACB85 terminateFontName:
.text:032ACB85 push 80h
.text:032ACB8A call NullTerminate ; // NullTerminate(Buf, 0x80);
.text:032ACB8F mov ecx, edi
.text:032ACB91 call sub_32ACA47
.text:032ACB96 pop edi
.text:032ACB97 pop esi
.text:032ACB98 pop ebx
.text:032ACB99 retn 8
.text:032CA609 AllocateBuffer
…
.text:032CA61C lea edx, [eax+1]
.text:032CA61F
.text:032CA61F loc_32CA61F:
.text:032CA61F mov cl, [eax]
.text:032CA621 inc eax
.text:032CA622 test cl, cl
.text:032CA624 jnz short loc_32CA61F
.text:032CA626 sub eax, edx
.text:032CA628 jmp short loc_32CA62C
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!