
核心要点(TL;DR)
- 先隔离取证再清理,直接删文件会丢失溯源线索。
- 按修改时间、特征串、访问日志三条线定位挂马代码最快。
- 清理后必须重置所有凭据并修补入口,否则会二次感染。
- 搜索引擎申诉与死链提交是恢复收录的关键一步。
凌晨收到搜索引擎的安全提示,或者用户反馈点开你的站点就跳转到博彩页面——这是典型的网站被挂马。很多站长第一反应是删文件、改密码,结果几天后又被挂上。本文按实战顺序拆解:如何隔离取证、如何定位恶意代码、如何查杀后门、如何封堵入口,以及最后如何让搜索引擎恢复收录。全程给出可复制命令与检查清单,照着做即可。
第一步:隔离取证,别急着删文件
挂马处理最忌“先删后查”。删除会破坏时间线与样本,导致无法判断入侵入口。正确顺序是:
- 整站备份:打包网站目录与数据库,保存到本地或独立存储,作为取证样本。
- 记录异常:截图搜索引擎提示、异常跳转页面、可疑文件路径与修改时间。
- 导出日志:至少保留近7天Web访问日志、错误日志与登录日志。
- 临时止损:将上传目录、缓存目录设为不可写,或切到维护页,防止恶意代码继续写入。
提示:若服务器已被植入rootkit,建议直接重装系统并从备份恢复干净数据,而不是在原系统上“修修补补”。
第二步:三条线定位恶意代码
挂马代码通常藏在主题模板、首页文件、JS文件、数据库或伪静态配置中。用以下三条线交叉定位效率最高。
线索一:按修改时间找近期变更
find /var/www/html -type f -mtime -7 -name "*.php" -o -mtime -7 -name "*.js" | head -50
重点看核心程序文件(如 index.php、header.php、functions.php)是否在非发布时间被改动。
线索二:按特征串搜索
grep -rIl --include=*.php -E "eval\(|base64_decode\(|assert\(|$_POST\[|gzinflate\(" /var/www/html
grep -rIl --include=*.js -E "atob\(|fromCharCode|document.write\(unescape" /var/www/html
正常业务代码很少同时出现多层编码与动态执行,命中后逐个人工确认。
线索三:查访问日志中的异常请求
awk '{print ,,,}' access.log | grep -E "POST" | sort | uniq -c | sort -rn | head -30
关注对 uploads、images、cache 等目录的 POST 请求,以及陌生 User-Agent 与高频单文件访问。
| 位置 | 常见挂马形式 | 排查方式 |
|---|---|---|
| 模板/主题文件 | 混淆JS、隐藏iframe | 搜索iframe、script外链域名 |
| 上传目录 | 一句话木马、伪装图片 | 检查文件头与扩展名是否匹配 |
| 数据库 | 文章内容注入脚本 | 搜索script、iframe字段 |
| 伪静态/配置 | 恶意跳转规则 | 核对.htaccess与nginx配置 |
第三步:查杀WebShell与后门
挂马往往伴随WebShell。除了特征串,还要查“非预期可执行文件”:
- 上传目录、缓存目录中出现 .php/.jsp/.asp 文件,一律视为可疑。
- 检查计划任务:
crontab -l、ls /etc/cron.*,删除陌生任务。 - 检查启动项与SSH公钥:
cat ~/.ssh/authorized_keys,移除未知密钥。 - 检查异常进程与监听端口:
ps aux、ss -lntp,确认无陌生外联。
清理时保留样本再删除,删除后立即重置FTP、SSH、数据库、后台管理员密码,并升级CMS与插件到最新版本。
第四步:封堵入口与加固
只清文件不补漏洞,等于给攻击者留门。建议按清单执行:
- 修补已知漏洞,删除不用的插件与主题。
- 上传目录禁止脚本执行,Nginx示例:
location ~* /uploads/.*\.(php|jsp)$ { deny all; } - 后台开启二次验证,限制登录IP与失败次数。
- 关闭不必要的目录浏览与危险函数(如 disable_functions 禁用 exec、system)。
- 部署网站防火墙,拦截注入与一句话木马特征。此类场景可借助 AegisX 的WAF与恶意文件检测能力,形成持续防护。
第五步:恢复收录与排名
清理完成、站点可正常访问后,再走恢复流程:
- 到搜索引擎安全平台提交申诉,说明已清理并附整改说明。
- 提交最新站点地图,用死链工具提交被删除的恶意页面。
- 检查 robots.txt 是否被篡改,恢复正确规则。
- 持续观察抓取频次与索引量,通常数天到数周逐步恢复。
行动建议:今天先完成备份与日志导出,再按三条线定位;清理后务必重置全部凭据并补漏洞。把“文件完整性校验+日志告警+上传目录禁执行”做成常态检查,比事后救火成本低得多。
常见问题(FAQ)
网站被挂马了,第一步应该做什么?
先隔离取证,再动手清理。立即备份整站文件和数据库到本地,记录异常文件路径与修改时间,导出近7天访问日志;同时可临时关闭写入权限或切到维护页,避免恶意代码继续扩散。直接删除文件会破坏溯源线索,也可能漏掉隐藏后门。
怎么快速找到被挂马的恶意代码?
用三条线交叉定位:一是按修改时间找近期变更文件,如find按-mtime筛选;二是用grep搜索eval、base64_decode、iframe等特征串;三是查访问日志中异常POST请求与陌生UA。三者交集处的文件基本就是挂马入口或落地文件。
清理完挂马代码后为什么还会复发?
多数复发源于入口未封堵。常见遗漏包括:WebShell未清除、计划任务或启动项后门、数据库中被写入恶意脚本、CMS插件漏洞未修补、FTP/SSH/数据库密码未重置。清理后应全量重置凭据并升级程序版本。
网站被挂马后如何恢复搜索引擎收录?
先确保站点已彻底清理并可正常访问,再到搜索引擎安全平台提交申诉,说明已修复并附上整改说明;同时提交最新站点地图、用死链工具提交被删的恶意页面。审核通过后安全提示会移除,收录通常需要数天到数周逐步恢复。
有没有办法提前发现网站被挂马?
有。定期做文件完整性校验,监控核心文件的哈希变化;开启访问日志告警,关注异常POST与陌生路径;对上传目录禁用脚本执行;使用WAF拦截常见注入与一句话木马特征。AegisX可提供网站防火墙与恶意文件检测能力,降低被挂马风险。