本次程式碼審計使用了白加黑的手法,用黑盒的視角測試功能點,用白盒的方式作為驗證。
0x1 XSS
guestbook處,可以看到有一個留言板
idea搜尋guestbook。發現程式碼如下,其中的getModel是獲取資料的方法。Guestbook.class就是具體要獲取的資料。
跟進Guestbook.class檢視,發現GuestBook繼承自BaseGuestbook
繼續跟進BaseGuestbook可以發現http請求的資料,沒有發現有過濾函式。
然後使用管理員登入後臺檢視留言,發現確實如我所想,存在xss漏洞。
ps:審計小技巧,開啟sql日誌然後一邊打payload一邊看記事本是否漏掉過濾哪些字元。這裡是完全沒有過濾,所以在出庫的時候如果沒有防護,基本上就是實錘xss了。
【----幫助網安學習,以下所有學習資料免費領!加vx:dctintin,備註 “部落格園” 獲取!】
① 網安學習成長路徑思維導圖
② 60+網安經典常用工具包
③ 100+SRC漏洞分析報告
④ 150+網安攻防實戰技術電子書
⑤ 最權威CISSP 認證考試指南+題庫
⑥ 超1800頁CTF實戰技巧手冊
⑦ 最新網安大廠面試題合集(含答案)
⑧ APP客戶端安全檢測指南(安卓+IOS)
0x2 SQL隱碼攻擊
在產品中心發現有一個搜尋框
看到原始碼,沒有發現有過濾字元,這裡採用之前開啟的mysql日誌,透過日誌檔案的sql語句判斷是否有過濾。
直接輸入單引號發現該cms返回500報錯,很有可能存在sql注入。
於是使用兩個單引號''使得系統不丟擲異常,然後檢視日誌檔案中發現sql語句沒有過濾單引號,說明注入確實存在。
or 1 結果
or 0結果 注入確實存在
0x3 檔案下載
/common/down路由中的file方法,直接獲取http請求中的filekey引數,並且沒有過濾../等關鍵字元。fileKey的值和PathKit.getWebRootPath()函式的返回值拼接。然後fileKey其實就是http中的引數。
ps:該路由不在前臺,只能透過白盒的方式去進行,但是後續透過github上的fuzz字典發現也可以fuzz得到但是fuzz發包數量巨大不作為參考。但是日後如果實在挖不出洞,可以考慮多fuzz一下,也許就出貨了也說不準。這裡用的字典較大,其實可以考慮小一些的字典,算是個人的一些挖洞經驗吧。
引數的fuzz
0x4 csrf
在系統管理-> 系統使用者 -> 新增使用者處,抓包然後使用burp生成csrf poc
儲存至html後,點選submit request
可以看到使用者被成功新增了
0x5 組合拳+sql備份getshell未果(條件較為苛刻)
這裡是想getshell來著,畢竟都白盒了,當然能getshell就getshell,不能getshell就想辦法getshell了。這裡是發現後臺上傳介面,過濾了jsp,jspx檔名。
發現公司管理->基礎內容->公司資訊有上傳圖片
上傳jsp檔案,jspx檔案均被攔截。
然後發現系統管理->資料庫管理處發現可以進行資料庫備份還原操作。在資料庫還原抓包,發現是一個sql檔名字。這裡想到之前的任意檔案下載,那麼豈不是可以透過上傳一個sql檔案,然後透過備份這個sql檔案進行資料庫備份getshell。
首先去下載備份好的sql檔案,路徑在static/back/檔名
然後新增getshell的payload
然後上傳該sql檔案,注意需要改字尾名為png
然後sql備份處填寫上檔名,使用../讓系統跨目錄讀取png圖片
然後檢視payload上的1.jsp是否成功生成。
訪問的時候失敗了,無法解析jsp,jspx等檔案,但是伺服器確實有寫入了jsp檔案
得到了兩個前置條件
-
需要知道系統的絕對路徑
-
系統下得開啟其他能夠解析的應用(如另外一個java系統在其他埠上,但是能夠解析jsp,就可以透過該cms的漏洞在其他系統上寫webshell,也算是一個任意檔案寫入,做到了"隔山打牛")
0x6 預設密碼
一個比較容易忽略的點,通常admin的預設密碼管理員基本都會在部署網站之後馬上修改,但是如果類似有幾個賬戶的情況下,管理員可能會忽略掉其他使用者的預設密碼。這裡可以直接看sql檔案。在其sql檔案下發現有兩個預設賬號一個是admin,一個是read。
read登入成功
0x7 總結
本次程式碼審計強化學習了白+黑的方式,更加簡單的找出了漏洞,有些地方還欠缺一些思路,比如0x5rce那一塊,想著是不是可以寫一個class檔案達到rce的效果。或者覆蓋掉原本的xml檔案之類的操作,不允許上傳jsp,jspx檔案是否可以透過上傳war包來進行getshell。總之覺得還有諸多不足,篇幅關係記錄到這。
更多網安技能的線上實操練習,請點選這裡>>