WordPress Revslider 插件任意文件上传漏洞与任意文件下载漏洞 (SoakSoak)

来源:scanv2018.05.16

1.简介

2014年12月14日,国外Sucuri安全博客报道了大量的WordPress站点受到SoakSoak恶意软件影响的消息。据报道,该恶意软件会感染的WordPress的源码文件,在里面植入恶意代码。攻击者利用SoakSoak对受感染的站点进行挂马,植入后门等一系列攻击行为。

2.漏洞详情

(1)漏洞描述

据报道,此次SoakSoak恶意软件在大量的WordPress站点中的爆发源于一款名为Revslider的幻灯片插件,该插件曾被爆多个安全漏洞,涉及任意文件下载,任意文件上传等.Revslider由ThemePunch出品,属于一款商业性插件(收费),因其具有强大的功能和良好的易用性而有着不错的销量,并且在ThemePunch出品的一些WordPress的主题中也自带有该款插件。

攻击者可能利用了该插件的任意文件下载漏洞获取了大量的WordPress的的WP-config.php的配置文件,并通过任意文件上传漏洞上传webshel​​l了对WordPress的的源码文件进行修改并插入了恶意代码。结合报道文章中所提到的,攻击者应该是通过修改了WordPress中“/wp-content/template-loader.php”的源代码,使得在访问受感染WordPress站点的页面的同时远程加载了soaksoak.ru上的一段JavaScript的脚本。攻击者通过该段的JavaScript脚本来对特定的浏览器进行攻击。

(2)漏洞分析

Revslider插件(插件链接:http : //codecanyon.net/item/slider-revolution-responsive-wordpress-plugin/2751380)任意文件上传漏洞与任意文件下载漏洞简要分析。

(3)任意文件上传漏洞

因Revslider插件属于收费插件,下面是对版本号为3.0.3的分析和测试结果。

任意文件上传漏洞源于该插件自带的“插件更新”“功能,在启用该插件的同时会将一系列的动作操作都注册到WordPress的ajax请求里。并且插件在接受更新请求后并没有判断用户权限,导致恶意者可利用该点进行攻击
所涉及文件:/revslider_admin.php

该插件在启用时,会将ajax_action参数与函数onAjaxAction()进行绑定,当通过/wp-admin/admin-ajax.php向插件传递参数时会调用onAjaxAction()。

onAjaxAction()函数关键部分如下:

当post参数$ client_action为“update_plugin”时,会调用updatePlugin()开始升级插件。

updatePlugin()函数位于/inc_php/framework/base_admin.class.php中。

所涉及文件:/inc_php/framework/base_admin.class.php

简要分析一下文件上传漏洞形成的过程首先该函数(updatePlugin())获取了交过来的文件的信息:

$ arrFiles = UniteFunctionsRev :: getVal($ _ FILES,“update_file”);

随后会获取上传文件的文件名,MIME类型(插件将MIME类型的检测代码注释掉了)。

然后获取了上传文件的临时路径和创建目录“/ temp / update_extract”(目录创建失败会抛出异常并中止处理):

如果“/ temp / update_extract”创建成功,会清理该目录下的所有文件,然后将上传的文件移动至该目录下:

这里很明显,没有对上传文件做限制,直接使用move_uploaded_file()将上传文件(任意)拷贝到了“/ temp / update_extract /”目录下,后续的处理都不用再分析。

本地构造如下表单:

其中TEMP.TXT内容为:

测试文件上传

然后点击上传:

这里可以看到,回显提示“更新错误”,但是根据刚才的分析,上传的文件其实已经通过move_uploaded_file()拷贝到了“/ temp / update_extract /”目录下。

(4)任意文件下载漏洞

该插件在启用后,提供了一个show_image的功能,可以通过WordPress的的AJAX调用来使用该功能,但在该功能实现的过程中考虑不全导致了任意文件下载,使得攻击者能通过该漏洞下载到WordPress的的配置文件的wp-config.php文件,获得数据库连接信息等敏感数据。

所涉及文件:/inc_php/framework/base_admin.class.php

在函数原型位于“/inc_php/framework/base.class.php”中。这个函数将在onShowImage()函数中使用,其中onShowImage()函数原型位于“/inc_php/framework/base.class.php”中。

所涉及文件:/inc_php/framework/base.class.php

可以看到在onShowImage()函数中,实例化了UniteImageViewRev类,并调用了该类的showImageFromGet()方法。
 
所涉及文件:/inc_php/framework/image_view.class.php
 
 
showImageFromGet()函数从“GET”请求里获取参数“img”的值赋值给变量:
$ imageFilename = UniteFunctionsRev :: getGetVar(“img”);

然后注意$效果这个变量:
$ effect = UniteFunctionsRev :: getGetVar(“e”);
在函数最后调用showImage()方法,showImage()函数部分关键代码如下:
 
其中$ this-> pathImage的值在一开始的时候被赋值为了WordPress“wp-content”所在的物理路径(例如:C:\ xxxx \ www \ wordpress \ wp-content \),然后通过将$ this- > pathImage与传进来的文件名$ filename进行连接赋值给$ filepath:
$ filepath = $ this-> pathImages。$ filename;

并且$ this-> effect,$ maxWidth和$ maxHeight都可以从“GET”请求参数中获取,所以可以构造一个有效载荷,使得函数流程执行到$ this-> outputImage($ filepath)来读取文件.outputImage ()函数如下:
 
outputImage()函数直接通过两个操作就将文件内容输出:
$ contents = file_get_contents($ filepath);
echo $ contents;
并且在这个过程中没有任何的过滤,因此作为测试可以构造如下payload:
 
(5)漏洞追踪
知道创宇安全研究团队针对Revslider插件的任意文件上传漏洞写出了的PoC,并从ZoomEye上抽取了一部分含有Revslider插件指纹的WordPress的站点进行测试。比较遗憾的是,测试结果显示所有的测试站点都不能成功验证该漏洞。
但是,我们在扫描测试的过程中,意外的发现了疑似攻击者通过任意文件上传漏洞留下的后门(后门地址:http:// wpsite / wp-content / plugins / revslider / temp / update_extract / temp。 PHP)。
 
攻击者植入后门后,修改了文件上传漏洞所涉及目录的写权限,封堵了该漏洞。攻击者的技术和经验,于此可见一斑。

(6)temp.php后门分析
虽然攻击者通过修改目录权限封堵了Revslider插件的任意文件上传漏洞,但是我们通过该插件的任意文件下载漏洞成功得到攻击者所上传的木马后门(后门)并进行了分析。
 
 
对混淆后的webshel​​l了解码后,得到了类似c99.php(国外比较流行的一款的webshel​​l)的后门代码。
 
虽然攻击者留下的webshel​​l了我们成功的拿到了源码,但是网络木马后门的密码散列并没有成功地破解出来。(针对该后门我们会进行持续的跟踪和调查)
(7)SoakSoak
2014年12月16日,国外发布了关于SoakSoak恶意软件Payload分析的一篇要文(http://blog.sucuri.net/2014/12/soaksoak-payload-analysis-evolution-of-compromised-sites- ie-11.html)加入JavaScript代码旨在通过Firefox和IE11的0day攻击那些浏览受染WordPress站点的浏览器,猜测攻击者是为了获取更多的肉鸡来进行下一步行动。
 
首先攻击者会修改站点WP-包括/模板loader.php文件,插入恶意代码:
 
这样在浏览受感染站点的任何一个页面时,都会加载位于站点“wp-includes / js /”目录下的swfobject.js JavaScript文件。

下面是从网络上得到的受感染站点中被注入恶意代码的WP-包括/ JS / swfobject.js文件样本:
 
 
其中第6行为编码后的JavaScript的代码,将其解码得到:
 
 
从上述代码中可以看出,攻击者将SoakSoak感染某站点后,浏览该站点的任何页面都会加载并执行一段恶意的JavaScript的代码,随后恶意代码又加载了同站点下的一个闪存文件(该文件原本不存在),恶意flash文件路径为“wp-contents / js / swfobject.swf”,下面是找到的swfobject.swf文件的样本,其代码反编译后如下(部分):
 
当浏览者使用火狐或者IE浏览器浏览受感染站点时,一旦该恶意闪存文件被加载,就会去执行又一段恶意的代码。

通过ExternalInterface.call()函数执行的代码经过UrlDecode解码后为:
 
上述恶意代码又会尝试去加载“http://milaprostaya.ru/images/”上的内容,怀疑攻击者会在后续的操作中攻击浏览者的浏览器将其变为自己的肉鸡,更严重的可能会形成一个僵尸网络来进行下一步的攻击。但我们在追中和分析的过程中,直接访问“http://milaprostaya.ru/images/”并没有获得比较有用的信息:
 
http://milaprostaya.ru上搭载了一个WordPress个人博客,WordPress博客系统并不自带有“/ images”路径。(针对该SoakSoak恶意软件,知道创宇安全团队会持续地进行追踪)
 
(加速乐云防御平台可以很好地拦截利用Revslider插件漏洞进行攻击的行为,并且能够成功地防御此次恶意的JavaScript代码的攻击)
(8)ZoomEye检测报告
来自知道创宇的ZoomEye团队(钟馗之眼网络空间探知系统)针对此次漏洞,通过几种方式的检测,得到了如下这些数据。
2014/12/17
从ZoomEye中随机从10万WordPress站点中抽取了含有Revslider插件指纹的WordPress站点5646个进行后门检测扫描,得到的结果如下:
Revslider插件含有率为:5.64%。
总共扫描5646个含有Revslider插件指纹的WordPress的站点,其中检测出含有疑似后门的站点有537个,验证成功率9.51%。
可以看到在这5000多个测试的站点中,检测出存在同一后门的站点就有537个,这个数据并不能小视,因为这还只是针对后门检测所得到的结果,还不包括那些被攻击者攻陷并植入其他后门的站点。这样看来,10万点的WordPress受SoakSoak影响还一点都不夸张。
如果拿ZoomEye约270万的WordPress的站点数来进行估算,被植入该后门的WordPress的站点就有约14500个,这个数量已经非常多了。
 
(9)相关资源链接
知道创宇官网:http://www.knownsec.com/知道创宇旗下 - ZoomEye官网:http ://www.zoomeye.org/
知道创宇旗下 - 加速乐云防御平台官网:http:// www .jiasule.com /
 
 
 

 

 

 

热门文章

关注知道创宇云安全

获取安全动态