昨天收到了腾讯eo的警告邮件说是,站点被攻击了,我以为是我又被打了,赶紧上线一看,发现攻击者命中了腾讯eo的托管规则,规则的大致内容是,防护wordpress中,使用/xmlrpc.php进行的恶意攻击。

截图如下:

可以发现,攻击者在短短半个小时内通过 xmlrpc.php 这个文件的漏洞,爆破了我站点一千多次,我们再看一下他具体干了什么

//仅展示请求正文前 10KB 数据
            <?xml version="1.0" encoding="iso-8859-1"?>
            <methodCall>
              <methodName>wp.getUsersBlogs</methodName>
              <params>
               <param><value>miui</value></param>
               <param><value>0987654321</value></param>
              </params>
            </methodCall>

可以发现他是在爆破我的后台密码,好在我的密码比较的复杂,从日志上来看应该是没有成功,就被我给发现了,然后我就禁用请求了这个文件,那么这个文件究竟是干什么的,禁用他是否会导致其他问题呢。

什么是 xmlrpc.php?

XML-RPC是支持WordPress与其他系统之间通信的规范。它通过使用HTTP作为传输机制和XML作为编码机制来标准化这些通信来实现此目的。

XML-RPC早于WordPress:它出现在b2博客软件中,该软件于2003年创建了WordPress。该系统的代码存储在站点根目录下的xmlrpc.php文件中。即使XML-RPC在很大程度上已经过时,它仍然存在。

在WordPress的早期版本中,默认情况下已关闭XML-RPC。但是从3.5版开始,默认情况下已启用它。这样做的主要原因是允许WordPress移动应用程序与您的WordPress安装进行对话。

如果您在3.5版之前使用WordPress移动应用程序,您可能会记得必须在站点上启用XML-RPC才能使该应用程序能够发布内容。这是因为该应用程序本身未运行WordPress。相反,它是一个单独的应用程序,使用xmlrpc.php与您的WordPress网站进行通信。

但是XML-RPC不仅用于移动应用程序:它还用于允许WordPress和其他博客平台之间进行通信,还支持引用和pingback,并为Jetpack插件提供了动力,该插件可链接自托管的WordPress WordPress.com网站。

但是由于REST API已集成到WordPress核心中,因此xmlrpc.php文件不再用于此通信。相反,REST API用于与WordPress移动应用程序,台式机客户端,其他博客平台,WordPress.com(用于Jetpack插件)以及其他系统和服务进行通信。的系统的REST API可与之交互的范围是大得多比xmlrpc.php允许的一个。此外,还有更多的灵活性。

由于REST API取代了XML-RPC,因此您现在应该在站点上禁用xmlrpc.php。让我们看看为什么。

为什么要禁用 xmlrpc.php

您应该在WordPress网站上禁用xmlrpc.php的主要原因是因为它引入了安全漏洞, 并且可能成为攻击的目标。

既然不再需要XML-RPC在WordPress之外进行通信,就没有理由保持它的活动状态。这就是为什么通过禁用站点来提高其安全性是明智的。

重要

如果xmlrpc.php是安全责任,并且不再起作用,那么为什么不将其从WordPress中完全删除呢?

这是因为WordPress的主要功能之一始终是向后兼容。如果您对网站进行了良好的管理,您将知道保持WordPress最新以及任何插件或主题是必不可少的。

但是总会有一些网站所有者不愿意或无法更新其WordPress版本。如果他们运行的版本早于REST API,则他们仍然需要访问xmlrpc.php。

让我们更详细地查看特定的漏洞。

通过XML-RPC Pingbacks进行DDoS攻击

xmlrpc.php启用的功能之一是pingback和Trackbacks。这些是当另一个博客或网站链接到您的内容时在您网站的注释中显示的通知。

XML-RPC规范使这种通信成为可能,但是它已被REST API取代(如我们所见)。

如果在您的站点上启用了XML-RPC,则黑客可能会利用xmlrpc.php在短时间内向您的站点发送大量pingback,从而在您的站点上发起DDoS攻击。这可能会使服务器超载,并使站点无法正常运行。

通过XML-RPC的蛮力攻击

每次xmlrpc.php发出请求时,它都会发送用户名和密码进行身份验证。这带来了重大的安全责任,而REST API却没有做到这一点。实际上,REST API使用OAuth来发送令牌进行身份验证,而不是用户名或密码。

因为xmlrpc.php随每个请求发送身份验证信息,所以黑客可以使用它来尝试访问您的站点。这样的暴力攻击可能使他们可以插入内容,删除代码或破坏数据库。

如果攻击者向您的站点发送了足够多的请求,每个请求使用不同的用户名和密码对,则他们最终有可能会命中正确的请求,从而使他们可以访问您的站点。

因此,如果您正在运行WordPress的最新版本(使用REST API与外部系统通信),则应禁用xmlrpc.php。不需要它,这可能会使您的网站易受攻击。

如何检查 xmlrpc.php 是否还在WordPress网站上运行?

您需要做的第一件事是确定xmlrpc.php是否正在您的WordPress网站上运行。

这不是检查文件是否存在的简单情况:它是每个WordPress安装的一部分,即使XML-RPC被禁用,该文件也将存在。

删除任何内容之前,请务必备份您的网站。在这种情况下,不要仅仅删除xmlrpc.php文件,因为它会破坏您的站点。

最简单的方法是,直接访问你的站点加/xmlrpc.php,比如本站 https://miui.ink/xmlrpc.php 访问后会提示该请求已经被拦截了,如果你没有禁用这个文件,则会提示该请求仅支持 POST 方式请求。

如何禁用xmlrpc.php

如果你的网站出现了“存在服务端请求伪造(SSRF)漏洞”问题,或者其他类似的网站安全问题,那您可能需要禁用你网站上的xmlrpc.php。禁用xmlrpc.php的方法有几种,可以通过安装插件来实现,也可以通过调整服务器配置来实现。下面就进行详细的接收。

使用插件禁用xmlrpc.php

安装插件以禁用xmlrpc.php是最简单的方法。实现这些禁用XML-RPC插件将完全禁用它。相关插件如下:

Disable XML-RPC:此插件可在运行3.5或更高版本的WordPress网站上运行。 在版本3.5或更高版本上运行的WordPress网站,默认情况下启用xmlrpc。 此外,删除了启用和禁用xmlrpc的选项。 所有者可能有许多原因要禁用该功能。 使用此插件,可以轻松完成。

Remove & Disable XML-RPC Pingback 禁用带有插件的XML-RPC Pingbacks;您不必成为pingback拒绝服务攻击的受害者。 激活插件后,将自动禁用xml-rpc。 这个插件最好的地方是,您无需进行任何配置。 禁用xmlrpc pingback时,将可以减少服务器CPU使用率。

REST XML-RPC Data Checker使用该插件配置XML-RPC和REST API激活

如果要对站点上的xmlrpc.php和REST API的配置方式进行更细粒度的控制,可以安装REST XML-RPC Data Checker插件

安装并激活此插件后,转到“设置”>“ REST XML-RPC数据检查器”,然后单击“ XML-RPC”选项卡。

这使您可以准确配置xmlrpc.php的哪些方面在您的站点上处于活动状态。另外,您也可以将其完全关闭。并且,如果您还想控制REST API,则该插件会为您提供另一个选项卡。

无插件禁用xmlrpc.php

如果您不想在自己的网站上安装其他插件,则可以通过在过滤器中或 .htaccess 文件中添加一些代码来禁用xmlrpc.php 。让我们看看这两种方法。

方法1:通过过滤器禁用xmlrpc.php

这里的一个选项是使用xmlrpc_enabled过滤器禁用xmlrpc.php。将此功能添加到插件并在您的站点上激活它:

add_filter( 'xmlrpc_enabled', '__return_false' );

您可以将其添加到主题的 functions.php 文件中。

方法2:通过服务器配置来实现禁用xmlrpc.php

Apache 服务器通过 .htacess 文件禁用xmlrpc.php

在您的.htaccess文件中,添加以下代码:

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

这样做之前,请确保对旧文件进行备份,以防万一遇到任何问题。

Nginx 服务器通过将下面的代码段添加到 Nginx.config 文件中实现

location ~* ^/xmlrpc.php$ {
return 403;
}

或者

location = /xmlrpc.php {
          deny all;
          access_log off;
          log_not_found off;
}

您何时需要启用xmlrpc.php?

在某些情况下,您确实需要在WordPress网站上启用xmlrpc.php,或者您不应该完全禁用它。

这些是:

  • 您没有运行REST API(不建议使用,但在某些情况下是必需的),但需要在WordPress网站和其他系统之间进行通信。
  • 您无法将WordPress更新到版本4.4或更高版本,因此无权访问REST API。这可能是由于您的托管设置受到限制(在这种情况下,我将更改托管提供商)或主题或插件不兼容(在这种情况下,我将替换或更新这些内容)。
  • 您正在使用无法访问WP REST API但可以访问XML-RPC的外部应用程序(从长远来看,我建议您更新该应用程序或切换到REST兼容的应用程序)。

然而这些都不是保持XML-RPC规范打开的特别好的理由。

扩展

XML-RPC规范是在WordPress创建之前就开发的,它是WordPress与外部系统和应用程序进行通信的一种手段。它具有固有的安全漏洞,可能使您的站点容易受到攻击。

现在,REST API允许您的站点与其他应用程序通信,您可以安全地禁用xmlrpc.php。如果您按照上述步骤操作,则可以通过禁用它来提高网站的安全性。

声明

本文部分内容转载自 WPYOU.com