先说结论:WordPress 被挂马,问题通常出在应用层,不是主机被提权。只删首页里那段代码,几乎一定会复发;正确顺序是“隔离备份 → 找入口 → 校验核心 → 清文件和数据库 → 堵漏洞 → 再上线”。
如果你现在看到首页被改、自动跳转或搜索结果出现垃圾页,先做三件事:
- 别急着重装:先留证据,不然找不到入口,重装也会再中
- 先隔离:维护模式或暂时下线,避免继续被搜索引擎抓取
- 先备份:文件和数据库各一份,后面清理和回溯都要用
下面按“症状 → 隔离 → 找入口 → 校验 → 清理 → 后门 → 加固”讲,命令以 WP-CLI 为主。

常见症状
- 首页或文章内容被插入陌生链接、脚本、隐藏 div
- 从搜索引擎点进来被跳转到博彩、色情或广告页
- 搜索结果里出现大量你没发过的页面(SEO 垃圾页)
- 后台多出陌生管理员、插件或定时任务
- 服务器上出现陌生 PHP 文件,尤其是上传目录里的
- 网站变慢、CPU 升高,可能同时被植入挖矿或发包脚本
有些挂马很隐蔽:只在搜索引擎来路或移动端 UA 下触发,正常访问看不出来。别只用自己的浏览器检查。
第一步:隔离和备份
- 开维护模式或暂时切走流量,避免继续被爬取和传播
- 打服务器快照,保留当前状态
- 打包网站文件,导出数据库,存到另一台机器
- 保存 Web 访问日志、PHP 错误日志、登录记录
- 记录发现时间和操作,后面复盘要用
不要在这个时候直接覆盖文件或清库。现场没了,入口就找不到了。
第二步:找入口
WordPress 被挂马,入口通常在这几个地方:
- 插件/主题漏洞:长期不更新、破解版、来路不明的插件
- 弱密码/撞库:后台管理员密码太简单,或没有 2FA
- 上传目录:允许上传 PHP,或文件权限过宽
- 旧 PHP/旧核心:已知漏洞没打补丁,比如 PHP2Shell 这类核心层 RCE
- 主机被提权:如果是 root 失守,就不只是 WordPress 的问题
看访问日志里最近的 POST、上传、插件文件访问,结合文件修改时间,通常能定位到入口。找不到入口时,按“主机可能已失守”处理。
第三步:校验核心和插件
wp core verify-checksums
wp plugin verify-checksums --all
wp theme list
wp plugin list
wp user list --role=administrator
核心校验不通过,说明 WordPress 自身文件被改;插件校验不通过,说明插件文件被动过。把不通过的文件列出来,和官方版本对比,不要直接覆盖了事,先确认改了什么。
第四步:清理文件和数据库
文件侧:
- 用官方包重装 WordPress 核心(保留 wp-config.php 和 wp-content)
- 删除并重装可疑插件/主题,不用破解版
- 清空上传目录里的 PHP 文件,只保留图片/文档
- 检查
.htaccess、.user.ini、wp-config.php有没有陌生代码 - 检查
wp-content/mu-plugins和wp-content/uploads下的异常文件
# 找最近被修改的 PHP 文件
find . -type f -name "*.php" -mtime -14 | head -50
# 找上传目录里的 PHP
find wp-content/uploads -type f -name "*.php"
# 找常见混淆函数
grep -rIl --include=*.php -E 'eval\(|base64_decode\(|gzinflate\(|str_rot13\(' wp-content 2>/dev/null | head -30
数据库侧,重点查 wp_options、wp_posts、wp_users、wp_usermeta:
wp option get siteurl
wp option get home
wp cron event list
wp db query "SELECT option_name FROM wp_options WHERE autoload='yes' AND option_value LIKE '%<script%'"
表前缀不是 wp_ 的,换成你的前缀。清理时先备份,再用 wp search-replace 或 SQL 精确替换,别整库覆盖。

第五步:查后门
挂马的人通常会留后门,删掉表面代码不够:
- 陌生管理员账号、被改过权限的用户
- 隐藏的定时任务(
wp cron event list) - mu-plugins 里的自动加载文件
- 主题 functions.php 里的陌生钩子
- 服务器 cron、SSH 公钥、面板账号
发现陌生账号先禁用、保留证据,不要直接删除。确认清理完成后再统一处理。
第六步:加固
- 核心、插件、主题升到最新,删掉不用的
- 管理员开 2FA,限制登录尝试,改掉弱密码
- 装 WAF(Cloudflare 或雷池),挡住常见注入和扫描
- 文件权限 644/755,禁止上传目录执行 PHP
- wp-config.php 加
DISALLOW_FILE_EDIT,关掉后台在线改文件 - 备份放站外,定期做恢复演练
- 开文件完整性监控,发现改动及时告警
- PHP 用受支持版本,别再跑 8.2 以下的 EOL 版本

什么时候直接重装
这几种情况,清理的性价比很低:
- 主机被提权,或发现 root 级后门
- 入口找不到,或清理后反复被挂
- 多个站点同时中招,互相感染
- 数据敏感、合规要求高,不能接受“可能没清干净”
重装的正确做法:新机器装干净环境,只迁移文章、图片和必要配置,插件用官方版本重装,所有密码、密钥、Salts 全部换掉。
常见问题 FAQ
Q1:只删首页里的代码行不行?
不行。挂马通常有后门和入口,删表面代码几天内就会复发。要清文件、清数据库、堵入口一起做。
Q2:怎么判断是插件还是主机的问题?
看文件修改时间、访问日志和核心校验。插件目录被动过、日志里有插件文件的可疑请求,多半是插件;出现提权、陌生系统进程,按主机失守处理。
Q3:数据库里的垃圾页怎么清?
先备份,再按 post_type、作者、时间、内容特征筛出来,确认后删除;同时检查 wp_options 里被注入的脚本和跳转。
Q4:清理完还会不会再中?
如果入口没堵、密码没换、插件没更新,大概率会。清理后必须做加固和监控。
Q5:要不要换服务器?
主机被提权、反复中招、或需要干净环境重建时,换一台更省事。新环境先装好补丁和 WAF,再迁数据。
参考来源
总结
WordPress 挂马的处理顺序是:隔离备份、找入口、校验核心、清文件和数据库、查后门、加固。只删代码不堵入口,等于没修。找不到入口或主机失守时,重建比清理更省心。
需要一台干净环境做重建或迁移,可以按小时开一台萤光云香港 CN2 VPS,装好补丁、WAF 和备份,再把内容迁过去,确认稳定后再切 DNS。







