[漏洞分析]CVE-2010-2883之PDF漏洞

  • A+
所属分类:安全文章

[漏洞分析]CVE-2010-2883之PDF漏洞

扫一扫关注公众号,长期致力于安全研究

前言:由CoolType.dll库所导致的栈溢出漏洞



0x01 环境准备

Adobe Reader 9.3.4

PdfStreamDumper

MSF生成的PDF

IDA和OD


这里MSF有现成的,直接生成一个就行了

[漏洞分析]CVE-2010-2883之PDF漏洞


之后通过PdfStreamDumper将TFF文件单独分离出来,等下要用的

[漏洞分析]CVE-2010-2883之PDF漏洞

[漏洞分析]CVE-2010-2883之PDF漏洞

0x02 IDA静态分析

将Adobe Reader安装目录中的CoolType.dll拖进去即可,通过搜索SING字符串直接定位。

具体流程如下,在获取uniqueName之后,没有对其进行校验长度,则导致漏洞产生。

0803DD74    68 4CDB1908     push CoolType.0819DB4C   ; ASCII 53,"ING"0803DD79    57              push edi0803DD7A    8D4D DC         lea ecx,dword ptr ss:[ebp-0x24] ;指向sing表入口0803DD7D    E8 843DFEFF     call CoolType.08021B06   ; 处理Sing表0803DD82    8B45 DC         mov eax,dword ptr ss:[ebp-0x24]0803DD85    3BC6            cmp eax,esi0803DD87    C645 FC 02      mov byte ptr ss:[ebp-0x4],0x20803DD8B    74 37           je short CoolType.0803DDC40803DD8D    8B08            mov ecx,dword ptr ds:[eax]0803DD8F    81E1 FFFF0000   and ecx,0xFFFF           ; Sing表资源版本号进行与0803DD95    74 08           je short CoolType.0803DD9F   ; 跳转0803DD97    81F9 00010000   cmp ecx,0x1000803DD9D    75 21           jnz short CoolType.0803DDC00803DD9F    83C0 10         add eax,0x10                ; uniqueName地址0803DDA2    50              push eax0803DDA3    8D45 00         lea eax,dword ptr ss:[ebp]0803DDA6    50              push eax0803DDA7    C645 00 00      mov byte ptr ss:[ebp],0x00803DDAB    E8 483D1300     call <jmp.&MSVCR80.strcat> ;造成溢出

SING表入口如下,从文件开始位置+0X11C处。add eax,0x10这条指令也就解释的通了,uniqueName就是0X12C开始处被push进栈进行了操作

[漏洞分析]CVE-2010-2883之PDF漏洞


0x03 OD分析

首先可以看到uniqueName的内容

[漏洞分析]CVE-2010-2883之PDF漏洞


继续跟到strcat之后,发现返回地址被覆盖了

[漏洞分析]CVE-2010-2883之PDF漏洞


    直接给返回地址设置一个断点,跳过去即可

[漏洞分析]CVE-2010-2883之PDF漏洞

    

    之后pop esp将0C0C0C0C保存到ESP中,这个0C0C0C0C处就是rop链,因为该程序有DEP,所以需要首先绕过DEP,不得不说MSF很强。最后通过ret跳到0C0C0C0C处开始执行rop链

[漏洞分析]CVE-2010-2883之PDF漏洞


接下来就是各种pop ret了,这里跳过去即可

[漏洞分析]CVE-2010-2883之PDF漏洞


重点来了,通过一个pop eax,将CreateFile的地址存起来了,之后

ret [0C0C0C20] (伪代码)

[漏洞分析]CVE-2010-2883之PDF漏洞


ret跳过来之后,是一个jmp eax,而eax是CreateFile的地址,不得不说这rop链很方便

[漏洞分析]CVE-2010-2883之PDF漏洞

   
    之后往下执行可以看到CreateFile的参数,创建了一个iso88591的文件

[漏洞分析]CVE-2010-2883之PDF漏洞


    之后crtr+F9一路跳到这儿,通过CreateFileMapping创建一块物理页,这里操作其实和上面的CreateFile操作一样,通过将该函数的地址存到寄存器,在用jmp进行跳转到该函数执行

[漏洞分析]CVE-2010-2883之PDF漏洞


CreateFileMapping执行完后,就到了MapViewOfFile映射物理页这里,是不是很熟悉,将该函数地址存到eax,在通过ret跳转到jmp eax处执行该函数

[漏洞分析]CVE-2010-2883之PDF漏洞


[漏洞分析]CVE-2010-2883之PDF漏洞


在之后就是各种pop ret了,关键点在最后,memcpy中,所以直接跳转过去即可。

[漏洞分析]CVE-2010-2883之PDF漏洞


熟悉的操作,接下来将memcpy函数地址存到eax,在通过ret定位到jmp eax处

[漏洞分析]CVE-2010-2883之PDF漏洞


根据上方的memcpy给的地址39E0000,可以确定是被拷贝数据的空间,当执行完memcpy之后,定位到一个ret,通过ret执行MSF中的shellcode

[漏洞分析]CVE-2010-2883之PDF漏洞


这里为了演示方便,我直接将默认shellcode内容更改为弹窗shellcode了

[漏洞分析]CVE-2010-2883之PDF漏洞


之后成功跳转到自己的shellcode里面

[漏洞分析]CVE-2010-2883之PDF漏洞


最后成功执行自己的shellcode,这里卡了...不过还是能看见弹窗是成功执行了的

[漏洞分析]CVE-2010-2883之PDF漏洞


但是还有个疑问。CreateFile创建的是什么?通过winhex查看,发现创建的文件存放的是shellcode,这就说得通了。

[漏洞分析]CVE-2010-2883之PDF漏洞


0x04 总结

整体流程就是通过CreateFile创建了一个iso88591文件

iso88591里面就是shellcode,之后关闭DEP之后,通过memcpy将iso88591内容拷贝进内存并执行


11111
微信搜索关注 "安全族" 长期致力于安全研究


下方扫一下扫,即可关注

[漏洞分析]CVE-2010-2883之PDF漏洞




本文始发于微信公众号(安全族):[漏洞分析]CVE-2010-2883之PDF漏洞

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: