记一次小程序cms安全事件应急响应
字数 2187 2025-08-09 09:46:33
小程序CMS安全事件应急响应与漏洞分析教学文档
1. 事件概述
事件时间:2021年11月16日发现
受影响系统:基于ThinkPHP 5.0.10框架的小程序管理系统(xcx.test.cn)
攻击后果:
- index.php被修改,在head内添加了非法meta标签和修改title标签
- 导致搜索引擎爬取不良内容,影响搜索结果
- 确认多个Webshell被植入
2. 应急响应步骤
2.1 立即处置措施
- 暂停服务:关闭Apache与MySQL服务
- 通知用户系统维护
2.2 现场环境保存
- 备份站点和数据库
- 使用腾讯云COSFS插件转储大容量备份文件
- 下载备份到本地分析
2.3 日志提取
- 提取路径:
/www/wwwlogs/xcx.test.cn/ - 关键日志文件:
- xcx.test.cn-access_log
- xcx.test.cn-error_log
2.4 文件系统分析
使用find命令检索被修改文件:
find . -mtime -300 -name "*.php"
发现三个被修改/添加的PHP文件:
- index.php(首页被篡改)
- /public/plugin/PHPExcel/PHPExcel/CalcEngine/index.php(Webshell)
- /public/webuploader/server/preview/dd887179e09b2326595305d8dd475763.php(初始Webshell)
3. Webshell分析
3.1 Webshell 1: CalcEngine/index.php
功能分析:
- s函数:对$dapeng字符串进行rot13解码
- m函数与get1_str函数:eval执行PHP代码
- 组合变量\(dp和\)dapeng1成新的系统函数
- 将rot13解码的字符串从十六进制转换为可执行PHP代码
恶意行为:
- 备份网站首页为index.bk.html
- 修改index.php权限为0666(所有用户可读写)
- 便于后续篡改首页内容
3.2 Webshell 2: dd887179e09b2326595305d8dd475763.php
特征:
- PHP远程文件包含+eval执行
- 位于上传目录/public/webuploader/server/preview/
- 文件名是文件内容的MD5值
关联分析:
- 黑客可能利用webuploader下的上传漏洞上传此文件
- 相关上传文件可能包括:
- fileupload.php
- fileupload2.php
- preview.php
4. 攻击溯源分析
4.1 日志分析关键点
- 发现preview.php被重命名为presiew.php(混淆手段)
- 筛选200状态码的preview.php访问记录:
- 浙江省金华市IP(疑似真实攻击源)
- 腾讯云IP
- 异常User-Agent特征:
- "Mac OS X 10_15_7":长期扫描行为(2021.6.21-2021.11.16)
- "Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/2X.0":与Webshell修改时间完全重合
4.2 攻击时间线
- 11月1日:首次渗透,上传dd887179e09b2326595305d8dd475763.php
- 11月15日23:16分:通过Webshell修改public/index.php
4.3 发现的后门文件
- 111.php
- banner3.php(经典大马)
- picture3_6.php(内容与preview.php一致)
- config.php(通过$_REQUEST[admin]传参到eval函数实现命令执行)
5. 漏洞分析:preview.php
5.1 关键漏洞
-
权限校验缺失:
- 文件首行应有session管理员校验,但实际未实现
- 导致越权漏洞:知道路径即可上传文件
-
文件后缀无限制:
// 无任何过滤,可直接上传PHP文件 $type = $_POST['type']; // 文件后缀 $base64 = $_POST['file']; // 文件内容 -
文件内容无校验:
- 上传文件名仅为文件内容的MD5值
- 可直接写入PHP代码如
<?php phpinfo();?>
5.2 攻击复现
攻击payload:
data:image/php;base64,PD9waHAgcGhwaW5mbygpOz8+
利用方式:
- 直接访问preview.php路径
- 通过POST上传任意PHP文件
- 文件被保存为MD5值命名的.php文件
6. 修复建议
6.1 代码层面
-
对preview.php增加:
- Session管理员权限校验
- 严格的文件后缀白名单过滤
- 文件内容安全检查
-
审计所有上传接口:
- fileupload.php
- fileupload2.php
- 其他可能的上传点
6.2 系统配置
-
目录权限控制:
- 禁止/preview/和/upload/目录执行PHP
- 设置适当的文件权限(避免0666)
-
访问控制:
- 禁止非中国大陆IP访问管理功能
- 设置WAF规则拦截异常User-Agent
6.3 监测与响应
- 部署文件完整性监控
- 建立日志分析机制,检测异常访问模式
- 定期安全审计和渗透测试
7. 总结
本次事件源于文件上传功能的多重安全缺陷:
- 权限校验缺失导致未授权访问
- 文件类型检查不严格允许上传PHP
- 上传目录可执行脚本
- 缺乏输入验证和过滤
通过完整的日志分析和文件系统检查,成功追踪到攻击路径和攻击者使用的技术手段。修复方案应从代码安全和系统配置两方面入手,建立多层防御体系。