FastAdmin前台文件上传
字数 1131 2025-08-05 13:25:37
FastAdmin前台文件上传漏洞分析及利用教学文档
漏洞概述
FastAdmin是一款基于ThinkPHP和Bootstrap的极速后台开发框架。2021年3月28日,360漏洞云漏洞研究员发现FastAdmin框架存在有条件RCE漏洞,当攻击者具有一定用户权限的前提下,可以实现任意文件上传,导致远程代码执行(RCE)。
漏洞影响范围
FastAdmin版本 < V1.2.0.20210401_beta
漏洞条件
- 具有上传权限的账户
- 开启分片传输功能(默认关闭)
漏洞位置
漏洞文件位于:application/api/controller/Common.php
漏洞原理分析
分片上传机制
FastAdmin的前台文件上传功能提供了分片传输功能,但在合并分片文件时对文件路径的拼接处理不当,导致可以上传任意文件。
关键代码流程
- 上传文件时如果POST传递
chunkid参数即可进行分片文件传输 - 系统会调用
Upload#chunk方法,参数均可控
chunk方法分析
- 首先检查
Content-Type是否为application/obtet-stream,否则抛出UploadException异常 - 拼接分片文件存储路径为
runtime/chunks - 文件命名格式为:
$chunkid + "-" + $chunkindex + ".part"- 例如:传递
$chunkid为hhh.php,$chunkindex为0,则分片文件名为hhh.php-0.part
- 例如:传递
merge方法分析
- 当
$action为merge时会调用Upload#merge方法合并分片文件 - 将分片文件路径和
$chunkid拼接 - 合并所有分片文件
漏洞利用步骤
- 准备一个恶意PHP文件(如webshell)
- 将文件分片上传:
- 设置
chunkid为恶意文件名(如shell.php) - 设置
chunkindex为分片序号
- 设置
- 调用merge方法合并分片文件
- 由于路径拼接不当,最终会在web目录生成可执行的PHP文件
漏洞利用脚本
参考FastAdmin_Upload漏洞利用脚本(具体脚本内容未在原文中详细给出)
修复方案
- 关闭分片传输功能(如果不需要)
- 对
chunkid参数做严格的正则判断,防止恶意文件名- 例如限制只能包含字母、数字和特定安全字符
- 禁止包含特殊字符和文件扩展名
防御建议
- 及时升级到修复版本(V1.2.0.20210401_beta或更高)
- 实施最小权限原则,严格控制文件上传权限
- 对上传文件进行严格的类型检查和内容验证
- 将上传文件存储在非web可访问目录,或配置服务器禁止执行上传目录中的脚本