WordPress 利用 XMLRPC 高效爆破 原理分析

技术 作者:知道创宇 2015-10-10 06:46:56

Author: RickGray (知道创宇404安全实验室)

Date: 2015-10-09

xmlrpc 是 WordPress 中进行远程调用的接口,而使用 xmlrpc 调用接口进行账号爆破在很早之前就被提出并加以利用。近日 SUCURI 发布文章介绍了如何利用 xmlrpc 调用接口中的 system.multicall 来提高爆破效率,使得成千上万次的帐号密码组合尝试能在一次请求完成,极大的压缩请求次数,在一定程度上能够躲避日志的检测。

一、原理分析

WordPress 中关于 xmlrpc 服务的定义代码主要位于 wp-includes/class-IXR.php 和 wp-includes/class-wp-xmlrpc-server.php 中。基类 IXR_Server 中定义了三个内置的调用方法,分别为 system.getCapabilities,system.listMethods 和 system.multicall,其调用映射位于 IXR_Server 基类定义中:

Snip20151010_10

而基类在初始化时,调用 setCallbacks() 绑定了调用映射关系:

Snip20151010_11

再来看看 system.multicall 对应的处理函数:

Snip20151010_12

这样一来,就可以将500种甚至是10000种帐号密码爆破尝试包含在一次请求中,服务端会很快处理完并返回结果,这样极大地提高了爆破的效率,利用多重调用接口压缩了请求次数,10000种帐号密码尝试只会在目标服务器上留下一条访问日志,一定程度上躲避了日志的安全检测。可以从代码中看出,程序会解析请求传递的 XML,遍历多重调用中的每一个接口调用请求,并会将最终有调用的结果合在一起返回给请求端。

通过阅读 WordPress 中 xmlrpc 相关处理的代码,能大量的 xmlrpc 调用都验证了用户名和密码:

Snip20151010_13

通过搜索上述登录验证代码可以得到所有能够用来进行爆破的调用方法列表如下:

Snip20151010_15

这里是用参数传递最少获取信息最直接的 wp.getUsersBlogs 进行测试,将两次帐号密码尝试包含在同一次请求里,构造 XML 请求内容为:

Snip20151010_16

将上面包含两个子调用的 XML 请求发送至 xmlrpc 服务端入口,若目标开启了 xmlrpc 服务会返回类似如下的信息:

Snip20151010_17

从结果中可以看到在同一次请求里面处理了两种帐号密码组合,并以集中形式将结果返回,通过该种方式可以极大地提高帐号爆破效率。

二、防护建议

最新版 WordPress(4.3.1) 中仍存在该问题。多重调用(multicall)属于 xmlrpc 的标准,为了防止攻击者利用此点对网站发起爆破攻击,给出以下防护建议:

  1. 通过配置 Apache、Nginx 等 Web 服务器来限制 xmlrpc.php 文件的访问;
  2. 在不影响站点运行的情况下可以直接删除 xmlrpc.php 文件;
  3. 从官方插件库中安装 Disable XML-RPC 并启用;
  4. 添加代码 add_filter('xmlrpc_enabled', '__return_false');  至 WordPress 配置文件 wp-config.php;

参考链接

https://blog.sucuri.net/2015/10/brute-force-amplification-attacks-against-wordpress-xmlrpc.html https://pop.co/blog/protecting-your-wordpress-blog-from-xmlrpc-brute-force-amplification-attacks/ http://www.deluxeblogtips.com/2013/08/disable-xml-rpc-wordpress.html

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接