WordPress XML-RPC接口的风险解读及解决方案

WordPress通过内置的API调用XML-RPC接口,方便用户通过客户端来管理站点,比如通过邮件发布日志、与其他博客平台通信等。正是如此好用的功能,往往被黑客用来绕过暴力破解限制,尝试猜测用户账号、扫描主机端口等。

风险解读

爆破账号

通过已收集的用户名username和尝试密码password,可以构造如下POST请求至xmlrpc.php:

<?xml version="1.0" encoding="iso-8859-1"?>

<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>username</value></param>
<param><value>password</value></param>
</params>
</methodCall>

如果爆破失败,会返回403错误,如果不幸:

扫描端口

通过Pingback可以实现服务器端请求伪造SSRF和远程端口扫描:

POST /wordpress/xmlrpc.php HTTP/1.1
Host: www.example.com
Content-Length: 99

<methodCall>
<methodName>pingback.ping</methodName>
<params>
<param><value><string>IP&PORT:http://127.0.0.1:80</string></value></param>
<param><value><string>URL:http://localhost/wordpress/?page=100</string></value></param>
</params>
</methodCall>

若返回包中的<value><int>中的值大于0,则表示IP和PORT存在。

读取文件

<?xml version="1.0" encoding="utf-8" ?>

<methodCall>
<methodName>pingback.ping</methodName>
<params>
<param><value><string>file:///path/file/name</value></param>
<param><value><string>http://localhost/wordpress/?page=100</string></value></param>
</params>
</methodCall>

解决方案

方案1:禁用Wordpress的pingback接口

修改主题的functions.php文件,加入以下代码:

add_filter( 'xmlrpc_methods', 'remove_xmlrpc_pingback_ping' );
  function remove_xmlrpc_pingback_ping( $methods ) {
  unset( $methods['pingback.ping'] );
  return $methods;
}

方案2:禁用Wordpress的xmlrpc功能

修改主题的functions.php文件,加入以下代码:

add_filter('xmlrpc_enabled', '__return_false');

方案3:禁止外域访问xmlrpc.php文件

Nginx修改站点的.conf配置:

location = /xmlrpc.php {
  allow 10.10.200.200;
  deny  all;
}
# 另一种方式
#location ~* ^/xmlrpc.php$ {
#  return 403;
#}

Apache修改站点目录中的.htaccess文件:

<Files xmlrpc.php>
  Order Deny,Allow
  Deny from all
</Files>

原创文章禁止转载:技术学堂 » WordPress XML-RPC接口的风险解读及解决方案

精彩评论

2+1=

感谢您的支持与鼓励

支付宝扫一扫打赏

微信扫一扫打赏