前言
最近发现网站在移动端访问时会偶发性跳转至非法站点,且在浏览器无痕模式下触发频率极高。经过排查发现这不仅是一次简单的源码篡改,而是一场集 Nginx Lua 脚本注入、字符串反转混淆、Linux 文件属性锁、以及 SSH 免密后门于一体的高阶攻击。本文记录了从定位毒源到彻底清算的全过程。
一、 症状表现
- 定向打击:仅移动端 UA 触发跳转,PC 端正常。
- 内存注入:网页源代码、数据库、PHP 文件均无异常,但 F12 抓包可见返回的 HTML 末尾被注入了恶意 JS。
- 隐身逻辑:通过 Cookie 记录访问状态,同一 IP 每天只跳一次,增加排查难度。
二、 排查与解密过程
定位毒源:Nginx 模块与 Lua 注入
通过nginx -V发现服务器加载了lua_nginx_module。进一步搜索发现 Nginx 配置文件中挂载了可疑的 Lua 脚本:# 搜索 Nginx 配置中的 Lua 调用 grep -rnE "lua_package_path|lua_file|by_lua" /www/server/nginx/conf/发现关键行:
access_by_lua_file /www/server/nginx/html/waf.lua;代码解密:反转字符串混淆
查看waf.lua源码发现,黑客将跳转域名通过string.reverse进行了反转加密,导致直接grep关键词失效:# 恶意代码: local R1 = "lmth.naim/eno.statsih//:sptth"解密后:
https://histats.one/mian.html
三、 攻防实战:粉碎“不死”后门
破解文件属性锁
黑客使用chattr +i给恶意脚本和 Nginx 配置文件加了锁,导致 root 用户也无法删除(报错Operation not permitted)。# 查看文件特殊属性 lsattr /www/server/nginx/html/waf.lua # 强制解除锁定(减去 i 属性) chattr -i /www/server/nginx/html/waf.lua chattr -i /www/server/nginx/conf/proxy.conf # 随后执行删除或修改 rm -f /www/server/nginx/html/waf.lua清理 Nginx 配置引信
删除文件后,必须移除配置文件中的调用逻辑,否则 Nginx 会启动失败:# 使用 sed 命令快速删除 proxy.conf 中的恶意行 sed -i '/waf.lua/d' /www/server/nginx/conf/proxy.conf # 测试配置并重启 nginx -t /etc/init.d/nginx restart拔掉 SSH 永久后门
检查发现黑客在authorized_keys中注入了公钥,并创建了影子账号 springboot。# 清空免密登录公钥并锁死文件 > ~/.ssh/authorized_keys chattr +i ~/.ssh/authorized_keys # 删除可疑影子账号 userdel -r springboot四、 战后总结与安全加固
面对此类 Root 级别的入侵,建议采取以下“断源”措施:
- 修改 SSH 默认端口:避开
22端口的暴力破解。 - 重装 Nginx(编译安装):确保二进制文件和
.so库没被替换。 - 面板加固:修改宝塔面板的默认登录地址、端口及账号密码。
- 全盘扫描:检查
crontab -l是否有定时下载恶意脚本的任务。

- 修改 SSH 默认端口:避开