Fastadmin前台Getshell漏洞分析

2022-07-13 12:09:06 字數 2177 閱讀 6531

fastadmin是一款基於thinkphp5+bootstrap開發的極速後台開發框架。fastadmin基於apache2.0開源協議發布,目前被廣泛應用於各大行業應用後台管理。

影響版本:v1.0.0.20180911_beta - v1.0.0.20200506_beta

這裡使用使用 v1.0.0.20200506_beta版本復現

漏洞利用條件:usercenter=>true

_empty函式接收$name遍歷,直接將$name返回檢視中:return $this->view->fetch($name);

攻擊者可通過上傳檔案,例如,傳入$namefetch模板進行php模板解析,導致getshell

\thinkphp\library\think\view\driver\think.php中的渲染fetch實際使用的是thinkphp的解析模板函式,內容如下:

在驗證是否為模板檔案,可以看到if (!is_file($template)),來判斷是否存在,如果存在就將檔案進行php解析。

關於is_file()函式,可以參考:

不同作業系統解析檔案路徑的時候,linux和windwosis_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 以上的檔案,一些檔案系統函式可能返回無法預期的結果)

首先在前台建立乙個使用者,然後修改個人資料,上傳一張馬

訪問url:

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

windows下通殺。

修復方案

一種修復方法是直接移除_empty方法,

另一種是將_empty方法改為

public function _empty($name)

$data = hook::listen("user_request_empty", $name);

foreach ($data as $index => $datum)

return $this->view->fetch('user/' . $name);

}

官方修復**:

Fastadmin前台Getshell漏洞復現

一 簡介 fastadmin是一款基於thinkphp5 bootstrap開發的極速後台開發框架。fastadmin基於apache2.0開源協議發布,目前被廣泛應用於各大行業應用後台管理。二 漏洞復現 注 在linux下,通過這種方法會失效,因為在 public 路徑下不存在 user 目錄 1...

FastAdmin 目錄分類

project 應用部署目錄 admin command 新增控制台命令 controller lang zh cn 控制器對應語言包,按需載入 general index.php page.php zh cn.php 後台語言包,預設載入 library auth.php 後台許可權驗證類 tra...

FastAdmin使用建議

1.規劃好資料表 直接用命令建立後台管理選單 生成fa test表的crud php think crud t test 生成fa test表的crud且一鍵生成選單 php think crud t test u 1 刪除fa test表生成的crud php think crud t test ...