最近遇到了大规模的针对wordpress
后台暴力破解,验证码好像也没有什么用。经过了解发现是WordPress
的XMLRPC
的接口问题。
XML-RPC
是 WordPress
用于第三方客户端(如 WordPress iPhone
和安卓客户端,Windows Live Writer
等)的 API
接口,还可以用于 pingbacks
和 trackbacks
端口,作为站点之间的通讯桥梁。
攻击方式
这种利用xmlrpc.php
的攻击可以绕过限制。攻击的方式直接POST
以下数据到xmlrpc.php
<?xml version="1.0" encoding="iso-8859-1"?>
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>帐户名</value></param>
<param><value>密码</value></param>
</params>
</methodCall>
关于getUsersBlogs接口的更多信息可以参考官方的指南。 账户/密码错误返回为403
.
关闭XML-RPC (pingback) 的功能
只需要在当前主题functions
文件中添加以下代码即可关闭XML-RPC
功能即可。
add_filter('xmlrpc_enabled', '__return_false');
禁用之后再进行调用将返回如下信息:
如果仅仅想关闭XML-RPC
的pingback
端口,而不影响第三方离线发表功能,在当前主题functions
文件中添加以下代码:
/**
* WordPress 关闭 XML-RPC 的 pingback 端口
*/
add_filter( 'xmlrpc_methods', 'remove_xmlrpc_pingback_ping' );
function remove_xmlrpc_pingback_ping( $methods ) {
unset( $methods['pingback.ping'] );
return $methods;
}
Apache服务器
使用 .htaccess屏蔽xmlrpc.php
# protect xmlrpc
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>
如果需要考虑authz_core_module
模块的使用,可以使用以下规则。
<Files xmlrpc.php>
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
</IfModule>
</Files>
Nginx服务器
location ~* /xmlrpc.php {
deny all;
}
其他解决方法
- 安装Login Security Solution
- 删除xmlrpc.php文件
转载请注明:清风亦平凡 » WordPress禁用xmlrpc.php接口