CVE-2010-2883
@TOC
简介
Adobe Reader在处理CoolType字体文件的sing表时,存在栈溢出漏洞,当打开特制的恶意PDF文件时,可允许任意代码远程执行。
环境:
adobe reader 9.3
kali (虚拟机)
winxp(靶机)
漏洞复现
1生成pdf木马文件
1 | msfconsole #进入mfs |
2 Metasploit开启shell监听会话,等待winxp打开pdf
1 | use exploit/multi/handler #回弹一个tcp连接 |
3 xp用adobe reader 9.3打开生成好的pdf
发现卡住,回到kali上,发现已经拿到shell
(这里我用win7做靶机,发现程序会一下子就崩掉,来不及反应,所以可能会拿不到shell)
4后渗透命令
1 | sysinfo #查看系统信息 |
原理分析
用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函数换成一个自定义的函数,函数里面判断了长度
参考链接
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 yaoxixixi's blog!