天天看點

闡述php指令執行漏洞的原理,ThinkPHP遠端指令執行漏洞原理及複現

2018年12月11日,exploit-db更新了一個thinkphp架構遠端代碼執行漏洞

由于架構對控制器名沒有進行足夠的檢測導緻在沒有開啟強制路由的情況下getshell

漏洞影響範圍

Thinkphp 5.1.0 - 5.1.31

Thinkphp 5.0.5 - 5.0.23

安裝 :

下載下傳位址http://www.thinkphp.cn/donate/download/id/1125.html

下載下傳完解壓在/var/www/html/目錄下即可

闡述php指令執行漏洞的原理,ThinkPHP遠端指令執行漏洞原理及複現

漏洞分析

/thinkphp/library/think/App.php 行數:120

闡述php指令執行漏洞的原理,ThinkPHP遠端指令執行漏洞原理及複現

我們可以看到通過self::routerCheck函數進行路由檢測

闡述php指令執行漏洞的原理,ThinkPHP遠端指令執行漏洞原理及複現

我們可以看到又進入$request->path()函數

/thinkphp/library/think/Request.php 行數:416行

闡述php指令執行漏洞的原理,ThinkPHP遠端指令執行漏洞原理及複現

進入pathinfo()函數,繼續追蹤到384行

闡述php指令執行漏洞的原理,ThinkPHP遠端指令執行漏洞原理及複現

Config::get('var_pathinfo')是配置檔案中的設定的參數,預設值為s,從GET中擷取鍵值,然後指派給routeCheck中的$path

我們再回到App.php 行數:606

闡述php指令執行漏洞的原理,ThinkPHP遠端指令執行漏洞原理及複現

這裡會進行路由檢測,檢查$check後會進入else分支導入路由配置,接着檢測路由url排程結果為$result,如果排程失敗且開啟了強制路由$must,則報出路由無效,接着進入Route::parseUrl函數,根據$path(自定義url)解析操作

開始跟蹤parseUrl函數

/thinkphp/library/think/Route.php 行數:1208

闡述php指令執行漏洞的原理,ThinkPHP遠端指令執行漏洞原理及複現