前言
俗话说,“站着说话不腰疼”。
以前看别人发帖说服务器被黑,网站被挂马,我总在心里想:“肯定是密码太简单,或者用了什么破解版插件。”
直到2026年的这个6月,我亲手栽了一个大跟头。
这篇文章,我想记录下过去几天我是怎么渡过的。那种看着自己辛苦经营的网站被跳转到黄色网站,明明开着 SSH 却像被蒙上眼睛挨打的感觉,真的不想再体验第二次。
第一幕:诡异的流量与“502”噩梦
最初是我发现服务器负载飙升。
登录宝塔面板一看,CPU 占用率 100%。作为一名普通站长,我的第一反应是——被CC攻击了? 重启 Nginx 之后,负载确实降下来了。但诡异的事情接踵而至。
有用户私信我:“你们网站怎么了?点一下就跳转到澳门赌场和黄色直播?”
我心里咯噔一下。说实话,最怕的就是“涉黄”,这不仅会让百度降权,搞不好机房还会直接拔线。
我赶紧用手机模拟 User-Agent 测试(因为据说这种劫持专门针对移动端),果然,第一次访问正常,刷新一下,页面还没来得及加载完,浏览器标签页就开始疯狂旋转,最终跳转到了一个不堪入目的色情网站。
我打开浏览器 F12 开发者工具,查看 Network 面板,发现网站加载的 JS 文件不对劲。
在返回的 HTML 源码底部,多出了一段经过编码的恶意 JavaScript。这段脚本不仔细看根本发现不了,它混在正常的代码里,检查权限执行后就会在用户浏览器里加点“料” 。
第二幕:屠龙刀切豆腐——查不出的“隐形”木马
我开始了常规的“杀毒”流程:
查杀木马:我用遍了 ClamAV、LMD,以及宝塔自带的防火墙,结果都是——0 个威胁。
检查文件修改时间:我用 find 命令查找最近 24 小时内修改的 PHP 和 JS 文件,结果只找到了一些正常的日志和缓存。
重装 CMS:我甚至怀疑是程序有 0day,于是把整站程序删了,换上了几个月前的备份。结果,跳转依然存在。
这时候我意识到问题不在网站代码里。因为即使我放一个最简单的 hello.html 静态页面,它偶尔也会跳转。
唯一的可能就是——Nginx 本身,或者更底层的内核被人动了手脚。
第三幕:真相浮现——被“封印”的Nginx与内核漏洞
我发现一个更恐怖的现象:我居然卸载不掉 Nginx!
当我执行 apt remove nginx(我用的是 Ubuntu)时,系统报错:Unable to lock the administration directory (/var/lib/dpkg/), 权限不够? 或者干脆提示依赖关系错误 。
哪怕我用了 sudo pkill -9 nginx 强制杀掉进程,过不了几秒钟,它就像《终结者》里的液态金属机器人一样,又自动复活了。
我开始疯狂搜索近期的安全情报,越看越心凉。原来,在 2026 年 5 月底到 6 月初,安全圈爆出了两个极其致命的高危漏洞:
Nginx 核心漏洞 (CVE-2026-9256) : 这是在 ngx_http_rewrite_module 中存在的一个堆缓冲区溢出漏洞。简单说,攻击者只需要构造一个特殊的恶意 HTTP 请求,就能让 Nginx 崩溃,甚至直接在服务器上执行恶意代码。这解释了为什么我的 Nginx 会不受控制 。
Linux 内核提权漏洞 (CVE-2026-16467 / CIFSwitch) : 如果说上面那个漏洞只是打开了门,这个漏洞就是把钥匙交给黑客。这是一个针对 Linux 内核 CIFS 组件的本地权限提升漏洞。攻击者可以利用它将 www-data 权限直接提升到 root 。
结合这两个漏洞,我拼凑出了黑客的攻击路径:
黑客利用 Nginx 漏洞 (CVE-2026-9256) 打穿了我的 Web 服务,获取了低级权限。
然后,他们利用内核漏洞 (CVE-2026-16467) 提权到 root。
拿到 root 之后,他们在系统里植入了内核级的 Rootkit。这个 Rootkit 劫持了系统的文件读取函数。这就是为什么我看到的文件是“干净”的,但浏览器访问时却被注入了恶意代码——因为操作系统在返回文件内容的那一瞬间,被恶意模块篡改了数据包。
至于我为什么卸载不了 Nginx,是因为系统底层权限已经被劫持,黑客锁定了关键进程,常规的包管理工具根本无法介入 。
第四幕:最后的救赎——重装
在挣扎了几天后,我放弃了修复。
因为我面对的已经不是一段 PHP 木马,而是深埋在系统内核和 Nginx 二进制文件里的幽灵。我不知道他在 crontab 里藏了多少定时任务,不知道他在 /usr/bin/ 下替换了多少个系统命令(比如 ps、netstat 看到的都可能都是假象)。
我做了一个艰难但正确的决定——重装操作系统。
我先在云服务商后台创建了快照(以防万一),然后选择了“重装系统”。
注意:重装系统会格式化系统盘,所有数据都会丢失,操作前务必做好数据备份。
系统重置后,我做的第一件事不是去宝塔面板点几下鼠标,而是执行了以下操作:
修改 SSH 端口:改成了 5 位数的随机端口,并禁用了密码登录,只保留密钥登录。
升级核心软件:我不再使用系统自带的旧版 Nginx。我添加了官方源,确保安装的版本 >=1.31.1(针对 CVE-2026-9256 的修复版本),并且时刻关注内核更新 。
部署 WAF:在 Nginx 前面挡了一层雷池或者 ModSecurity,哪怕损失一点性能,也要把非常规请求拦住。
写在最后的一些真心话
这次经历让我明白了三件事:
不要迷信“杀毒”:当黑客拿到了 root 权限,服务器上的任何查杀软件都可能是瞎子和聋子。因为操作系统本身已经不可信了。
“跳黄”是最后的通牒:黑客在你服务器里植入色情跳转,不是为了恶心你,而是为了变现。这说明你的服务器已经完全在他的控制之下,他正在用你的流量权重来赚黑钱。
重装不是认输,是止损:面对内核级 Rootkit,与其花费几天几夜去手工查杀还不一定干净,不如花 30 分钟重装。对于没有专业安全团队的普通人来说,备份 + 重装是最有效的安全手段。
祸兮福所倚,这次算是花时间买了教训。服务器安全,真的永远是悬在站长头上的一把刀。
希望大家看完这篇文章,能去检查一下自己 Nginx 的版本,特别是还在用 1.20 甚至更低版本的兄弟们,该升级了,千万别等到像我这被搞到“关站重装”才后悔。
