如何有效解决wordPress网站被种木马

前几天突然发现用iPad访问blog被重定向到了赌博网站,很明显,网站文件被篡改了。

第一阶段

登录远程服务器,发现根目录index.php被修改。原先只有1句话,用来加载wp-blog-header.php,整个文件只有不到1KB,现在变成了41KB。查看其内容,原来它将blog的首页抓取下来,做成静态HTML插入index.php,并在前面加上了大量赌博相关的SEO内容,同时对浏览器类型进行识别,针对某些类别的浏览器,直接重定向到赌博网站。

于是将index.php修改回去。考虑到任何木马都不可能不留后手,对整个网站目录检索*.php文件,并以修改时间倒序排序,在wp-admin、wp-include、wp-content的一些子目录中,均发现可疑文件。这些文件通常采用URL编码、HTML实体编码、字符串混淆等手段隐藏真正的代码串和字符串,但这样做反而使它们具备了鲜明的特征,一下子就可以认出来。

根据时间判断,在一个星期前部分后门文件就已经植入,但不知为何潜伏了一周后才开始修改首页文件。清除了所有可疑文件后,网站恢复正常。

第二阶段

一觉醒来,网站又挂了,症状依旧。这就让人比较纠结了,如果网站的文件已经清除干净,那么问题可能处在托管程序乃至托管服务器上,也有可能出在同一个服务器提供的其他服务上,还有可能出在主题文件上。这排查的面儿就广了。

再次恢复index.php,并清除了不知如何又放进来的木马文件,给服务器打了补丁,并升级了所有插件至最新版本。WordPress已经是最新版本,应该不是它自身的问题。

几个小时后,网站再次中招。

第三阶段

开始大量上网查询资料。同时,官网下载最新版本的wordpress,逐个文件夹比对。仔细核对了第三方主题的文件,并研究了主题的Github仓库,确认没有其他人遇到同样问题。很快我意识到手工比对的工作量太大,于是下载了wordfence插件,经过一番扫描,果然在wp-admin/includes中发现了一个inc.php,这个文件并不属于原始wordpress文件,但它的修改时间却是与旁边的import.php一模一样,都是2022年。难怪通过修改时间排序不能发现它。这个文件使用了一个eval()函数,里面几十KB的混淆代码,看了令人头皮发麻。果断删除之。

网上的文章虽然没有给出直接答案,但提示了我:既然数据库的密码就明文保存在wp-config.php,木马程序没有理由不得到它!而掌握了数据库,提权也就不是难事了。之前竟然没有想到修改数据库密码,这是重大疏忽。

使用MySQL command Line Client登录mysql。首先切换到mysql表:

USE mysql;

修改密码:

ALTER USER 'USER'@'localhost' IDENTIFIED BY 'new_password';

刷新权限:

FLUSH PRIVILEGES;

然后同步修改wp-config.php,并重启网站服务器。

为了确保万无一失,再次检查托管服务器有无可疑用户,并修改administrator密码。

进一步研究表明,网站最初的漏洞多半来自“All-in-One WP Migration”插件,它在去年爆出漏洞,而我恰好启用了它,又没有开启自动更新。

至此,问题解决。

总结

1、可疑文件的排查,用修改时间排序效率很高,但不完全可靠。黑客可以预先制作一个时间很早的后门文件,然后利用漏洞上传。推荐的方案是使用wordfence或类似的扫描工具,对所有文件进行扫描。

2、虽然本次没有遇到,但黑客也可以上传图片格式的后门文件,并通过其他后门文件来执行它。

3、凡是一次性使用的插件,用完就禁用或删除。经常使用的插件,必须开启自动更新。

4、木马一定会读取明文密码。清除木马之后,务必修改数据库、服务器密码。