之前调过一个关于浏览器的漏洞,因为第一次接触漏洞,所以很没有经验不知道最后怎么构造shellcode(特别是ROP链的写法),有幸再调试一个稍微简单点的CVE,具体查看poc中的ROP链编写。
0x00 漏洞简介
Adobe Acrobat和Reader都是美国Adobe公司开发的非常流行的PDF文件阅读器。
基于Window和Mac OS X的Adobe Reader和Acrobat 9.4之前的9.x版本,8.2.5之前的8.x版本的CoolType.dll中存在基于栈的缓冲区溢出漏洞。远程攻击者可借助带有TTF字体Smart INdependent Glyphlets (SING)表格中超长字段的PDF文件执行任意代码或者导致拒绝服务(应用程序崩溃)。
0x01 测试环境
虚拟机 | winxp sp3 32bit |
---|---|
adobe Reader | 9.3.4 |
利用OD以及IDA进行动静态结合的逆向分析
0x02 漏洞调试
0x1 基于字符串定位的漏洞分析方法
首先进行漏洞定位,这是分析的起始步骤,找到漏洞产生的现场,作为一个典型的stack overflow的漏洞,最典型的函数就是Strcat函数,同时本漏洞出现的原因是在堆SING表格的解析上,所以我们可以直接利用IDA分析(CoolType.dll文件)定位漏洞所在位置,alt+t搜索SING字符
利用IDA静态查看出问题的CoolType.dll动态链接库
.text:0803DCF9 push ebp
.text:0803DCFA sub esp, 104h;分配栈空间0x104
.text:0803DD00 lea ebp, [esp-4];后面的strcat会把执行结果保存在ebp中
.text:0803DD04 mov eax, dword_8230FB8
.text:0803DD09 xor eax, ebp
.text:0803DD0B mov [ebp+104h], eax
.text:0803DD11 push 4Ch
.text:0803DD13 mov eax, offset loc_8184A54
.text:0803DD18 call __EH_prolog3_catch
.text:0803DD1D mov eax, [ebp+arg_C]
.text:0803DD23 mov edi, [ebp+arg_0]
.text:0803DD29 mov ebx, [ebp+arg_4]
.text:0803DD2F mov [ebp+var_28], edi
.text:0803DD32 mov [ebp+var_30], eax
.text:0803DD35 call sub_804172C
.text:0803DD3A xor esi, esi
.text:0803DD3C cmp dword ptr [edi+8], 3
.text:0803DD40 mov [ebp+var_4], esi
.text:0803DD43 jz loc_803DF00
.text:0803DD49 mov [ebp+var_1C], esi
.text:0803DD4C mov [ebp+var_18], esi
.text:0803DD4F cmp dword ptr [edi+0Ch], 1
.text:0803DD53 mov byte ptr [ebp+var_4], 1
.text:0803DD57 jnz loc_803DEA9
.text:0803DD5D push offset aName ; "name"