网站打开跳转到赌博页、搜索引擎快照变成乱七八糟的关键词、或者杀毒软件提示你的域名有风险——多半是被挂马了。挂马不是删几个文件就完事,攻击者通常留了不止一个后门。这篇按实际处理顺序写,照着做。
第一步:先止损,别急着删文件
发现挂马第一件事是降低影响面,同时保留现场:
# 备份整站和数据库到本地,留作分析
tar czf /root/site-backup-$(date +%F).tar.gz /var/www/html
mysqldump -u root -p 数据库名 > /root/db-backup.sql
如果污染严重,可以临时挂维护页。备份很重要——你需要对比文件找出后门,直接在线上边删边找很容易漏。
第二步:定位恶意文件
挂马文件有几个典型特征,用命令批量筛:
# 找最近 7 天被修改过的 PHP 文件
find /var/www/html -name "*.php" -mtime -7 -ls
# 搜常见后门函数特征
grep -rn --include="*.php" -l -E "eval\(|base64_decode|gzinflate|str_rot13|assert\(" /var/www/html
重点看这几类位置:上传目录(如 wp-content/uploads)里出现的 .php 文件、文件名伪装成正常组件的(wp-cache.php、class-wp.php 这种似是而非的名字)、以及被插入了一行超长 base64 的正常文件。上传目录里出现任何 PHP 文件都可以直接判定有问题,正常业务不会往那里放代码。
第三步:清除并核对
确认的恶意文件直接删。被篡改的核心文件不要手工改,用干净版本整个覆盖。WordPress 站点可以这样对比:
# 下载同版本官方包,diff 核心目录
wget https://cn.wordpress.org/wordpress-6.5.zip
unzip -q wordpress-6.5.zip
diff -rq wordpress/wp-includes /var/www/html/wp-includes | grep -v "Only in wordpress"
diff 出来多出的文件、内容不一致的文件,逐个检查。数据库也要查,挂马经常往文章内容或 options 表里插 JS 跳转代码:
SELECT option_name FROM wp_options WHERE option_value LIKE '%<script%' AND option_value LIKE '%http%';
第四步:堵住入口
清完不找入侵原因,一周内大概率复发。按命中率排:过期插件/主题漏洞、弱密码或密码泄露、服务器上其他站点被跨站感染、FTP 账号泄露。要做的事:所有后台密码和数据库密码全换、插件主题升到最新并删掉不用的、上传目录禁止执行 PHP(Nginx 加一段 location 规则即可)、装个文件监控(如 maldet 或宝塔的防篡改)。
常见问题
清完过几天又出现新木马?
说明入口没堵住或有后门没清干净。检查 crontab(crontab -l 和 /etc/cron.d/),攻击者常用定时任务重新写入文件。也重点排查是否有隐藏的管理员账号。
百度提示「该网站可能存在安全风险」多久能恢复?
清干净后到百度搜索资源平台提交申诉,一般 3-7 天解除。前提是确实清干净了,复检不通过会延长。
没有技术能力自己清怎么办?
先做整站备份,然后最稳妥的路径是:用干净备份重装 + 换全部密码。找第三方清马服务要谨慎,先谈清楚范围和验收标准。
处理挂马时遇到删不掉、反复复活的顽固文件?到 fenij.com 评论区描述下现象,帮你看看思路。