从一次网站沦陷学习WordPress的攻击面

这是红队的第四篇文章,本文与之前不同,从一次国外黑客势力入侵WordPress入手,学习他们是如何攻击进来的,在打进来后又做了哪些操作。最后,学习这些利用姿势,以后遇到WordPress说不定这么打也能进去并Getshell!

Hacker是如何打进来的

由于是宝塔搭建的,直接看日志就完事了。首先,根据学长发来的腾讯云通知时间,我定位到了相关的时间点的操作:

一下就发现了:

可以明显的看到,首先攻击者登陆了WordPress,之后利用wp-admin/update.php?action=upload-theme去上传了个theme(Wordpress可以利用修改/上传模板来Getshell)

那么现在的问题是,怎么登录的?

于是,我们继续向上回溯,发现了一件很猛的事:

他这边一直在POST xmlrpc这个文件,并且可以发现,有一次请求是717,其余的 是426

实际上这是WordPress的一个小问题,可以利用该页面来爆破账户

具体利用如下:

如果成功,会出现:

那么现在就出现大问题了,网站用户名和密码怎么得到的?

网站用户名可以使用以下接口来获取:

获取的数据长这样,则admin就是用户名

注意:可能会出现name与slug后面不一样的情况,这是因为网站管理员改过名

并且sulg那里如果你的username是带有特殊符号的,可能会把特殊符号删掉。比如:

admin@test.com这个username,在这里的显示就是:admintestcom

而Hacker也是查询了该接口:

当然,我们受害人也把用户名写在了页面上(邮箱地址)

由于隐私保护,原图片已经删除

1.利用接口/wp-json/wp/v2/users/获取username(或是从网站上获取的)

2.利用xmlrpc.php进行无限次数的口令爆破

3.爆破成功后POST该地址,获取到COOKIE

4.携带COOKIE访问wp-admin/update.php?action=upload-theme并上传恶意的主题

5.访问 wp-content/themes/skeleton-reworked/404.php来触发恶意代码

那么接下来我们就分析,在上传含有恶意代码的主题后,他们干了什么。

被攻陷后发生的事情

首先,主页被劫持了。

会自动跳转到这里,所以去分析整体发生了什么。

万恶之源404.php

于是我们首先关注什么文件被篡改了,先看起效果的404.php

直接查这个文件是因为学长那边收到腾讯云报毒,说这个文件有问题。

有这么几行吸引了我的注意:

其中的download函数如下:

很精明,在写入完成后,在touch一下用的时间是上面获取的时间

touch函数PHP官方如下:

我们可以写一个demo来看一下:

可以看到,目前这个文件创建的时间是:

现在我们尝试使用touch来改变他的时间:

但实际上,右键属性就会看到这个东西的庐山真面目:

注意一个事,这个不是绝对的,需要具体情况具体分析。

好了,现在header.php这个文件的时间为什么感觉"没被修改过"的问题终于得到解决了,接下来我们继续看看,他修改了wp-config.php的什么

wp-config.php被插入了include_once(ABSPATH . WPINC . '/header.php');这么一段,我们来看一下文件是否果真如此:

果然被插入了这么一句,WPINC的值为wp-include

所以一切都明了了

接着几乎如出一辙的搞了function.php

后面又对{theme}里面的function进行了注入:

最后我们看下,他都注入了哪些文件:

404.php后面的代码更像是个大马?就不再具体分析了,是一些对文件的操作

接下来我们来分析一下,劫持是怎么做到的。

劫持是如何发生的

上面已经分析过了,修改了wp-config.php,使之包含了一次header.php,并且注入的代码实际上相同的,那不如我们就只看这一个wp-includes/header.php

文件写入:

定位$mtchs

提取了$reqw,定位$reqw

混淆了一些,根据这些代码处理一下:

得到:

之后运行一下,看下得到什么:

小黑子漏出鸡脚了吧,访问之:

看着不对劲,可能是做了判断之类的,重新弄一下:

利用他给出的拉取代码,我们尝试找出拉取了什么:

最终得到了

该代码与写入的恶意代码:

一致

注:我们直接访问这个URL和利用get_data_ya的curl访问的效果是不一样的,可见后端做了小小的分流,以下是我使用它的curl代码获取到的结果

最后的几行代码,利用文件包含,包含下载下来的恶意执行代码:

于是乎,结合上文,我们就弄清了为何第一次访问这个网站会被劫持到另外一个网站上去...

总结

暴露的问题

用户名暴露、用户名接口泄露

xmlrpc.php导致口令爆破

WordPress未能使用真正的强口令,使用的类似于domain+几位连续数字+特殊符号这种组合,导致被成功登陆

攻击流程

整个攻击应该是全程工具化的,非常的专业。

安全修复建议

xmlrpc

手动删除

如果以后手动更新WordPress,可以直接删除xmlrpc.php这个文件,当然,这会导致你无法使用远程发布文章功能。

.htaccess配置

主题function

在主题function.php里加入

关闭xmlrpc

插件禁用

都提供了禁用功能

修复接口未授权可获取管理员用户名问题

使用以下代码以修复/wp-json/wp/v2/users/或是 /?rest_route=/wp/v2/users 来获取管理员用户名问题:

在当前主题的function里添加:

但是仍然存在绕过的可能性,比如访问接口:

/?author=1会跳转到管理员用户名的一个url,例如:

弱口令

应当为无特征的无规律性的强密码,或采用自己已知含义字符串的MD5值或其他Hash值。

网站修复建议

以下图片中的wp-content文件夹下主题的部分代码已经被注入,需要重新下载主题文件并覆盖

建议删除黑客上传的恶意主题skeleton-reworked

删除wp-include/header.php

覆盖wp-includes/blocks/video/wp-load.php

删除wp-config.php里的include_once(ABSPATH . WPINC . '/header.php');