• Fastadmin前台Getshell漏洞分析


    Fastadmin前台Getshell漏洞分析

    0x01 简介

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

    影响版本:V1.0.0.20180911_beta - V1.0.0.20200506_beta

    这里使用使用 V1.0.0.20200506_beta版本复现

    0x02 漏洞分析

    漏洞利用条件:usercenter=>true

    漏洞文件:applicationindexcontrollerUser.php

    image-20200926102335862

    _empty函数接收$name遍历,直接将$name返回视图中:return $this->view->fetch($name);

    攻击者可通过上传文件,例如图片,传入$namefetch模板进行php模板解析,导致getshell

    hinkphplibrary hinkviewdriverThink.php中的渲染fetch实际使用的是thinkphp的解析模板函数,内容如下:

    image-20200926102849492

    在验证是否为模板文件,可以看到if (!is_file($template)) ,来判断是否存在,如果存在就将文件进行php解析。

    关于is_file()函数,可以参考:https://www.php.net/manual/zh/function.is-file.php

    不同操作系统解析文件路径的时候,linux和windwos is_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 以上的文件,一些文件系统函数可能返回无法预期的结果)

    0x03 漏洞利用

    首先在前台创建一个用户,然后修改个人资料,上传一张图片马

    image-20200926105305739

    图片马

    image-20200926105438923

    构造Payload:index/user/_empty?name=../../public/uploads/[图片路径]

    访问url:http://127.0.0.1:9999/fastadmin-v1.0.0.20200506/fastadmin/public/index/user/_empty?name=../../public/uploads/20200926/4a91d432904c0042bcd038ea96ad4947.jpg

    image-20200926104102258

    is_file()linux/user目录不存在,所以无法利用,除非可以创建或存在,可以手工创建public下创建user目录

    windows下通杀。

    0x04 漏洞修复

    目前官网下载的已更新,漏洞修复了

    修复方案

    打开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);
        }
    

    官方修复网址:https://www.fastadmin.net/news/83.html

    参考链接:https://github.com/karsonzhang/fastadmin/issues/73?spm=a2c4g.11174386.n2.3.428c1051tmy0pT

  • 相关阅读:
    JavaScript初学者应注意的七个细节
    8个高质量图标的最佳搜索引擎
    Adobe CS5 For Mac综合贴(2011/01/22更新)
    http://apps.hi.baidu.com/share/detail/18571966
    不要使用@import
    【leetcode】Search in Rotated Sorted Array
    【leetcode】Excel Sheet Column Title
    C#Tcp多个客户端与服务器数据与文件传输
    唯一分解定理
    欧拉函数
  • 原文地址:https://www.cnblogs.com/thresh/p/13743098.html
Copyright © 2020-2023  润新知