前言

最近发现网站在移动端访问时会偶发性跳转至非法站点,且在浏览器无痕模式下触发频率极高。经过排查发现这不仅是一次简单的源码篡改,而是一场集 Nginx Lua 脚本注入、字符串反转混淆、Linux 文件属性锁、以及 SSH 免密后门于一体的高阶攻击。本文记录了从定位毒源到彻底清算的全过程。


一、 症状表现

  1. 定向打击:仅移动端 UA 触发跳转,PC 端正常。
  2. 内存注入:网页源代码、数据库、PHP 文件均无异常,但 F12 抓包可见返回的 HTML 末尾被注入了恶意 JS。
  3. 隐身逻辑:通过 Cookie 记录访问状态,同一 IP 每天只跳一次,增加排查难度。

二、 排查与解密过程

  1. 定位毒源: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;

  2. 代码解密:反转字符串混淆
    查看waf.lua源码发现,黑客将跳转域名通过string.reverse进行了反转加密,导致直接grep关键词失效:

    # 恶意代码:
    local R1 = "lmth.naim/eno.statsih//:sptth"

    解密后:https://histats.one/mian.html


三、 攻防实战:粉碎“不死”后门

  1. 破解文件属性锁
    黑客使用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
  2. 清理 Nginx 配置引信
    删除文件后,必须移除配置文件中的调用逻辑,否则 Nginx 会启动失败:

    # 使用 sed 命令快速删除 proxy.conf 中的恶意行
    sed -i '/waf.lua/d' /www/server/nginx/conf/proxy.conf
    
    # 测试配置并重启
    nginx -t
    /etc/init.d/nginx restart
  3. 拔掉 SSH 永久后门
    检查发现黑客在authorized_keys中注入了公钥,并创建了影子账号 springboot。

    # 清空免密登录公钥并锁死文件
    > ~/.ssh/authorized_keys
    chattr +i ~/.ssh/authorized_keys
    
    # 删除可疑影子账号
    userdel -r springboot

    四、 战后总结与安全加固

    面对此类 Root 级别的入侵,建议采取以下“断源”措施:

    • 修改 SSH 默认端口:避开22端口的暴力破解。
    • 重装 Nginx(编译安装):确保二进制文件和.so库没被替换。
    • 面板加固:修改宝塔面板的默认登录地址、端口及账号密码。
    • 全盘扫描:检查crontab -l是否有定时下载恶意脚本的任务。

    请输入图片描述