fastadmin--upload getshell
字数 1276 2025-08-09 13:33:52
FastAdmin 文件上传漏洞分析与利用教学
漏洞概述
本教学文档详细分析FastAdmin框架中存在的文件上传漏洞(CVE未分配),该漏洞允许攻击者在特定条件下通过后台文件上传功能获取服务器Shell权限。文档包含环境搭建、漏洞分析、利用方法及修复建议。
环境搭建
所需环境
- FastAdmin完整包(下载地址:https://www.fastadmin.net/download.html)
- PHPStudy或其他PHP集成环境
- 可选:Ubuntu/Debian系统用于完整漏洞利用
安装步骤
- 下载FastAdmin完整包
- 将包解压至PHPStudy的www目录
- 访问安装页面,填写数据库等信息完成安装
- 注意:新版本安装后会对后台路径进行重命名处理
漏洞分析
漏洞位置
application/admin/controller/Ajax.php 文件中的文件上传功能
核心代码分析
- 上传处理入口 (
Ajax.php#107)
$upload = new Upload();
$upload->upload($file);
- Upload类初始化 (
application/common/library/Upload.php)
$this->config = Config::get('upload');
- 文件后缀处理 (
setFile方法)
$file['ext'] = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
if (preg_match('/^[a-z0-9]+$/', $file['ext'])) {
// 合法后缀
} else {
$file['ext'] = 'file'; // 非法后缀重命名
}
- 可执行文件检查 (
checkExecutable方法)
if (in_array($file['ext'], ['php', 'html', 'htm']) ||
in_array($file['type'], ['text/x-php', 'text/html'])) {
throw new Exception('Uploaded file format is limited');
}
- 文件类型检查 (
checkMimetype方法)
$mimetypeArr = explode(',', strtolower($this->config['mimetype']));
// 允许的MIME类型:jpg,png,bmp,jpeg,gif,zip,rar,xls,xlsx,wav,mp4,mp3,pdf
漏洞原理
-
文件上传时存在两处校验:
- 文件后缀黑名单(php, html, htm)
- 文件MIME类型白名单
-
逻辑缺陷:
- 校验条件为"或"关系而非"与"关系
- 只需满足MIME类型校验即可绕过后缀检查
漏洞利用
利用条件
- 获取后台管理员权限
- 服务器为Ubuntu/Debian系统(Apache默认配置解析.phtml)
利用步骤
-
正常上传图片文件
- 访问后台分类管理->添加
- 上传正常图片文件
-
BurpSuite拦截修改
POST /admin/ajax/upload HTTP/1.1 Content-Type: multipart/form-data --修改点-- 1. 修改文件后缀为.phtml 2. 修改Content-Type为image/jpeg 3. 文件内容替换为PHP代码 -
绕过检查关键点
- 文件后缀改为
.phtml - Content-Type设置为白名单中的类型(如
image/jpeg) - 文件内容包含恶意PHP代码
- 文件后缀改为
-
访问上传文件
- 上传成功后返回文件路径
- 直接访问该.phtml文件执行代码
限制说明
- 仅Ubuntu/Debian系统Apache默认配置可解析.phtml
- 文件名为MD5加密生成,无法预测
- 无法通过上传.htaccess或.user.ini进行利用
修复方案
FastAdmin官方已在v1.2.2.20211011_beta版本修复此漏洞:
- 下载最新版:https://github.com/karsonzhang/fastadmin/releases/tag/v1.2.2.20211011_beta
- 主要修复点:
- 将校验条件改为严格"与"关系
- 加强文件类型和后缀的匹配验证
防御建议
- 及时升级到最新版本
- 加强后台访问控制
- 服务器配置:
- 禁用不必要的文件解析(如.phtml)
- 设置上传目录不可执行
- 使用WAF防护
总结
该漏洞利用条件较为苛刻,但揭示了Web应用开发中文件上传功能的安全重要性。开发者应严格验证文件类型和后缀,采用白名单机制,并确保服务器配置安全。