白帽駭客資安網-網站安全的靠山,提供漏洞修補,網站被駭入侵,網站資訊安全服務

APP thinkcmf 漏洞預警與網站漏洞修復.

近段時間發現很多APP程式用的是thinkcmf,此程式源碼存在getshell漏洞,我們eSafe安全

緊急對此高危漏洞進行了分析和漏洞修復,攻擊者可以通過構造特定的請求包get請求即可

在遠端伺服器上執行任意腳本代碼。
根據index.php中的配置,專案路徑為application,打開 Portal 下的 Controller 目錄,選擇

一個控制類檔。


發現他的父類為Common\Controller\HomebaseController。
在HomeBaseController中加入如下測試代碼
 
ThinkPHP是一套基於MVC的應用程式框架,被分成三個核心部件:模型(M)、視圖(V)

、控制器(C)。
由於添加的代碼在控制器中,根據ThinkPHP框架約定可以通過a參數來指定對應的函數名,

但是該函數的修飾符必須為Public, 而添加的代碼正好符合該條件。
可以通過如下URL進行訪問,並且可以添加GET參數arg1傳遞給函數。
cmfx-master/?a=test_public&arg1=run%20success
HomeBaseController類中有一些存取權限為public的函數,重點關注display函數.看描述就是

可以自訂載入模版,通過$this->parseTemplate 函數根據約定確定模版路徑,如果不符合

原先的約定將會從目前的目錄開始匹配。
然後調用THinkphp Controller 函數的display方法
/**
* 載入範本和頁面輸出 可以返回輸出內容
@access public
@param string $templateFile 範本檔案名
@param string $charset 範本輸出字元集
@param string $contentType 輸出類型
@param string $content 範本輸出內容
@return mixed
*/
public function display($templateFile = '', $charset = '', $contentType = '', $content = '',

$prefix = '') {
parent::display($this->parseTemplate($templateFile), $charset, $contentType,$content

,$prefix);
}
再往下就是調用Think View的fetch方法,這裡的TMPL_ENGINE_TYPE 為Think, 最終模版

內容解析在ParseTemplateBehavior中完成
如下調用即可載入任意檔
http://127.0.0.1:81/cmfx-master/?a=display&templateFile=README.md
五、執行漏洞

 
網站漏洞修復建議
通過此次審計代碼發現問題的重點是對display 和 fetch 函數的修飾符範本函數進行修改,如果

對程式碼不熟悉的話建議聯繫專業的網站安全公司來修復漏洞,對此很多app調用此程式的api介面源碼,建議大家遇到此問題

首先要進行全面的網站漏洞檢測和滲透測試,來達到事先預防此類攻擊帶來的危害。
 
 

分享: