fastadmin--upload getshell
字数 1276 2025-08-09 13:33:52

FastAdmin 文件上传漏洞分析与利用教学

漏洞概述

本教学文档详细分析FastAdmin框架中存在的文件上传漏洞(CVE未分配),该漏洞允许攻击者在特定条件下通过后台文件上传功能获取服务器Shell权限。文档包含环境搭建、漏洞分析、利用方法及修复建议。

环境搭建

所需环境

  1. FastAdmin完整包(下载地址:https://www.fastadmin.net/download.html)
  2. PHPStudy或其他PHP集成环境
  3. 可选:Ubuntu/Debian系统用于完整漏洞利用

安装步骤

  1. 下载FastAdmin完整包
  2. 将包解压至PHPStudy的www目录
  3. 访问安装页面,填写数据库等信息完成安装
  4. 注意:新版本安装后会对后台路径进行重命名处理

漏洞分析

漏洞位置

application/admin/controller/Ajax.php 文件中的文件上传功能

核心代码分析

  1. 上传处理入口 (Ajax.php#107)
$upload = new Upload();
$upload->upload($file);
  1. Upload类初始化 (application/common/library/Upload.php)
$this->config = Config::get('upload');
  1. 文件后缀处理 (setFile方法)
$file['ext'] = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
if (preg_match('/^[a-z0-9]+$/', $file['ext'])) {
    // 合法后缀
} else {
    $file['ext'] = 'file'; // 非法后缀重命名
}
  1. 可执行文件检查 (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');
}
  1. 文件类型检查 (checkMimetype方法)
$mimetypeArr = explode(',', strtolower($this->config['mimetype']));
// 允许的MIME类型:jpg,png,bmp,jpeg,gif,zip,rar,xls,xlsx,wav,mp4,mp3,pdf

漏洞原理

  1. 文件上传时存在两处校验:

    • 文件后缀黑名单(php, html, htm)
    • 文件MIME类型白名单
  2. 逻辑缺陷:

    • 校验条件为"或"关系而非"与"关系
    • 只需满足MIME类型校验即可绕过后缀检查

漏洞利用

利用条件

  1. 获取后台管理员权限
  2. 服务器为Ubuntu/Debian系统(Apache默认配置解析.phtml)

利用步骤

  1. 正常上传图片文件

    • 访问后台分类管理->添加
    • 上传正常图片文件
  2. BurpSuite拦截修改

    POST /admin/ajax/upload HTTP/1.1
    Content-Type: multipart/form-data
    
    --修改点--
    1. 修改文件后缀为.phtml
    2. 修改Content-Type为image/jpeg
    3. 文件内容替换为PHP代码
    
  3. 绕过检查关键点

    • 文件后缀改为.phtml
    • Content-Type设置为白名单中的类型(如image/jpeg
    • 文件内容包含恶意PHP代码
  4. 访问上传文件

    • 上传成功后返回文件路径
    • 直接访问该.phtml文件执行代码

限制说明

  1. 仅Ubuntu/Debian系统Apache默认配置可解析.phtml
  2. 文件名为MD5加密生成,无法预测
  3. 无法通过上传.htaccess或.user.ini进行利用

修复方案

FastAdmin官方已在v1.2.2.20211011_beta版本修复此漏洞:

  1. 下载最新版:https://github.com/karsonzhang/fastadmin/releases/tag/v1.2.2.20211011_beta
  2. 主要修复点:
    • 将校验条件改为严格"与"关系
    • 加强文件类型和后缀的匹配验证

防御建议

  1. 及时升级到最新版本
  2. 加强后台访问控制
  3. 服务器配置:
    • 禁用不必要的文件解析(如.phtml)
    • 设置上传目录不可执行
    • 使用WAF防护

总结

该漏洞利用条件较为苛刻,但揭示了Web应用开发中文件上传功能的安全重要性。开发者应严格验证文件类型和后缀,采用白名单机制,并确保服务器配置安全。

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类初始化 ( application/common/library/Upload.php ) 文件后缀处理 ( setFile 方法) 可执行文件检查 ( checkExecutable 方法) 文件类型检查 ( checkMimetype 方法) 漏洞原理 文件上传时存在两处校验: 文件后缀黑名单(php, html, htm) 文件MIME类型白名单 逻辑缺陷: 校验条件为"或"关系而非"与"关系 只需满足MIME类型校验即可绕过后缀检查 漏洞利用 利用条件 获取后台管理员权限 服务器为Ubuntu/Debian系统(Apache默认配置解析.phtml) 利用步骤 正常上传图片文件 访问后台分类管理->添加 上传正常图片文件 BurpSuite拦截修改 绕过检查关键点 文件后缀改为 .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应用开发中文件上传功能的安全重要性。开发者应严格验证文件类型和后缀,采用白名单机制,并确保服务器配置安全。