0X00: 漏洞描述
CVE-2010-2883是Adobe Reader和Acrobat中的CoolType.dll库在解析字体文件SING表中的uniqueName项时存在的栈溢出漏洞, 用户受骗打开了特制的PDF文件就有可能导致执行任意代码。
0X01: 分析环境
操作系统:Windows XP SP3
调试器:OllyDbg
反汇编器:IDA Pro
漏洞软件:Adobe Reader
0X02:基本信息
漏洞存在于Adobe Reader 8.2.4到9.3.4之间的版本,在CoolType.dll库中处理字体文件SING( Smart INdependent Glyplets)表中uniqueName项时存在栈溢出漏洞。
我们用IDA打开CoolType.dll,找到漏洞位置
我们可以看到strcat对字符串长度并没有进行判断,可以产生栈溢出
接下来对PDF文件进行分析
用PdfStreamDumper打开样本文件 然后将下列字段保存下来为TTF文件
接下来看看TableEntry结构的定义:
则偏移0x11c处就是SING表的真实数据 接着再偏移0x10即可找到uniqueName域 即:
首先用OD打开Adobe Reader软件 并给0x803DCA4处下断点(就是strcat函数处)
接下来打开msf.pdf
运行后就可以到达断点位置 栈分布如图:
我们跳转到0x12E4D8处并设置内存断点 并运行 访问数据会停下来
运行多次之后返回用户空间
F8单步运行到程序可能结束的call函数 一直运行步入
逐步运行就会看到下一步要跳转到0x4A80CB38(ROP链)
最终跳转到ROP链位置
继续执行到0x4A82A714
我们查看数据窗口的内容
程序继续执行 可以看出数据是Heap Spary
继续ROP 依次调用CreateFileA、CreateFileMappingA、MapViewOfFile,在内存中开辟一块可读可写可执行的地址。
再调用memcpy,将shellcode拷贝到新的内存空间中去。
一直将程序运行到ESP是4A8063A5 EIP将跳转执行
0X03: 经验总结
第一次复现漏洞 发现了实际漏洞跟pwn的一些差别 可能是栈的原因 在IDA和配合OD的情况下觉得还不是那么大 挺好看出来的 跟着书上一步步来 利用ROP执行shellcode实现任意代码执行 在ctfwiki上也学到一些 不过跟实际漏洞还是差别蛮大的 要是自己单独去发现这些还是满困难的 道祖且长 慢慢来