首页博客实战笔记我的网站被“挂马”劫持了,而我在自己的浏览器里,一无所知
实战笔记

我的网站被“挂马”劫持了,而我在自己的浏览器里,一无所知

📅 2026年7月7日 ✏️ xiaoheiyun 🕐 1 分钟阅读 💬 0 评论

有人告诉你:你的网站在你眼里一切正常,但在 Google、必应和所有手机访客眼里,它正偷偷加载一个陌生域名的脚本——你信吗?

我不信。直到我亲手把它从服务器里挖出来。

这是一次真实的排查实录:从”为什么我的首页死活不被 Google 收录”,一路挖到一个藏在 nginx 里、专门骗搜索引擎的 root 级注入马。它躲过了我所有常规检查——换主题、关插件、扫 WordPress,全都查不出来。如果你也有个站,这篇能帮你看清一种你可能从没设防过的攻击。

一、疑点:一个怎么都不肯被收录的首页

我站里的内容页都能被 Google 收录,唯独首页,死活不进索引。

我在 Google Search Console 用”网址检查”,看它抓到的首页 HTML——就在这里,我看到一行不属于我的东西:

<script src="https://www.aoqmx.xyz/bootstrap.js"></script>

aoqmx.xyz。我从没听过这个域名,也从没往首页加过任何外部脚本。

二、第一个让我后背发凉的点:我自己打开,却什么都没有

我立刻用无痕窗口打开首页、查看源代码——干净的,没有那行脚本。换个浏览器,还是干净的。

诡异就在这:同一个页面,我看是干净的,Google 看却是带毒的。

这不是普通挂马,是”看人下菜碟”——专业叫法 cloaking(伪装 / 斗篷):只在特定条件下才注入,对着你时藏得死死的。它的逻辑长这样——

一个首页请求 navxd.com/ nginx-lua 斗篷 偷看你的 UA 再分流 (藏在 __.conf) 真人访客 Win/Mac 浏览器 干净页面 ✓ 爬虫 · 手机 搜索引擎/移动 UA 注入陌生脚本 ✗ aoqmx.xyz 真人看到的 搜索引擎 / 手机看到的
图1:同一个网址,两副面孔——cloaking 按 UA 分流

三、扫遍 WordPress,一无所获

按常规,挂马先查 WordPress:

  • 扫所有 .php 文件 —— 干净;
  • wp-config、主题、插件 —— 干净;
  • 关掉全部插件、换回默认主题 —— 那行脚本还在

大多数人到这一步会懵:代码里明明没有,它从哪冒出来的?答案是:它根本不在 WordPress 层。

四、grep 域名,居然搜不到

我上服务器,直接 grep "aoqmx"——什么都没搜到。可脚本明明在输出里。这只能说明一件事:这个域名在源码里,压根不是完整拼写的。

果然,真凶里它是这么写的(示意):

"htt".."ps://www.a".."oqmx.xy".."z/bootst".."rap.js"

把域名拆成一段段字符串、运行时才拼起来。你 grep 完整域名,永远搜不到。这是它躲过扫描的第一招。

五、真凶:藏在 nginx 里的一段 Lua

最后我把范围缩到 nginx。宝塔的 nginx 主配置里有一句:

include /www/server/panel/vhost/nginx/*.conf;

它会加载这个目录下所有 .conf。而目录里,躺着一个我从没建过的文件:__.conf,属主 root,改动时间几周前。打开它,是两段 Lua:

  • header_filter_by_lua:把响应的 Content-LengthContent-Security-Policy 头删掉——为注入腾地方、顺便绕过 CSP 防护;
  • body_filter_by_lua:在页面 body 里,按条件注入那段拼接域名的脚本。

而”按条件”,就是它的斗篷:只对非 Windows、非 Macintosh 的 UA(搜索引擎、手机)下发,只对 200/404 的 text/html,还避开后台路径。安卓 → 注入 aoqmx.xyz 脚本;iOS → 换成另一个域名的 iframe。而用 Windows/Mac 的你我,永远看不到。

也正因为它这么藏,我前面每一步排查才会全部扑空——

扫 WordPress 所有 .php 干净 —— 它根本不在 WordPress 层 换默认主题 / 关全部插件 还在 —— 它藏在 nginx,不在 WP grep 完整域名 aoqmx 搜不到 —— 域名拆成字符串躲检测 自己用无痕浏览器看 看不到 —— 只对搜索引擎/手机下发
图2:为什么常规排查全扑空

六、它到底图什么:借你的站,骗搜索引擎

这也解开了最初的谜——为什么首页死活不被收录。

搜索引擎爬到的,是一个被注入了陌生脚本、面向移动端的垃圾版本,跟真人看到的完全不是一个东西。而 cloaking 是搜索引擎明令禁止的作弊:一旦被识别,轻则不收录,重则降权。

换句话说:这匹马不只是在你站上偷挂广告、劫持流量,它还顺手把你的站在搜索引擎眼里搞臭了。而这一切,你在自己浏览器里,完全看不见。

七、怎么处置

  1. 先固定证据:把 __.conf 完整备份(万一要追溯/报案)。
  2. 中和它:内容清空成一句注释,让它失效。
  3. 锁死chattr +i 给文件加不可修改属性,攻击者想重新写入会直接失败。
  4. 加看门狗:每小时一个脚本,发现 nginx 里再冒出 body_filter_by_lua/注入特征,立刻隔离 + reload。
  5. 最关键的一步:这是 root 级入侵——能往 root 目录写文件,说明对方拿到了服务器高权限。善后绝不是删个文件就完,必须轮换全部凭证(SSH、面板、数据库),再排查有没有留其他后门。

八、给你的 5 分钟自查清单

如果你也有个站,花五分钟自查——尤其别只看浏览器

  1. 伪装成搜索引擎/手机去请求自己,看 HTML 有没有多余脚本:
    curl -A "Mozilla/5.0 (Linux; Android 10)" https://你的站/ | grep -iE "script src|iframe"

    再用普通桌面 UA 请求一次,两者不一样 → 高度可疑。

  2. 看 Google Search Console 的”网址检查”:它给你看的是搜索引擎真正抓到的 HTML,cloaking 在这里现原形。
  3. 检查 nginx 的 includeinclude ... *.conf 目录里有没有你不认识的文件、有没有 lua/body_filter 字样。
  4. 别只信”换主题关插件”——很多马根本不在 WordPress 层,扫 WP 永远查不到。

挂马最可怕的地方,从来不是它多高级,而是它专门被设计成让你看不见。你的站,可能此刻正两副面孔地活着,而你毫不知情。

如果你的网站也遇到:被挂马、突然不被收录、被爬虫刷崩,或者你隐约觉得不对劲却查不出来,可以找我聊。这类”藏在浏览器背后”的问题,我踩过,也挖出来过。

x
xiaoheiyun
NavXD 内容团队成员

获取更多 AI 工具洞察

订阅 NavXD Pro,每月获取完整趋势报告、深度分析和独家数据

了解 Pro →