IT

WordPress 被挂马后怎么清理?完整流程与加固要点

AI智能摘要

WordPress 被挂马别急着删代码,先隔离备份再动手。这篇按顺序讲清楚:怎么用命令找出被改的 PHP 文件和数据库里的恶意脚本,怎么重置账号和盐值,以及上传目录禁执行、关文件编辑这些加固动作,最后靠日志和文件监控确认没复发。

先说结论:WordPress 被挂马后,不要只删掉那段恶意代码就完事。挂马通常意味着攻击者已经拿到了写文件或登录后台的权限,只删表面代码,几天内大概率会复发。正确顺序是:先隔离取证,再定位入口,然后全量清理,最后做加固和监控。下面按这个顺序讲。

一、先隔离,别急着删

发现挂马的第一时间,先把站点切到维护模式或直接下线,避免继续给访客分发恶意脚本,也避免攻击者继续操作。同时做两件事:

  • 完整备份当前文件和数据库(包括被感染的文件),留作取证和比对。
  • 导出近 30 天的访问日志和 PHP 错误日志,后面定位入口要用。

如果主机面板支持,先把站点目录设为只读,或临时关闭 PHP 执行,防止二次写入。备份完再动手清理,顺序不能反。

二、定位挂马位置和入侵入口

挂马常见位置有几类:主题的 functions.php、插件目录、wp-content/uploads 下的伪装 PHP 文件、index.php 被插入的混淆代码,以及数据库 wp_options 和文章内容里的外链脚本。

用命令行快速筛查可疑文件,重点看近期被修改的 PHP 文件:

find /var/www/html -type f -name "*.php" -mtime -7 -ls
find /var/www/html -type f -name "*.php" | xargs grep -l "eval(base64_decode" 2>/dev/null
grep -rn "iframe|document.write|atob(" /var/www/html/wp-content/themes --include="*.php"

数据库侧重点查 wp_options 里的 siteurl、home 是否被改,以及文章表中是否被批量插入脚本:

SELECT option_name, option_value FROM wp_options WHERE option_name IN ('siteurl','home');
SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%<script%';

入口方面,优先排查:弱口令后台登录、过期插件漏洞、上传目录可执行 PHP、主题/插件来自破解渠道。日志里找登录成功但 IP 异常的记录,以及 POST 到 admin-ajax.php、xmlrpc.php 的高频请求。

三、清理:文件、数据库、账号三处都要动

文件层面,最稳妥的做法是用官方同版本安装包覆盖 wp-admin、wp-includes 和根目录核心文件,主题和插件从官方源重新下载覆盖,不要保留任何来源不明的文件。上传目录只保留图片等静态资源,删掉所有 PHP 文件。

数据库层面,清理文章和选项里的恶意脚本,重置 wp_options 中被篡改的 URL。账号层面,重置所有管理员密码,删除陌生管理员账号,并更换 wp-config.php 里的数据库密码和盐值(AUTH_KEY 等八项)。改完盐值会强制所有用户重新登录,这一步别省。

四、加固与持续监控

清理完立即做以下加固,按优先级排列:

  • 后台开启强制强密码,启用双因素认证;限制 wp-login.php 和 xmlrpc.php 的访问频率或直接禁用 XML-RPC。
  • 关闭后台文件编辑:在 wp-config.php 加入 define('DISALLOW_FILE_EDIT', true);。
  • 上传目录禁止执行 PHP,Nginx 示例:
location ~* /wp-content/uploads/.*.php$ {
    deny all;
}
  • 核心、主题、插件保持最新,删除不用的插件和主题,破解版一律不用。
  • 装文件完整性监控或安全插件,定期比对核心文件哈希;开启日志告警,关注异常登录和文件变更。

最后提醒一点:如果主机上还有其他站点,同账户下的其他站点也要一起查,攻击者经常横向感染。清理完成后观察 3 到 7 天日志,确认没有复发再解除维护模式。

发表评论