溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

ThinkPHP6.0任意文件如何創(chuàng)建Getshell復(fù)現(xiàn)

發(fā)布時間:2021-10-11 11:15:18 來源:億速云 閱讀:500 作者:柒染 欄目:大數(shù)據(jù)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)ThinkPHP6.0任意文件如何創(chuàng)建Getshell復(fù)現(xiàn),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

0x01 簡介    
ThinkPHP框架是MVC結(jié)構(gòu)的開源PHP框架,遵循Apache2開源協(xié)議發(fā)布,是為了敏捷WEB應(yīng)用開發(fā)和簡化企業(yè)應(yīng)用開發(fā)而誕生的。該漏洞源于ThinkPHP 6.0的某個邏輯漏洞,成功利用此漏洞的攻擊者可以實現(xiàn)“任意”文件創(chuàng)建,在特殊場景下可能會導(dǎo)致GetShell。          


0x02 漏洞概述      
   

2020年1月10日,ThinkPHP團隊發(fā)布一個補丁更新,修復(fù)了一處由不安全的SessionId導(dǎo)致的任意文件操作漏洞。該漏洞允許攻擊者在目標(biāo)環(huán)境啟用session的條件下創(chuàng)建任意文件以及刪除任意文件,在特定情況下還可以getshell。


0x03 影響版本

ThinkPHP 6.0.0-6.0.1


0x04 環(huán)境搭建

1、安裝Composer      
下載Composer-Setup.exe      
     
https://getcomposer.org/download/
     


執(zhí)行安裝文件,選擇php.exe位置,即可安裝成功      
     


ThinkPHP6.0任意文件如何創(chuàng)建Getshell復(fù)現(xiàn)


composer拉取環(huán)境有時候可能會卡住,可以換國內(nèi)鏡像      
     

     
composer config -g repo.packagist composer https://packagist.phpcomposer.com
     


     

2、安裝thinkphp

composer create-project topthink/think tp6 (tp6自定義)
     

     

出現(xiàn)報錯可參考:

http://www.jrnw.net/index.php/2019/05/30/thinkphp6%E6%A1%86%E6%9E%B6%E6%BA%90%E7%A0%81%E7%9A%84%E4%B8%8B%E8%BD%BD%E4%B8%8E%E5%AE%89%E8%A3%85%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B/
     


     

3、版本選擇

將 tp6/composer.json 文件的 "topthink/framework": "^6.0.0" 改成 6.0.0 版本,并執(zhí)行更新命令


     
進入tp6目錄cd tp6composer update
     

     

PS:

  • 如果是linux 就再執(zhí)行啟動環(huán)境 :./think run --host=0.0.0.0 --port=8000

  • 如果不能拉取到環(huán)境,公眾號內(nèi)回復(fù)“tp60環(huán)境”獲取


0x05 漏洞利用

首先在得到可控session參數(shù)名,這是本地構(gòu)造的,實戰(zhàn)需要自己fuzz。      

構(gòu)造位置:tp60\app\controller\Index.php      


需要增加構(gòu)造的內(nèi)容:


     
use think\facade\Session;Session::set('user',$_GET['username']);
     

     

ThinkPHP6.0任意文件如何創(chuàng)建Getshell復(fù)現(xiàn)


     
開啟session且寫入的session可控      
/tp6/app/middleware.php 文件開啟session      
去掉注釋session的//      

      ThinkPHP6.0任意文件如何創(chuàng)建Getshell復(fù)現(xiàn)      
     


構(gòu)造請求:      
username就是我們剛才構(gòu)造的接受參數(shù),然后將PHPSESSID的值修改為32位的保存路徑      

      ThinkPHP6.0任意文件如何創(chuàng)建Getshell復(fù)現(xiàn)      
     

ThinkPHP6.0任意文件如何創(chuàng)建Getshell復(fù)現(xiàn)


我們通過poc打了之后,就可以訪問一下public下的文件    


ThinkPHP6.0任意文件如何創(chuàng)建Getshell復(fù)現(xiàn)


0x06 坑點

1、本地測試localhost失敗

問題:

     當(dāng)我們用localhost去測試poc的時候,請求中自帶cookie,即使修改也沒用

解決:

      通過IP去測試,127.0.0.1 或者內(nèi)網(wǎng)IP

2、shell選擇

問題:

      在最新版的phpstudy測試菜刀馬失敗

解決:

      冰蝎的shell可以用。


0x07 修復(fù)方式

官方給出方案

對session id 加一個過濾,使用ctype_alnum()

$this->id = is_string($id) && strlen($id) === 32 ctype_alnum($id) && ? $id : md5(microtime(true) . session_create_id());

上述就是小編為大家分享的ThinkPHP6.0任意文件如何創(chuàng)建Getshell復(fù)現(xiàn)了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI