- 漏洞描述
Adobe Reader的CoolType.dll库在解析字体文件SING表格中的uniqueName项时存在栈溢出漏洞,用户打开了特制的PDF文件可能导致执行任意代码。
- 调试环境
XPSP3 + OD + IDA+Adobe9.2.4
官方文档对TableEntry结构的定义
typedef sturct_SING
{
char tag[4];//"SING"
ULONG checkSum;//校验和
ULONG offset;//相对文件偏移
ULONG length;//数据长度
} TableEntry;
ttf_data[0xec, 4] = "SING"
ttf_data[0x11c, sing.length] = sing
在msf中构造pdf的代码中分析得出。SING数据是在TableEntry的0x11c的位置,SING从真实数据偏移0x10为uniqueName域,从代码上可以看出strcat是将uniqueName复制到栈空间,直至遇到NULL字符串终止符。
以下为溢出代码
覆盖栈中的返回地址
- 漏洞利用原理
Metasploit中针对这一漏洞的攻击模块使用了ROP技术来绕过操作系统中针对溢出攻击的主要保护机制DEP,同时它利用的是Adobe自行加载的dll。所以通用性特别好。再覆盖了上图中的返回地址之之后,会跳转至icucnv36.dll中的地址,利用这个动态库中若干的代码片段来执行ROP。在栈中的返回地址被使用的情况下,程序的执行流程被劫持。
3.1在返回地址处下断点
第一段ROP代码
第一段ROP执行之后的栈
第二段ROP
执行之后。ESP指向已经由堆喷射技术部署在堆区的数据。
接下来,程序将以这块已经部署在堆块中的数据为栈帧,执行接下来的一连串的ROP代码。
主要功能有:生成一个iso88591的驱动文件,随后中间的若干函数将利用这个文件映射给当前进程一块可执行的内存区域,最后将堆中的shellcode复制到该区域执行。
《Metasploit渗透测试指南》《0day》