网页木马查杀实战:服务器被植入后的定位与清除全流程 核心要点图解,先用find按修改时间排序定位可疑文件,比全盘杀毒更快。;查杀前先备份现场与日志,避免清除后无法溯源。;清除木马必须同步修补上传点与弱口令,否则会二次感染。;用crontab、计划任务与SSH密钥做清除后复检。
网页木马查杀实战:服务器被植入后的定位与清除全流程 · 核心要点一图读懂(AegisX)

核心要点(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后再清理。

  1. 修改所有后台、数据库、SSH口令,禁用密码登录改用密钥。
  2. 删除异常计划任务、SSH公钥与新增账号。
  3. 清理被注入的页面代码,从干净备份恢复被篡改文件。
  4. 修补入口:上传功能增加类型与内容校验,关闭目录执行权限。
# 禁止上传目录执行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、内核模块篡改或数据库被批量写入,建议重装系统并从干净备份恢复,避免残留后门。