FastAdmin前台分片传输上传文件Getshell

影响版本

FastAdmin < V1.2.0.20210401_beta

且开启分片传输功能(默认关闭)

漏洞复现

详看:https://xz.aliyun.com/t/9395

EXP:

https://github.com/exp1orer/FastAdmin_Upload

img

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)>编辑

img

条件规则处写入

可用file_put_contents或者copy等来写shell

创建一个低权限管理员 登录访问后台首页

https://xxx.app/admin/dashboard?ref=addtabs 成功执行代码

0x2 Getshell2

后台>插件管理>如果有文件管理器可直接上传shell

0X3 Getshell3

后台>插件管理>如果有命令执行插件

打开命令执行插件>一键生成API文档>如图

img

点击生成命令行 立即执行 会在根目录生成 api.php

0x4 Getshell 4

后台>插件管理>在Fastadmin官网去下载一个example插件压缩包 采用离线安装模式

打开下载的example插件压缩包 更改Example.php文件中

1
2
3
4
5
6
7
8
/**
* 插件启用方法
*/
public function enable()
{
file_put_contents('../public/1.php','<?php phpinfo();?>');
Menu::enable('example');
}

更改完成 离线上传安装 点击启用插件 会在根目录生成 1.php