記錄一次CMS的程式碼審計

蚁景网安实验室發表於2024-06-26

本次程式碼審計使用了白加黑的手法,用黑盒的視角測試功能點,用白盒的方式作為驗證。

0x1 XSS

guestbook處,可以看到有一個留言板

記錄一次CMS的程式碼審計

idea搜尋guestbook。發現程式碼如下,其中的getModel是獲取資料的方法。Guestbook.class就是具體要獲取的資料。

記錄一次CMS的程式碼審計

跟進Guestbook.class檢視,發現GuestBook繼承自BaseGuestbook

記錄一次CMS的程式碼審計

繼續跟進BaseGuestbook可以發現http請求的資料,沒有發現有過濾函式。

記錄一次CMS的程式碼審計

記錄一次CMS的程式碼審計

然後使用管理員登入後臺檢視留言,發現確實如我所想,存在xss漏洞。

記錄一次CMS的程式碼審計

ps:審計小技巧,開啟sql日誌然後一邊打payload一邊看記事本是否漏掉過濾哪些字元。這裡是完全沒有過濾,所以在出庫的時候如果沒有防護,基本上就是實錘xss了。

記錄一次CMS的程式碼審計

【----幫助網安學習,以下所有學習資料免費領!加vx:dctintin,備註 “部落格園” 獲取!】

 ① 網安學習成長路徑思維導圖
 ② 60+網安經典常用工具包
 ③ 100+SRC漏洞分析報告
 ④ 150+網安攻防實戰技術電子書
 ⑤ 最權威CISSP 認證考試指南+題庫
 ⑥ 超1800頁CTF實戰技巧手冊
 ⑦ 最新網安大廠面試題合集(含答案)
 ⑧ APP客戶端安全檢測指南(安卓+IOS)

0x2 SQL隱碼攻擊

在產品中心發現有一個搜尋框

記錄一次CMS的程式碼審計

看到原始碼,沒有發現有過濾字元,這裡採用之前開啟的mysql日誌,透過日誌檔案的sql語句判斷是否有過濾。

記錄一次CMS的程式碼審計

直接輸入單引號發現該cms返回500報錯,很有可能存在sql注入。

記錄一次CMS的程式碼審計

於是使用兩個單引號''使得系統不丟擲異常,然後檢視日誌檔案中發現sql語句沒有過濾單引號,說明注入確實存在。

記錄一次CMS的程式碼審計

or 1 結果

記錄一次CMS的程式碼審計

or 0結果 注入確實存在

記錄一次CMS的程式碼審計

0x3 檔案下載

/common/down路由中的file方法,直接獲取http請求中的filekey引數,並且沒有過濾../等關鍵字元。fileKey的值和PathKit.getWebRootPath()函式的返回值拼接。然後fileKey其實就是http中的引數。

記錄一次CMS的程式碼審計

記錄一次CMS的程式碼審計

ps:該路由不在前臺,只能透過白盒的方式去進行,但是後續透過github上的fuzz字典發現也可以fuzz得到但是fuzz發包數量巨大不作為參考。但是日後如果實在挖不出洞,可以考慮多fuzz一下,也許就出貨了也說不準。這裡用的字典較大,其實可以考慮小一些的字典,算是個人的一些挖洞經驗吧。

記錄一次CMS的程式碼審計

記錄一次CMS的程式碼審計

記錄一次CMS的程式碼審計

引數的fuzz

記錄一次CMS的程式碼審計

0x4 csrf

在系統管理-> 系統使用者 -> 新增使用者處,抓包然後使用burp生成csrf poc

記錄一次CMS的程式碼審計

記錄一次CMS的程式碼審計

儲存至html後,點選submit request

記錄一次CMS的程式碼審計

可以看到使用者被成功新增了

記錄一次CMS的程式碼審計

記錄一次CMS的程式碼審計

0x5 組合拳+sql備份getshell未果(條件較為苛刻)

這裡是想getshell來著,畢竟都白盒了,當然能getshell就getshell,不能getshell就想辦法getshell了。這裡是發現後臺上傳介面,過濾了jsp,jspx檔名。

發現公司管理->基礎內容->公司資訊有上傳圖片

記錄一次CMS的程式碼審計

上傳jsp檔案,jspx檔案均被攔截。

記錄一次CMS的程式碼審計

然後發現系統管理->資料庫管理處發現可以進行資料庫備份還原操作。在資料庫還原抓包,發現是一個sql檔名字。這裡想到之前的任意檔案下載,那麼豈不是可以透過上傳一個sql檔案,然後透過備份這個sql檔案進行資料庫備份getshell。

記錄一次CMS的程式碼審計

首先去下載備份好的sql檔案,路徑在static/back/檔名

記錄一次CMS的程式碼審計

然後新增getshell的payload

記錄一次CMS的程式碼審計

然後上傳該sql檔案,注意需要改字尾名為png

記錄一次CMS的程式碼審計

然後sql備份處填寫上檔名,使用../讓系統跨目錄讀取png圖片

記錄一次CMS的程式碼審計

然後檢視payload上的1.jsp是否成功生成。

記錄一次CMS的程式碼審計

訪問的時候失敗了,無法解析jsp,jspx等檔案,但是伺服器確實有寫入了jsp檔案

記錄一次CMS的程式碼審計

得到了兩個前置條件

  1. 需要知道系統的絕對路徑

  2. 系統下得開啟其他能夠解析的應用(如另外一個java系統在其他埠上,但是能夠解析jsp,就可以透過該cms的漏洞在其他系統上寫webshell,也算是一個任意檔案寫入,做到了"隔山打牛")

0x6 預設密碼

一個比較容易忽略的點,通常admin的預設密碼管理員基本都會在部署網站之後馬上修改,但是如果類似有幾個賬戶的情況下,管理員可能會忽略掉其他使用者的預設密碼。這裡可以直接看sql檔案。在其sql檔案下發現有兩個預設賬號一個是admin,一個是read。

記錄一次CMS的程式碼審計

read登入成功

記錄一次CMS的程式碼審計

0x7 總結

本次程式碼審計強化學習了白+黑的方式,更加簡單的找出了漏洞,有些地方還欠缺一些思路,比如0x5rce那一塊,想著是不是可以寫一個class檔案達到rce的效果。或者覆蓋掉原本的xml檔案之類的操作,不允許上傳jsp,jspx檔案是否可以透過上傳war包來進行getshell。總之覺得還有諸多不足,篇幅關係記錄到這。

更多網安技能的線上實操練習,請點選這裡>>

相關文章