站点被挂马这件事,我是从百度搜索结果里发现的。

搜自己的品牌词,标题是正常的,点进去跳到了一个博彩站。

但自己在浏览器里直接输入网址,一切正常。

这就是典型的"搜索引擎来路才跳转",专门躲站长。

怎么确认被挂了

直接访问看不出问题,是因为代码里判断了 Referer 或者 UA。用 curl 模拟百度蜘蛛访问,就能看到真面目:

curl -A "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" -e "https://www.baidu.com/" -I https://www.example.com/

如果返回 302 跳到别的站,基本可以确定中招了。

或者直接看源码里有没有可疑的 JS:

curl -s https://www.example.com/ | grep -i "eval\|atob\|fromCharCode"

找后门

挂马的代码通常藏在两个地方:主题文件,或者根目录下一个名字很像正常文件的 php。

先按修改时间找:

find /www/wwwroot/站点目录 -name "*.php" -mtime -30 -type f

正常运行的站点,php 文件很少改动。三十天内改过的,一个个看。

再按内容找:

grep -rn "eval(\|base64_decode(\|assert(\|\$_POST\[" /www/wwwroot/站点目录 --include="*.php" | grep -v "wp-includes"

我那次是在 wp-content/themes/主题名/functions.php 末尾找到的,加了三百多行混淆代码,前面包了一层注释伪装成"统计代码"。

主题是从一个资源站下的破j版,后门就在里面。

清理不等于修好

把那段代码删掉,站点正常了。但我不放心,因为不知道还有没有第二个后门。

最稳的办法是重装:

  1. 把 wp-content 里的 uploads 目录单独备份出来(只留图片,不留 php)
  2. WordPress 核心、主题、插件全部从官方重新下载
  3. 数据库导出,检查 wp_options 和 wp_posts 里有没有可疑的 script
  4. 重新装一遍,导入数据

麻烦,但干净。我那次折腾了四个小时。

数据库里也要查。有些后门不写文件,直接往文章内容里插一段 JS:

SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%<script%';

正常文章不应该有 script 标签。

为什么会中招

复盘下来三个原因:

用了破解主题。这是最主要的。破j版 = 别人改过的代码,加了什么你不可能全部看完。

WordPress 版本太旧。当时跑的是两年前的版本,已知漏洞一堆。

后台密码太简单。没开二步验证,也没限制登录次数。

现在的加固清单

这些做完,一年多没再出过事:

  • 主题和插件只用官方或者正版,破解的一律不用
  • WordPress 自动更新小版本,大版本手动更
  • 后台开二步验证,装个限制登录次数的插件
  • 禁用后台的"编辑主题文件"功能,在 wp-config.php 里加 define('DISALLOW_FILE_EDIT', true);
  • 目录权限:文件 644,目录 755,wp-config.php 设 600
  • 每天备份,备份存到对象存储,不放在同一台机器上

还有一条容易被忽略的:别把 uploads 目录设成可执行 php。正常图片目录不需要跑 php,在 nginx 里禁掉:

location ~* /wp-content/uploads/.*\.php$ {
    deny all;
}

很多后门就是伪装成图片传进 uploads,再访问执行。

被挂马之后最怕的不是清理不干净,是以为清理干净了。删掉看得见的那段,往往只是开始。

俗人源码网免责声明:

1、本站所有资源均收集于互联网,分享目的仅限学习与参考。如有侵权,请联系 1685698671@qq.com 及时删除!

2、本站资源不保证完整性和安全性,下载后请自行检测。使用过程中出现的任何问题均与本站无关,敬请自行处理。

3、本站资源仅限个人学习研究使用,严禁用于任何违法违纪用途。因使用者违规使用产生的一切后果,由使用者自行承担,本站不承担任何责任。