起因
最近在查看站点 【访问日志】
的时候,发现有大量的 POST
请求到 /xmlrpc.php
页面。
从请求的IP :52.186.155.64 以及请求的次数来判断,应该是一个恶意自动程序。
通过不断的POST事先构造好的代码,来爆破Wordpress的管理密码。
xmlrpc.php 原本是Wordpress 程序留给手机APP用的一个API页面。被攻击者用来爆破后台管理密码。
这里先不讨论如何防护,也先不讨论它是否能爆破成功。我先顺着这个IP找到最早的几条访问记录。
【第1、2条】
请求:自动攻击程序,首先使用了两次GET 请求来访问我网站的首页。
作用:目测是用来判断,这个站点是否在线。
【第3条】
请求:自动攻击程序构造了 https://域名//wp-includes/wlwmanifest.xml
的URL进行GET
作用:目测是用来判断你是否使用了Wordpress程序。
【第4-6条】
请求:构造了 //?author=1 //?author=2 //?author=3
作用:目测是通过用户ID ,来确定你的管理员用户名!
【第7条】
请求:构造了 https://域名//wp-json/wp/v2/users/
的URL进行GET
作用:用以再次确认你的管理员用户名是否正确!
【第8条】
请求:构造了 //wp-json/oembed/1.0/embed?url=xxx
的URL进行GET
作用:猜测应该是旧版本Wordpress的一个 CVE-2017-6514
的漏洞
通过以上8条请求,自动攻击程序就已经获得了你的【管理员用户名】
从而通过构造POST请求来不断的爆破你的/xmlrpc.php页面。来猜解你的密码。
当然爆破的成功率肯定是极小的。因为稍微注意Wordpress 安全的小伙伴早已把登陆页面隐藏了。或者直接禁用了xmlrpc.php页面。
不过没有安全加固的默认状态下,被攻击者拿到了管理员用户名还是很不爽的。
各位小伙伴可以通过以上URL测试一下自己的Wordpress站点。看看是不是可以拿到敏感信息。
http://你的域名/wp-includes/wlwmanifest.xml
http://你的域名/wp-json/wp/v2/users/
解决方案
在当前主题目录的 functions.php
文件里添加以下代码:
// 在账号未登录时禁用wp-json/wp/v2/,防止泄露信息
add_filter( 'rest_authentication_errors', function( $result ) {
if ( ! empty( $result ) ) {
return $result;
} if ( ! is_user_logged_in() ) {
return new WP_Error( 'Access denied', 'You have no permission to handle it.', array( 'status' => 401 ) );
} return $result;
});