Fastadmin前台Getshell方法
2023-6-1 11:22:37 Author: 白帽兔(查看原文) 阅读量:93 收藏

简介

FastAdmin是一款基于ThinkPHP5+Bootstrap开发的极速后台开发框架。
FastAdmin基于Apache2.0开源协议发布,目前被广泛应用于各大行业应用后台管理。

漏洞详情

影响版本
V1.0.0.20180911_beta - V1.0.0.20200506_beta
这里使用的是 V1.0.0.20200506_beta版本复现
漏洞分析
漏洞利用条件: usercenter=>true
漏洞形成文件: application/index/controller/User.php

_empty函数接收$name遍历,直接将$name返回视图中:return $this->view->fetch($name);攻击者可通过上传文件,例如图片,传入$name,fetch模板进行php模板解析,导致getshell。
thinkphp/library/think/view/driver/Think.php中的渲染fetch实际使用的是thinkphp的解析模板函数,内容如下:

在验证是否为模板文件时,可以看到 if(!is_file($temple)), 来判断是否存在,如果存在则将文件当成php进行解析
if_file 判断给定文件名是否为一个正常的文件,详细的关于 if_file() 函数可以参考一下
https://www.php.net/manual/zh/function.is-file.php
不同操作系统解析文件路径的时候,linux和windows 的 if_file() 函数实现起来会不一样
1、linux判断is_file() /demo/../../../../test 如果demo目录不存在,就会返回false;
windows则无论这个目录是否存在,均会返回true;
2、在linux下,is_file()函数判可用于判断符号链接
3、在linux下,is_file函数会受到权限的影响,当前用户权限不足或父目录没有设置+x权限时,is_file()会返回false
4、windows系统里面/和\ 都可以使用,但是在linux下只能使用/ 来分隔路径,因此这会导致is_file()在不同系统下的返回结果不一致
5、is_file()判断文件时,如果文件大小超过2^32时,会判断失败(PHP 的整数类型是有符号整型而且很多平台使用 32 位整型,对 2GB 以上的文件,一些文件系统函数可能返回无法预期的结果)

漏洞复现
1.首先在页面注册处创建一个用户,然后修改个人资料

2.进入个人资料处,点击编辑头像功能,并上传一张图片马

图片马的制作: copy 1.png/b+4.php/a 123.png



3.构造poc,/index/user/_empty?name=../../public/uploads/路径.png

http://127.0.0.1/FastAdmin_v1.0.0506/public/index/user/_empty?name=../../public/uploads/20210401/15502341dd7408f449a3be262e800084.png


4.成功将png文件当成php文件解析,也可以写入一句话木马然后getshell
漏洞修复
1.去官网下载最新的版本,该漏洞已成功修复
2.还有一种方法
打开application/index/controller/User.php,找到大概第58行的_empty方法,有以下两种修复方法:
一种修复方法是直接移除_empty方法
另一种是将_empty方法改为

public function _empty($name)
{
if (!preg_match("/^([a-z0-9_]+)$/i", $name)) {
$this->error(__(‘Invalid parameters‘));
}
$data = Hook::listen("user_request_empty", $name);
foreach ($data as $index => $datum) {
$this->view->assign($datum);
}
return $this->view->fetch(‘user/‘ . $name);
}

知识星球

知识星球:安全资源圈

星球福利:

立志做xdm的白嫖基地

星球包含:

1.最新0/1/nday漏洞分享

2.最新工具分享

3.各类实用文章

4.cnvd证书获取途径

5.各类poc/exp

6.内部福利活动,包含众测项目等

.....

立志做圈子内的白嫖基地

免责声明

本公众号文章以技术分享学习为目的。  

由于传播、利用本公众号发布文章而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号及作者不为此承担任何责任。  一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!


文章来源: http://mp.weixin.qq.com/s?__biz=MzA4NzUzNzgyMw==&mid=2247485813&idx=1&sn=55bef2c23a9ca147ffbab973d63abc87&chksm=9036a885a741219319cbe04192c83a97a6a67c9b47b9637ea2fba9aaeaed08da769dd944bdbe#rd
如有侵权请联系:admin#unsafe.sh