一、概述
xmlrpc.php
是wordpress默认就有的一个离线发布模块,我们可以使用诸如windows live writer
之类的软件进行离线发布,在发布的过程中会验证wordpress帐号的密码,不管帐号密码正确失败,都会给予相应的回复。对于攻击者来说,这就是一个漏洞,因为他们知道每一次尝试登陆的结果,于是就可以无限制利用这个文件进行暴力密码破解,直到得到一次正确的返回——即尝试到了一个正确的账户密码。
二、攻击示例
默认情况下,xml-rpc
服务是开启的,判断是否开启可以在浏览器输入http://www.域名.cn/xmlrpc.php
,如果返回以下信息则表示该服务处于开启状态:
XML-RPC server accepts POST requests only.
如果功能处于开启状态,我们可以使用Postman
进行模拟攻击,请求文件为xmlrpc.php
,请求类型POST
,请求内容:
<?xml version="1.0" encoding="iso-8859-1"?>
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>admin</value></param>
<param><value>123456</value></param>
</params>
</methodCall>
其中admin
和123456
是模拟登录的账户密码。
把请求发送出去,得到如下响应,很明显的告诉我们账户密码错误:
如果把发送数据的账号和密码信息修改成正确的,就会返回我们的博客基本信息:
利用这个漏洞,黑客很容易就能写个脚本,每秒请求N次,给服务器带来高额负载不说,从安全角度来讲,总有一天博客的账户和密码是会被爆破出来的,然后随之而来的是服务器被黑,网站被植入广告等等。
从nginx的日志信息中也是能发现很多来自这个文件的请求:
三、解决办法
1. 定期修改密码并设置高强度密码
定期修改密码是肯定必要的,而且最好设置高强度密码,可以使用mkpasswd
命令来生成密码,详见:linux使用mkpasswd生成密码
2. 关闭xmlrpc.php文件的访问
如果不需要用到这个功能的话,可以使用这个方法,在nginx中设置一下文件的访问权限。
3. 使用安全插件
可以使用WordFence
或 Login Security Solution
等安全插件来解决。
wordfence太强大了,东西太多了,博客都有点承受不起,所以选了Login Security Solution。
此处评论已关闭