FastAdmin 前台分片传输上传文件 Getshell
影响版本
FastAdmin < V1.2.0.20210401_beta
且开启分片传输功能(默认关闭)
漏洞复现
详看:https://xz.aliyun.com/t/9395
EXP:
https://github.com/exp1orer/FastAdmin_Upload

Fastadmin _empty 前台文件包含 Getshell
前提:
开启⽤户注册
漏洞原因:
直接将 $name 参数带⼊到 fetch 函数,fetch 函数是 ThinkPHP 解析模版的函数,⾥⾯⽀持原⽣ PHP,所以造成 RCE,直接上传成功就可以调⽤这个点解析。Php 代玛可以和标益在模板⽂件中漏合使⽤,可以在模板⽂件⾥⾯千写任意的 P 句代码,包括下⾯两种⽅式:使⽤ php 标签 例如:
我们建这需要使⽤ PHP 代的时候尽量采⽤ hp 签,因为原⽣的 PHP 法可能会被配置禁⽤⽽导致解析错误。使⽤原⽣ php 代码
注意:php 标签或者 h 代码⾥⾯就不能再使⽤标签 (包普通标盗和么标) 了,因此下⾯的⼏种⽅式都是⽆效的;
FastAdmin 后台 Getshell
0x1 Getshell 1 需要超级管理员权限
打开菜单规则 > 菜单规则 (auth/rule)> 编辑

条件规则处写入
可用 file_put_contents 或者 copy 等来写 shell
创建一个低权限管理员 登录访问后台首页
https://xxx.app/admin/dashboard?ref=addtabs 成功执行代码
0x2 Getshell2
后台 > 插件管理 > 如果有文件管理器可直接上传 shell
0X3 Getshell3
后台 > 插件管理 > 如果有命令执行插件
打开命令执行插件 > 一键生成 API 文档 > 如图

点击生成命令行 立即执行 会在根目录生成 api.php
0x4 Getshell 4
后台 > 插件管理 > 在 Fastadmin 官网去下载一个 example 插件压缩包 采用离线安装模式
打开下载的 example 插件压缩包 更改 Example.php 文件中
PHP
/**
* 插件启用方法
*/
public function enable()
{
file_put_contents('../public/1.php','<?php phpinfo();?>');
Menu::enable('example');
}
更改完成 离线上传安装 点击启用插件 会在根目录生成 1.php