网站被挂马怎么排查?发现与清除恶意代码实用方法

📍 WDQWDWQD987AAAAA:216.73.217.69
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /2620282c47f3.html
📄

网站被植入恶意代码,也就是常说的“挂马”,轻则访问者被劫持跳转,重则服务器沦为攻击者的工具,网站还会被搜索引擎列入危险名单,流量和信誉双双受损。要在最短时间内发现并彻底清除隐患,需要一套覆盖用户端、服务器和日志的完整排查思路。

1. 从浏览端捕捉异常信号

日常访问网站时,多留意浏览器的实际表现。以下几种现象需要格外警惕:页面突然多出从未见过的弹窗广告;输入网址后自动跳转到陌生域名;或者页面加载明显变慢,电脑风扇高速运转。这些迹象往往意味着页面被注入了恶意脚本。

为了排除是本地设备问题,建议换一台未安装任何插件、系统干净且杀毒软件齐全的设备进行访问。手机和电脑各试一次,如果异常现象依然存在,基本可以断定问题出在服务器端,而不是你的上网设备。

1.1 通过源代码快速定位可疑片段

在浏览器中按 F12 打开开发者工具,或者右键选择“查看页面源代码”,利用搜索功能查找 eval、base64_decode、document.write 等特征字符串。同时留意是否存在指向陌生域名的 iframe 标签,以及看起来像乱码的超长变量名。一旦发现可疑内容,先复制片段到搜索引擎比对其特征,确认是否属于常见的恶意载荷。

2. 深入服务器核查文件与进程

浏览端只是确认了现象,真正的清理行动必须落在服务器上。首要排查对象是最近一两天内被修改过的文件,因为攻击者植入的后门脚本,往往在时间戳上会留有痕迹。

  1. 使用 ls -lt 命令将项目目录按修改时间倒序排列,重点检查 .php、.jsp、.aspx 等可执行文件的变化。
  2. 翻查 /tmp、/var/tmp 以及上传目录,查看是否存在伪装成图片或文本、实则可执行的脚本文件。
  3. 执行 grep -r "eval(base64_decode" 项目路径 命令,将加密混淆的代码块从海量文件中直接揪出。

如果文件扫描未发现异常,还需关注正在运行的系统进程。通过 ps aux 或 top 命令查看占用 CPU 资源较高的进程路径,确认其是否属于正常业务程序。部分木马会伪装成常见系统进程名,这时要结合进程启动时间、所在目录和连接的外部 IP 综合判断。

3. 助扫描工具查漏补缺

手工排查难免有遗漏,建议在排查前后各运行一轮自动化工具做交叉验证,能大幅提升检出率。

特别提醒:工具报出的文件不要直接删除,先下载到本地备份,再隔离处理。否则遇到误报情况,会误删正常业务文件,造成功能性故障。

4. 翻阅日志封堵入侵源头

清除木马只是第一步,如果服务器漏洞没有修补,攻击者很快会再次入侵。抽时间查看 Web 服务器访问日志,例如 Nginx 的 access.log 或 Apache 的 access_log,能还原攻击路径。

重点排查以下几种模式:某个 IP 在极短时间内发起大量 POST 请求;URL 参数中带有 cmd、whoami、curl 等命令执行特征;User-Agent 字段看起来异常或为空。定位到攻击来源 IP 后,立即在防火墙层面封禁该地址,并检查同一时段的账号登录记录,看是否存在管理后台暴力破解痕迹。

5. 常见问题

5.1 网站被挂马后,为什么清理了还会反复出现?

反复出现的最核心原因是没有封堵入侵入口。木马文件往往是攻击者利用漏洞上传的后门,如果只清理文件而忽略了系统补丁、后台弱密码或插件漏洞,攻击者随时可以再次上传新木马。清理后务必复查日志,找到原始入侵方式并补齐安全短板。

5.2 免费扫描工具够用吗?需不需要购买付费安全服务?

对于中小型网站,免费工具结合手工排查基本够用。VirusTotal、ClamAV 等免费方案能识别大量已知恶意特征。但如果网站业务价值较高、频繁遭受攻击,付费安全服务提供实时监控、紧急响应和专家研判,性价比更高。

5.3 网站程序是开源 CMS,被挂马是否意味着必须重装系统?

不一定。如果木马仅存在于网站文件层面,没有篡改系统内核或感染引导区,只需备份数据、重装网站程序并修补漏洞即可。但如果服务器被提权、系统命令被替换,建议彻底重装操作系统,确保环境纯净。

6. 结语

网站挂马排查如同清除病灶,既要治标更要治本。按照浏览端观察、服务器排查、工具扫描、日志审计的流程走一遍,能高效定位并清除绝大多数恶意代码。养成定期备份、及时更新程序补丁、定期更换后台密码的习惯,远比事后应急更重要,能从根本上降低网站被挂马的概率。

图1 图2

nginx