一个DoS漏洞可拿下WordPress站点? - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

一个DoS漏洞可拿下WordPress站点?

ang010ela web安全 2018-02-07 15:12:50
198113
收藏

导语:WordPress CMS平台上发现一个简单但很严重的应用级DoS漏洞,攻击者利用该漏洞可以用很小的带宽来达到网络级DDoS攻击的效果,达到拿下WordPress站点的目的。

简介

WordPress CMS平台上发现一个简单但很严重的应用级DoS漏洞,攻击者利用该漏洞可以用很小的带宽来达到网络级DDoS攻击的效果,达到拿下WordPress站点的目的。

漏洞编号CVE-2018-6389,影响过去9年发布的所有WordPress版本,包括最新的WordPress稳定版Version 4.9.2。但厂商拒绝修复该漏洞。

以色列的安全研究人员Barak Tawily发现该漏洞位于load-scripts.php文件处,load-scripts.php是WordPress CMS的内置脚本,用来处理用户定义的请求。

对于那些不了解的开发者,load-scripts.php文件是admin用户来改善网站性能和加快加载速度的,使用的方法是把多个JS文件融入到一个单独请求中。

为了让load-scripts.php在admin登录前就工作在管理登录页面(wp-login.php),WordPress作者并没有保持任何的认证,这就导致了该页面可以被任何人访问。

Wordpress DoS攻击

依靠已安装的插件和模块,load-scripts.php文件可以通过传递name到load参数来选择性的调用必须的JS文件,这些name是以“,”隔开的,就像下面的链接:

https://your-wordpress-site.com/wp-admin/load-scripts.php?c=1&load=editor,common,user-profile,media-widgets,media-gallery

当网站加载时,load-scripts.php会根据URL中的每个name去寻找对应的JS文件,并把其中的内容添加到一个单独的文件,然后发送回用户的web浏览器。

WordPress DoS攻击原理

研究人员说,攻击者可以通过把所有的参数传递给上面的URL来让load-scripts.php来调用所有可能的JS文件,通过消耗更多的CPU和服务器内存来让目标网站运行变慢。

用户可以用预先定义好的列表($wp_scripts)来发送请求,而这是load[]参数的一部分。如果请求的值存在,服务器会用从用户那里获取的补充值相关的预定义的路径来执行I/O读操作。

虽然访客不能用一个简单的请求来拿下整个网站,但是研究人员用一个Python POC脚本(doser.py)来向相同的URL发起大量的并发请求,这会大量消耗目标服务器的CPU资源并让服务器宕机。

Hacker News验证了DOS漏洞利用的真实性,成功地拿下了中等VPS服务器上运行的demo WordPress站点。这再次证明了load-scripts.php不需要任何的认证,匿名用户也可以进行上述操作。当服务器的请求达到500左右的时候,服务器就不再响应了,返回502/503/504错误。但是来自一个机器的40Mbps的连接是不足以让运行在处理能力和内存比较高配的服务器上的demo WordPress站点宕机的。

有更大带宽和僵尸主机的攻击者可以利用该漏洞来攻击更大、更主流的WordPress站点。

补丁?

截止目前,还没有补丁发布。该漏洞大概影响29%的web站点,将上百万的网站至于黑客的面前,同时会让合法的用户得不到正常的服务。对于那些不能提供预防应用层攻击的DDOS保护的网站,研究人员做了一个WordPress站点的副本,可以预防此类漏洞。

研究人员建议用户不要安装此类修改过的CMS,即使这种CMS的来源是可信的。研究人员也发布了bash脚本来修复该漏洞。

if [[ -f wp-login.php &&-f wp-admin/load-scripts.php &&-f wp-admin/includes/noop.php ]]
then
sed -i "1 s/^.*$/<?php\ndefine('CONCATENATE_SCRIPTS', false);/" wp-login.php
sed -i -e "s/^require( ABSPATH . WPINC . '\/script-loader.php' );$/require( ABSPATH . 'wp-admin\/admin.php' );/g" wp-admin/load-scripts.php
sed -i -e "s/^require( ABSPATH . WPINC . '\/script-loader.php' );$/require( ABSPATH . 'wp-admin\/admin.php' );/g" wp-admin/load-styles.php
echo"""<?php
/**
* Noop functions for load-scripts.php and load-styles.php.
*
* @package WordPress
* @subpackage Administration
* @since 4.4.0
*/
function get_file( \$path ) {
       if ( function_exists('realpath') ) {
               \$path = realpath( \$path );
       }
       if ( ! \$path || ! @is_file( \$path ) ) {
               return '';
       }
       return @file_get_contents( \$path );    
}"""> wp-admin/includes/noop.php
echo'Successfuly patched.'
else
echo'Please run this file from WordPress root directory.'
fi

附POC视频

  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务