您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關ThinkPHP命令如何執(zhí)行漏洞,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
ThinkPHP 官方 2018 年 12 月 9 日發(fā)布重要的安全更新,修復了一個嚴重的遠程代碼執(zhí)行漏洞。該更新主要涉及一個安全更新,由于框架對控制器名沒有進行足夠的檢測會導致在沒有開啟強制路由的情況下可能的 getshell 漏洞
受影響版本:5.x < 5.1.31, <= 5.0.23
thinkphp 實驗版本:5.0.20
首先,先看看一下官方給出的補丁信息:
大概猜測到這個漏洞是由于框架沒有對控制名進行足夠的檢測導致的。
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)用任意類的方法。
根進run()中的路由檢測方法routeCheck()
會獲取pathinfo信息,
由于配置文件中'var_pathinfo'的值默認為's',所以該pathinfo()函數(shù)會獲取GET請求中's'對應的值,在這邊也就是
index/think\app/invokefunction
之后,Route::parseUrl()方法調(diào)用parseUrlPath(),只是通過‘/’做分割,并未做過濾。
獲取當前的調(diào)度信息后,會執(zhí)行調(diào)用分發(fā)函數(shù)exec()
這邊傳入exec的調(diào)度信息參數(shù)$dispatch為:
根進module方法,即執(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í)行反射類的方法
跟進invokeMethod,可以看到該方法將運行call_user_func_array函數(shù),
返回system('whoami')的結果
以上就是ThinkPHP命令如何執(zhí)行漏洞,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學到更多知識。更多詳情敬請關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。