溫馨提示×

溫馨提示×

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

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

ThinkPHP命令如何執(zhí)行漏洞

發(fā)布時間:2021-10-11 10:59:29 來源:億速云 閱讀:199 作者:柒染 欄目:網(wǎng)絡管理

本篇文章給大家分享的是有關ThinkPHP命令如何執(zhí)行漏洞,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

ThinkPHP 官方 2018 年 12 月 9 日發(fā)布重要的安全更新,修復了一個嚴重的遠程代碼執(zhí)行漏洞。該更新主要涉及一個安全更新,由于框架對控制器名沒有進行足夠的檢測會導致在沒有開啟強制路由的情況下可能的 getshell 漏洞
受影響版本:5.x < 5.1.31, <= 5.0.23

漏洞分析

thinkphp 實驗版本:5.0.20
首先,先看看一下官方給出的補丁信息:
ThinkPHP命令如何執(zhí)行漏洞
大概猜測到這個漏洞是由于框架沒有對控制名進行足夠的檢測導致的。
poc:
http://localhost:8888/index.php?s=index/think\App/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

當index.php加載thinkphp框架引導文件后,會執(zhí)行應用,即執(zhí)行think\App::run()方法,\表示將App作為類名來調(diào)用,payload正是利用此特性來調(diào)用任意類的方法。
ThinkPHP命令如何執(zhí)行漏洞
根進run()中的路由檢測方法routeCheck()
ThinkPHP命令如何執(zhí)行漏洞
會獲取pathinfo信息,
ThinkPHP命令如何執(zhí)行漏洞
由于配置文件中'var_pathinfo'的值默認為's',所以該pathinfo()函數(shù)會獲取GET請求中's'對應的值,在這邊也就是
index/think\app/invokefunction
之后,Route::parseUrl()方法調(diào)用parseUrlPath(),只是通過‘/’做分割,并未做過濾。
ThinkPHP命令如何執(zhí)行漏洞
獲取當前的調(diào)度信息后,會執(zhí)行調(diào)用分發(fā)函數(shù)exec()
ThinkPHP命令如何執(zhí)行漏洞
這邊傳入exec的調(diào)度信息參數(shù)$dispatch為:
ThinkPHP命令如何執(zhí)行漏洞

根進module方法,即執(zhí)行模塊
ThinkPHP命令如何執(zhí)行漏洞
該模塊獲取控制器名為:”think\app“,該處并未對控制器名做過濾。
根進Loader::controller方法,該函數(shù)主要作用是實例化控制器,調(diào)用getModuleAndClass解析出$module和$class的值分別為“index”和“think\app”,再調(diào)用App::invokeClass($class)對$class進行實例化,回到App::module()方法,獲得實例化放射類“think\App”后,執(zhí)行反射類的方法
ThinkPHP命令如何執(zhí)行漏洞
跟進invokeMethod,可以看到該方法將運行call_user_func_array函數(shù),
ThinkPHP命令如何執(zhí)行漏洞
返回system('whoami')的結果
ThinkPHP命令如何執(zhí)行漏洞

以上就是ThinkPHP命令如何執(zhí)行漏洞,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學到更多知識。更多詳情敬請關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

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

AI