GhostScript命令执行漏洞
0x00 前言
今天早上 http://seclists.org/oss-sec/2018/q3/142 曝出了这个imageMagick的漏洞,然后下午从朋友那里听说了,这个漏洞影响范围极广,有缩略图功能的各种网站都有机会中招。当时看着大佬们在百度、新浪等各大厂商的src提交漏洞报告薅赏金的时候,自己也想尝试尝试,奈何手边没有电脑,只能等到晚上回来复现。
0x01 漏洞原理
GhostScript插件被许多图片处理库如 ImageMagick、Python PIL 等所使用,默认情况下这些库会根据图片的内容将其分发给不同的处理方法,其中就包括GhostScript。
而GhostScript的安全沙箱可以通过构造恶意代码绕过,当我们构造恶意代码并重命名成图片的格式,上传至目标服务器时,目标服务器的图像处理模块(为了完成如头像缩略图等功能)就会触发构造的恶意代码,造成远程代码执行。
也正是因为使用这些图像处理模块的网站十分多,所以漏洞影响范围极大,对于我们学生党来说,是个刷SRC赚点零花钱的好机会。
0x02 漏洞复现
作者给出的测试poc有两种,分别针对centos和ubuntu:
For Ubuntu
1 |
|
将这样一张图片上传后,经过GhostScript就会触发id命令
我们在本地可以通过imageMagick的图像压缩功能测试一下,首先安装imageMagick
1 |
|
然后使用convert命令压缩图片触发命令:
1 |
|
显示如下信息说明测试成功:
1 |
|
For CentOS
1 |
|
centos中除了payload不同以外,其他过程都相同,不过安装imageMagicK需要使用
1 |
|
0x03 漏洞利用
这两种linux系统中都可以验证漏洞存在了,那么我们该如何利用它呢?
虽然我们每次直接改id再上传使服务器执行命令也可以,但是未免太过麻烦,想要方便的控制肯定是得反弹一个shell,我这里提供两种方法:
netcat
第一种是反弹一个netcat的连接,因为大部分的linux都会自带nc,我们只需要将id命令改成反弹一个nc到我们监听的服务器和端口即可:
1 |
|
只要将恶意代码中xxx.xxx.xxx.xxx改为自己的ip,将1234改为自己监听的端口就可以使用了。
python shell
当然也不排除一些服务器没有nc,这种时候就用第二种方法:反弹一个python shell,linux中基本都是装了python的
python版本的shell编写可以参考我前面的博客
我这里也给出一个直接可以利用的payload:
1 |
|
上述两种方法都还需要我们在自己远程监听的服务器上打开一个nc的监听:
1 |
|
然后上传图片,如果攻击成功就可以得到shell:
0x04 应对
暂时官方没有补丁,可以参考长亭安全团队给出的临时解决方案:
1.卸载 GhostScript
以 Ubuntu 系统为例,执行以下命令以卸载 GhostScript:
sudo apt-get remove ghostscript2.修改 ImageMagick 的 policy 文件,默认位置为 /etc/ImageMagick/policy.xml,在
中加入以下 (即禁用 PS、EPS、PDF、XPS coders): 1
2
3
4
5
6<policymap>
<policy domain="coder" rights="none" pattern="PS" />
<policy domain="coder" rights="none" pattern="EPS" />
<policy domain="coder" rights="none" pattern="PDF" />
<policy domain="coder" rights="none" pattern="XPS" />
</policymap>
不过很快官方补丁就会给出,那时就可以直接更新imageMagicK
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!