EmpireCMS_V7.5的一次審計


i春秋作家:Qclover

原文來自:EmpireCMS_V7.5的一次審計

EmpireCMS_V7.5的一次審計

1概述

   最近在做審計和WAF規則的編寫,在CNVD和CNNVD等漏洞平台尋找各類CMS漏洞研究編寫規則時順便抽空對國內一些小的CMS進行了審計,另外也由於代碼審計接觸時間不是太常,最近一段時間也跟着公司審計項目再次重新的學習代碼審計知識,對於入行已久的各位審計大佬來說,自己算是新手了。對於審計也正在不斷的學習和積累中。於是抽空在CNVD上選取了一個國內小型CMS進行審計,此次審計的CMS為EmpireCMS_V7.5版本。從官方下載EmpireCMS_V7.5后進行審計,審計過程中主要發現有三處漏洞(應該還有其他漏洞暫未審計):配置文件寫入、后台代碼執行及后台getshell,造成這幾處漏洞的原因幾乎是由於對輸入輸出參數未作過濾和驗證所導致。

2前言

   帝國網站管理英文譯為”EmpireCMS”,它是基於B/S結構,安全、穩定、強大、靈活的網站管理系統.帝國CMS 7.5采用了系統模型功能:用戶通過此功能可直接在后台擴展與實現各種系統,如產品、房產、供求…等等系統,因此特性,帝國CMS系統又被譽為“萬能建站工具”;大容量數據結構設計;高安全嚴謹設計;采用了模板分離功能:把內容與界面完全分離,靈活的標簽+用戶自定義標簽,使之能實現各式各樣的網站頁面與風格;欄目無限級分類;前台全部靜態:可承受強大的訪問量;強大的信息采集功能;超強廣告管理功能……

3代碼審計部分

  拿到該CMS后先把握大局按照往常一樣先熟悉該CMS網站基本結構、入口文件、配置文件及過濾,常見的審計方法一般是:通讀全文發(針對一些小型CMS)、敏感函數回溯法以及定向功能分析法,自己平常做審計過程中這幾個方法用的也比較多。在把握其大局熟悉結構后,再通過本地安裝去了解該CMS的一些邏輯業務功能並結合黑盒進行審計,有時候黑盒測試會做到事半功倍。

常見的漏洞個人總結有:

1)程序初始化安裝

2)站點信息泄漏

3)文件上傳

4)文件管理

5)登陸認證

6)數據庫備份

7)找回密碼

8)驗證碼

若各位大佬在審計過程中還有發現其他漏洞可補充交流。

於是首先從程序初始化安裝開始進行審計….,如下:

3.1配置文件寫入

  開始進行審計安裝程序,根據經驗安裝問題一般出現在配置數據輸入配置時導致,常見引發問題漏洞的參數用戶輸入數據庫名參數、可控的表前綴等可控參數,於是乎定位到代碼位置install/index.php 645行附近,可以看到表名前綴phome_,並將獲取表名前綴交給了mydbtbpre參數。繼續往下看並跟蹤參數傳遞。

img

   在代碼位置/e/install/data/fun.php 347~379行發現,將用戶前端輸入的表前綴(默認phome_)替換掉默認的phome_后帶入了sql語句中進行表的創建,並且可以發現過程中未作過濾。

img

創建表的同時將配置數據包含可控的表前綴一起寫入到config.php配置文件,代碼位置/e/install/data/fun.php 587~645行

img

img

整個install過程中並未對用戶數據進行過濾,導致配置文件代碼寫入。

配置文件代碼寫入復現:

img

img

img

3.2后台任意代碼執行

   漏洞代碼發生在后台數據備份處代碼/e/admin/ebak/ChangeTable.php 44行附近,通過審計發現執行備份時,對表名的處理程序是value=”” 通過php短標簽形式直接賦值給tablename[]。

img

進行備份時未對數據庫表名做驗證,導致任意代碼執行。

任意代碼執行復現:

img

img

img

3.3后台getshell

代碼位置:e\admin\ecmscom.php

img

跟蹤AddUserpage跳轉至代碼e\class\comdofun.php頁面AddUserpage函數定義94行至114行處,繼續跟蹤代碼在116行可以看到將path變量參數傳入ReUserpage函數

img

跟蹤並跳轉至該函數的定義如下圖所示:

img

進入該函數繼續跟蹤DoFileMkDir至e/class/connect.php 2151行該DoFileMkDir函數,可以看到先執行了dirnamej進行了羅列當前可供選擇的目錄,如下圖

img

然后執行了DoMkdir函數進行了創建文件操作

img

代碼位置為/adm1n/ebak/class/function.php

在path傳遞和創建過程中並未對path進行驗證和限制。

同時在進行pagetext頁面內容進行寫入時,也未進行過濾引發代碼執行的危險函數

代碼位置為:e/class/functions.php 4280行

img

img

導致用戶可通過更改文件名並寫入php執行代碼創建自定義含惡意代碼的文件名頁面從而導致getshell。

復現:

img

img

img

img

總結:

可以看到,該CMS存在較多與變量參數相關的漏洞,究其原因,就是沒有對變量進行過濾和驗證所導致。噢,半夜了,先這樣吧,這次先審計到這吧,醬紫。下次審計若發現較新漏洞再繼續吧….感謝!

 

大家有任何問題可以提問,更多文章可到i春秋論壇閱讀喲~


免責聲明!

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



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