近段時(shí)間發(fā)(fa)現很多APP??程序用的最新執行是thinkcmf,此程序源碼存在getshell漏洞,我們Sine安全緊急對此高危漏洞(′?`*)進(jìn)行了分析和漏洞修復,攻擊者??可以通過(guò)構造特定的請求包get請求即可在遠程服務(wù)器上(shang)執行任意腳本代碼。(′?_?`)
根據index.php中的網(wǎng)站配置,項目路徑為application,漏??洞漏洞打開(kāi) Portal 下的對于的修 Controller 目錄,選擇一個(gè)控制類(lèi)文件。生成
發(fā)現他的木馬父類(lèi)為Common\Co??ntr(╯‵□′)╯oller\HomebaseController。
在Home??BaseContro(′_ゝ`)ller中加??入如下測試代碼
ThinkPHP是復建一套基于MVC的應用程序框架,被分成三個(gè)核心部件:模型(M)、最新執行視圖(V)、網(wǎng)站控制器(C)。漏???洞漏洞
由于添加的對于的修代碼在ヽ(′▽?zhuān)?ノ控制器中,根據ThinkPHP框架約定可(ke)以通過(guò)a參數來(lái)指定對應的生成函數名,但(dan)是木馬該函數的修飾符必須為Public, 而添加的??代碼正好符合該條件。
可以通過(guò)如下URL進(jìn)行訪(fǎng)問(wèn),復建???并且可以??添加GET參數arg1傳遞給函數。最新(xin)執行
cmfx-master/?a=test_public&arg1=run%20success
HomeBaseContr(╯‵□′)╯oller類(lèi)中有一些訪(fǎng)問(wèn)權限( ?° ?? ?°)為public的函數,重點(diǎn)關(guān)注display函數.看描述就是可以自定義加載模版,通過(guò)$this->parseTemplate 函數根據約定確定模版路徑,如果不符合原先的約定將會(huì )從當前目錄開(kāi)始匹配。
然后調用THinkphp Controller 函數的display方法
/
*** 加載模板和頁(yè)面輸出 可以返回輸出內容
* @access public
* @param string $templateFile 模板文件名
* @param string $charset 模板輸出字符集
* @param strin(′▽?zhuān)?g $contentType 輸出類(lèi)型
* @p(╬ ò﹏ó)aram string $content 模板輸出內容
*/
parent::display($this->parseTemplate($templateFile), $charヾ(?■_■)ノset, $contentType,$content,$prefix);
}
再往下就是調用Think View的fetch方法,這里的TMPL_ENGINE_TYPE 為T(mén)hink, 最終模版內容解析在ParseTemplateBehavior中完成
如下調用即可加載任意文件
http://127.(′?`*)0.0.1:81/cmfx-master/?a=display&templateFile=README.md
五、執??行漏洞
網(wǎng)站漏洞修復建議
通過(guò)此次審計代碼發(fā)(fa)現問(wèn)題的重點(diǎn)是對display 和 fetch 函數的修飾符模板函數進(jìn)行修改,如果對(╯‵□′)╯程(′▽?zhuān)?序代碼不熟悉的話(huà)建議聯(lián)系專(zhuān)業(yè)的網(wǎng)站安全公司來(lái)修復漏洞,國內做的比較專(zhuān)業(yè)的如Sinesafe,綠盟,啟明星辰??,等等,對此很多app調用此程序的api接口源碼,??建議大家遇到此問(wèn)??題首先要進(jìn)行全面的網(wǎng)站漏洞檢測和滲透測試,(′?`)來(lái)達到(?Д?)事先預防此類(lèi)攻擊帶來(lái)的危害。
(作者:代運營(yíng))