网站被挂广告跳转怎么排查?从首页源码到定时任务 核心要点图解,先查首页源码与Nginx配置,多数广告跳转来自注入脚本或恶意rewrite规则。;用grep与find按时间、特征串定位可疑文件,比逐个目录翻更快。;crontab与systemd定时任务常被用于维持跳转后门,必须逐条核对。;清理后要改密码、打补丁并加WAF,否则数天内可能再次被挂。
网站被挂广告跳转怎么排查?从首页源码到定时任务 · 核心要点一图读懂(AegisX)

核心要点(TL;DR)

  • 先查首页源码与Nginx配置,多数广告跳转来自注入脚本或恶意rewrite规则。
  • 用grep与find按时间、特征串定位可疑文件,比逐个目录翻更快。
  • crontab与systemd定时任务常被用于维持跳转后门,必须逐条核对。
  • 清理后要改密码、打补丁并加WAF,否则数天内可能再次被挂。

辛辛苦苦做的站点,某天从搜索引擎点进来却跳到博彩或广告页,PC 端正常、手机端中招,后台还看不出异常——这是典型的网站被挂广告跳转。它通常不是单一文件问题,而是源码注入、Web 配置篡改、定时任务后门共同作用的结果。下面按“看得见→看不见”的顺序,给出一套可直接照做的入侵排查流程。

一、先看首页源码:定位注入点

浏览器打开首页,右键查看源代码,重点搜索以下特征:

  • window.location、location.href、document.write 等跳转语句
  • 来源不明的外链 JS,如 <script src="http://x.x.x/x.js">
  • 被压缩成一行的混淆代码、eval(、base64_decode

用命令行对比更可靠,模拟手机与蜘蛛 UA 请求:

curl -A "Mozilla/5.0 (iPhone; CPU iPhone OS 16_0)" -s http://yourdomain.com | grep -nE "location|script src"
curl -A "Baiduspider" -s http://yourdomain.com | head -50

若只有特定 UA 返回跳转,说明后门做了条件判断,继续查公共文件:header.php、footer.php、index.php、公共 JS 与统计代码片段。

二、查 Web 配置:rewrite 与代理劫持

Nginx/Apache 配置被改是广告跳转的常见入口,攻击者加一条 rewrite 就能让整站 302。

nginx -T 2>/dev/null | grep -nE "rewrite|return 30|proxy_pass"
grep -rnE "rewrite|Redirect|ProxyPass" /etc/nginx /etc/apache2 2>/dev/null

重点核对:是否出现指向陌生域名的 return 302、可疑的 if ($http_user_agent) 判断、以及被插入到 server 块的 include 文件。发现后先注释而非直接删除,便于回溯。

三、按时间与特征找落地文件

入侵者一般会在近期写入 webshell 或跳转脚本,用修改时间缩小范围:

find /var/www -type f -mtime -7 -name "*.php" -o -mtime -7 -name "*.js"
grep -rnE "eval\(|base64_decode|assert\(|system\(" /var/www --include=*.php

同时检查上传目录是否出现 .php 文件、是否有异常大文件或双扩展名(a.jpg.php)。命中可疑文件先 cp 备份再隔离,不要直接 rm,保留证据。

四、定时任务与自启动:揪出维持后门

很多跳转清理后几小时复发,问题就在定时任务。逐项核对:

crontab -l
cat /etc/crontab
ls -l /etc/cron.d /etc/cron.hourly
systemctl list-timers --all

含 curl、wget、base64、/tmp/ 路径的条目高度可疑。处理顺序:备份 crontab → 注释可疑行 → 删除对应下载脚本 → 观察 24 小时。同时检查 /etc/rc.local、用户 .bashrc 是否被追加启动命令。

五、账号与日志收尾

查登录记录与新增账号,确认入侵路径:

last -n 30
grep "Accepted" /var/log/auth.log | tail -20
awk -F: '>=1000{print }' /etc/passwd

发现陌生账号立即锁定,改掉 SSH、数据库、CMS 后台口令,并禁用密码登录。清理完成后用 curl 多 UA 复测首页,确认跳转消失。

六、加固清单与行动建议

检查项动作
源码与公共文件比对备份,还原被注入文件
Web 配置清理恶意 rewrite,限制 include
定时任务删除可疑条目并留存备份
账号口令全量改密,禁用密码登录
上传目录设为不可执行,关闭写入

建议今天就完成两件事:一是按上文顺序做一次完整排查并备份日志;二是给站点加上持续防护,例如 AegisX 的 Web 攻击拦截与文件变更监测,能在注入和配置篡改发生时第一时间告警,避免广告跳转反复出现。

常见问题(FAQ)

网站首页正常,但手机访问会跳到广告页,是什么原因?

大概率是UA或Referer条件触发的恶意跳转。攻击者常在公共JS、PHP文件头部插入判断,仅对移动端或搜索引擎来源返回跳转,PC直接访问看不出来。排查时用curl带手机UA请求首页,对比返回内容与源码,重点检查被引用的JS文件与header.php、footer.php等公共文件。

怎么快速确认网站是否被挂了跳转后门?

用特征串批量搜索最快。在站点根目录执行grep -rnE "window.location|location.href|eval\(|base64_decode" --include=*.php --include=*.js .,再结合find按修改时间筛出近期变更文件。同时用curl -A模拟百度蜘蛛与手机UA请求首页,观察是否返回302或JS跳转,两者结合基本能定位入口。

定时任务里的可疑条目可以直接删除吗?

建议先备份再删除。执行crontab -l与cat /etc/crontab、ls /etc/cron.d记录全部条目,对含curl、wget、base64、/tmp路径的行重点标记。删除前把原内容保存到本地,便于溯源分析;删除后观察一两天,确认跳转未复现,再清理对应的下载脚本与落地文件。

清理完跳转后如何防止再次被挂?

三件事必须做:一是改掉SSH、数据库、后台全部弱口令并禁用密码登录;二是升级CMS、插件与系统组件,修补已知漏洞;三是部署WAF对上传与命令执行做拦截。另外关闭不必要的目录写入权限,把上传目录设为不可执行,能显著降低二次入侵概率。

没有安全经验,能自己排查广告跳转吗?

可以按顺序做基础排查:先看首页源码有无异常脚本,再查Nginx配置有无可疑rewrite,然后看定时任务与近期改动文件。若发现webshell或无法判断的文件,建议先整站与数据库备份,再请专业应急人员介入,避免误删导致业务中断。日常可接入AegisX类防护做持续监测。