前言
前段時間的比賽將該cms作為了題目考察,這個cms的洞也被大佬們吃的差不多了,自己也就借此機(jī)會來淺淺測試下這個cms殘余漏洞,并記錄下這一整個流程,謹(jǐn)以此記給小白師傅們分享下思路,有錯誤的地方還望大佬們請以指正。
安裝
參考官方文檔,給出了很詳細(xì)的安裝說明,如安裝遇到問題,可到官方論壇尋找解決方法,常見安裝失敗問題都有。
該cms項目是基于springboot框架開發(fā)的,安裝的時候需要的環(huán)境為 springboot+redis+MySQL+ IDEA
配置文件主要是這兩個Application-prd.yml和application-dev.yml,需要配置好mysql數(shù)據(jù)庫連接、redis連接以及網(wǎng)頁靜態(tài)資源路徑,其余的安裝上面的一步步安裝即可。
安裝成功后訪問登陸頁面
管理員賬號密碼已經(jīng)給了,直接登錄。
漏洞測試 風(fēng)格管理模板存在任意編輯文件實現(xiàn)命令執(zhí)行
經(jīng)測試,發(fā)現(xiàn)后臺風(fēng)格管理模板上傳主題壓縮包時可以進(jìn)行污染壓縮包theme.json文件,達(dá)到目錄穿越到服務(wù)器敏感目錄,從而在模板管理在解析時沒有進(jìn)行檢測可以任意編輯系統(tǒng)敏感文件導(dǎo)致GetShell,控制服務(wù)器權(quán)限。
漏洞產(chǎn)生的主要文件:主題上傳Controller文件: src/mAIn/JAVA/cc/iteachyou/cms/controller/admin/ThemesController.java , 找到 add 方法。
首先是判斷文件是否存在以及JSON解析是否正確;判斷Key是否都存在;判斷對應(yīng)值是否為空;創(chuàng)建theme對象;判斷設(shè)置路徑是否已"default"開頭。最后校驗主題包各種配置是否正確。確認(rèn)的話就成功上傳。
但是沒有對themePath路徑問題進(jìn)行檢測,便可構(gòu)造目錄穿越,這也是該漏洞造成的關(guān)鍵原因。
最后是判斷上傳的壓縮包里的各類信息無誤后進(jìn)入處理保存文件邏輯的save方法。
在上傳的主題包里的dreamerdreamer-cmstemplatesdefault_v3theme.json文件,將目錄穿越的構(gòu)造替換主題包路徑,更改之后theme.json文件內(nèi)容如下:
{
"themeName":"新版主題",
"themeImage":"http://localhost:8888/resource/img/dreamercms-logo.png",
"themeAuthor":"",
"themePath":"../../../../../../../../../../../../../../"//此路徑要和模板文件夾的名稱一致
}
雖然有檢測,但是在之前themeDir已經(jīng)被污染了,所以相當(dāng)于檢測相當(dāng)于沒有。接著檢查是否有權(quán)限,startwith方法也沒有問題。
``
最后就是保存文件。到此時后臺模板已被剛剛傳入的構(gòu)造污染,可以進(jìn)行利用,效果如下:
將修改后的主題包上傳
風(fēng)格頁面會多出一個新的主題
點擊啟用。然后查看模板管理頁面,發(fā)現(xiàn)目錄穿越成功,成功進(jìn)入服務(wù)器的根目錄,這時就相當(dāng)于在自己服務(wù)器上編輯修改文件。
測試文件為/home/www 目錄下的1.txt文件,原本是空文件。
在頁面修改該文件,添加內(nèi)容
然后保存,再到服務(wù)器里查看,成功將內(nèi)容加入。
如果修改authorized_key文件便可進(jìn)行免密登錄,利用壓縮校驗不正確從而上傳任意危險文件,例如一句話木馬等來獲取系統(tǒng)權(quán)限;還可以獲取系統(tǒng)passwd文件獲取敏感信息,也可以寫計劃任務(wù)進(jìn)行命令執(zhí)行。
該漏洞分析到此為止,接著是附件管理模板可以進(jìn)行任意文件下載、刪除。
附件管理模板可以進(jìn)行任意文件下載、刪除。
漏洞產(chǎn)生主要文件:
src/main/java/cc/iteachyou/cms/controller/admin/AttachmentController.java 添加附件功能的代碼如下:
首先肯定是先添加附件,這里沒有對attachment參數(shù)進(jìn)行過濾。導(dǎo)致保存附件的時候目錄穿越的構(gòu)造就被保留了下來,對其進(jìn)行解析后就可以將服務(wù)器的指定文件隨意下載、刪除,從而對服務(wù)器構(gòu)成威脅。
下載、刪除功能的代碼都在同一個文件,都是通過剛剛的attachment參數(shù),然后使用attachment.getFilepath獲取服務(wù)器文件路徑,對其進(jìn)行解析。
先看下載功能的代碼:
這里也沒有對 filePath變量進(jìn)行過濾,所以總的來說就是添加附件和下載附件的兩處代碼,都沒有對相應(yīng)的變量進(jìn)行檢測過濾,從而導(dǎo)致漏洞產(chǎn)生。
刪除功能的代碼:
刪除的話就沒什么好說的,和上面一樣的原理,試想下,如果可以任意刪除服務(wù)器的配置文件,那不就相當(dāng)于服務(wù)器要崩的節(jié)奏。
漏洞演示如下:
還是利用剛剛/home/www目錄下的1.txt文件
在添加附件模塊先隨便上傳一個本地文件(這里隨便上傳了一個theme.txt文件)
burpsuite抓包如下
需要改的就是這個filepath參數(shù)對應(yīng)的文件路徑,將其修改為
../../../../../../../../../../../../../home/www/1.txt
然后放包。
刷新頁面,觀察到多了一個theme.txt文件,下載下來并打開內(nèi)容如下:
刪除效果,點擊右邊的刪除。
發(fā)現(xiàn)該1.txt文件被刪除了,任意刪除文件成功。
模板管理存在任意文件包含
產(chǎn)生漏洞的主要文件:src/main/java/cc/iteachyou/cms/taglib/tags/IncludeTag.java
If語句只是簡單判斷值是否為空,但是沒有檢測過濾字符,導(dǎo)致可以傳入目錄穿越的構(gòu)造 ../../../../../../../../../../../../../home/www/1.txt 進(jìn)行文件包含,讀取里面內(nèi)容。接著在模板管理找到 index_about.html
將 ../../../../../../../../../../../../../home/www/1.txt 寫入div標(biāo)簽并保存,如下圖
接著訪問主頁里的關(guān)于我們:
可以看到,成功進(jìn)行了文件包含,如將構(gòu)造 /home/www/1.txt 換成 /etc/passwd 這類敏感文件,則被攻擊者獲取到關(guān)鍵信息,這里也測試下:修改構(gòu)造
頁面如期輸出/etc/passwd文件里的信息。
總結(jié)
本文測試是在該cms舊版本上進(jìn)行的,新版本對已有問題已進(jìn)行了修復(fù),這次對該java實現(xiàn)的cms漏洞挖掘收獲滿滿,對cms安裝、部署以及代碼審計中要注意的點得到了良好的鍛煉。