
核心要点(TL;DR)
- 先用find按修改时间排序定位可疑文件,比全盘杀毒更快。
- 查杀前先备份现场与日志,避免清除后无法溯源。
- 清除木马必须同步修补上传点与弱口令,否则会二次感染。
- 用crontab、计划任务与SSH密钥做清除后复检。
凌晨收到监控告警:首页被插入陌生跳转代码,搜索引擎提示站点被挂马。多数运维的第一反应是删掉可疑文件,但网页木马往往只是结果,真正的入口还藏在后门、弱口令或上传漏洞里。本文按「定位—取证—清除—修补—复检」五步,给出可直接执行的命令与检查清单,帮助你在最短时间内让站点恢复干净,并避免二次感染。
一、先判断感染范围与类型
网页木马(WebShell)通常是一段可被远程调用的脚本,攻击者通过它执行命令、读写文件或横向移动。常见形态包括一句话木马、加密混淆脚本、伪装成图片的PHP文件,以及被注入到正常页面中的外链跳转代码。
动手前先做三件事:
- 备份现场:打包站点目录、Web日志与数据库,保留原始时间戳。
- 确认范围:是单站点、整台服务器,还是同账号下的多个站点。
- 记录时间点:以告警时间或文件修改时间为锚点,缩小排查窗口。
# 备份站点与日志(示例路径按实际调整)
tar -czf /root/backup_$(date +%F).tar.gz /var/www /var/log/nginx
二、用时间戳与完整性快速定位可疑文件
全盘杀毒在Linux上效率低,按修改时间排序更实用。先找出近7天内新增或修改的脚本文件:
find /var/www -type f \( -name "*.php" -o -name "*.jsp" -o -name "*.asp" \) -mtime -7 -printf '%TY-%Tm-%Td %TH:%TM %p\n' | sort
再对命中文件做关键词扫描,重点看危险函数与编码混淆:
grep -rniE "eval\(|assert\(|base64_decode|str_rot13|system\(|passthru\(|shell_exec" /var/www --include="*.php"
如果服务器有基线,可用完整性校验对比差异;没有基线时,重点检查上传目录、缓存目录、图片目录中出现的脚本文件——正常业务不会在这些位置放可执行脚本。
| 排查手段 | 适用场景 | 优点 | 局限 |
|---|---|---|---|
| mtime时间排序 | 已知大致感染时间 | 快、误报少 | 攻击者可用touch伪造时间 |
| 关键词扫描 | 未知时间、广撒网 | 覆盖混淆脚本 | 正常代码也可能命中 |
| 文件完整性校验 | 有干净基线 | 准确发现篡改 | 需提前建立基线 |
三、从日志确认入口与攻击路径
找到可疑文件后不要急着删,先看谁访问过它。检索Web访问日志中的文件名与参数:
grep -i "shell.php" /var/log/nginx/access.log | tail -n 50
grep -E "POST .*(upload|edit|admin)" /var/log/nginx/access.log | awk '{print }' | sort | uniq -c | sort -rn | head
同时检查系统侧持久化位置,攻击者常在这里留后门:
crontab -l与/etc/cron.*下的异常任务;~/.ssh/authorized_keys是否有多余公钥;/etc/passwd是否新增UID为0的账号;- 开机启动项与可疑监听端口(
ss -lntp)。
四、隔离清除并修补入口
清除遵循「先断后清」:将可疑文件移动到隔离目录而非直接删除,便于后续分析;对确认的WebShell,记录路径、哈希与访问IP后再清理。
- 修改所有后台、数据库、SSH口令,禁用密码登录改用密钥。
- 删除异常计划任务、SSH公钥与新增账号。
- 清理被注入的页面代码,从干净备份恢复被篡改文件。
- 修补入口:上传功能增加类型与内容校验,关闭目录执行权限。
# 禁止上传目录执行PHP(Nginx示例)
location ~* /uploads/.*\.(php|phtml)$ { deny all; }
在防护建议上,可在Web层部署具备规则拦截与文件监控能力的方案,例如AegisX对异常上传与可疑脚本访问的实时拦截,能在入口处减少木马落地概率,但前提仍是先把已有后门清除干净。
五、复检清单与持续监控
清除完成后至少观察48小时,按清单复检:
- 再次执行关键词扫描,确认无残留;
- 核对站点文件哈希与备份一致;
- 检查日志中是否仍有对已删文件的访问请求;
- 确认计划任务、SSH、账号、端口四项无异常;
- 开启文件完整性监控与告警,日志保留不少于30天。
行动建议:把本次排查的时间窗口、命中文件与入口写成应急记录,形成自己的基线清单;日常坚持最小权限、上传目录不可执行、后台强口令三件事,比事后查杀更省成本。
常见问题(FAQ)
网站被挂马后,第一步应该做什么?
先隔离再取证。立即备份可疑文件、Web日志与数据库,并暂时限制站点写入权限或切换到维护模式,避免攻击者继续改动。不要急着删除文件,否则时间戳与日志线索丢失,后续无法判断入侵入口,容易反复被挂马。
怎么快速判断服务器上有没有WebShell?
优先按时间窗口排查。用find按mtime列出近期新增或修改的php/jsp/asp文件,再结合grep搜索eval、assert、base64_decode、system等危险函数,交叉比对正常业务文件。命中后不要直接删除,先复制样本分析访问来源。
网页木马清除后又被挂上,是什么原因?
通常是入口未修补。常见入口包括上传功能校验缺失、后台弱口令、第三方组件漏洞、数据库写入点以及被写入的SSH公钥或计划任务。只删木马文件等于治标,必须检查crontab、启动项、SSH授权文件与Web目录权限,逐一清理。
清除木马后需要做哪些加固?
收权限、关入口、加监控。Web目录设为不可执行上传文件,限制目录写权限,修改全部后台与数据库口令,关闭不必要端口,部署文件完整性监控与WAF拦截异常请求,并保留日志至少30天以便复盘。
没有专业安全团队,能自己完成查杀吗?
可以完成基础处置。按定位、取证、清除、修补、复检五步执行,多数常见网页木马能被清理。但若发现rootkit、内核模块篡改或数据库被批量写入,建议重装系统并从干净备份恢复,避免残留后门。