記一次java代碼審計
VSole2021-09-16 15:10:38
首發:先知社區 https://xz.aliyun.com/t/10198前段時間屬實是有點整的太難了。這幾天靜下心來繼續弄點簡單的。就直接進行審計把。不說那么多,環境部署好了,開干。說一下我審計的前提準備。過濾器是一定要看的。當然才開始審計的時候可能會看的比較惱火,看不懂當我沒說。簡單的還是要看一下。涉及到一些函數處理的可以等到實際挖洞的時候再跟也行。然后就是cms的整個架構,哪個模塊對應什么功能都是需要了解的比較透徹。涉及框架的,框架的漏洞涉及的組件要清楚,框架的配置文件再看看,就開沖。才開始代碼審計,還是每個接口都看一下。老規矩。
注冊接口審計
注冊流程分析 (1)判斷是否登錄,登錄以后就跳出注冊頁面 (2)判斷是否驗證碼為空或者錯誤則返回并告知驗證碼出錯( 驗證碼為刷新可暴力破解用戶名枚舉)(3)郵箱格式判斷 (4)判斷用戶名,密碼格式是否正確 (5)判斷郵箱用戶id是否存在,存在就返回已存在。否則就進行注冊 (6)預編譯進行sql插入。 這樣子分析下來,也只能做個用戶名和注冊郵箱枚舉了,放兩個個sql處理的關鍵的圖, 主要是看這里拼接出了預編譯。


登錄接口審計
登錄接口審計,沒啥大問題,放幾張圖。 這里有個小問題就是任意跳轉,不過要登錄成功了才行。可以看看代碼。


任意跳轉
這里獲取了傳入的pre_page做判斷,如果登錄成功就重定向過去。burp抓包也能看到。



前臺不要浪費太多時間先,直接沖后臺
這種要養成習慣,這種權限相關的要做個筆記,萬一有機會繞過呢。usertype=1是 登錄后臺的權限設置。
找到一處文件上傳的地址,看看
這種url的也要看看,說不定有ssrf

這里是得到系統的路徑,暫時我們是不可控的

看一下對文件名是怎么處理的 (1)文件路徑做更改,前面有個append的路徑添加進去了(都是寫死的,暫時不用太關注) (2)對文件進行重命名

文件重命名分析
(1)判斷文件是否存在
(2)判斷新的路徑的文件是否存在,不存在就創建(注意到這里我們的文件路徑都是
不可控的)(因為這里是先上傳保存,再進行處理刪除,所以說這里存在競爭,但是實
際是利用不了的,后續可以看。)
(3)獲取源文件名。(未對源文件名做處理)
(4)判斷并截取了文件的后綴。{后綴名:fileExt 文件名originalFileName}
(5)對文件名做了時間+隨機數處理
(6)重新生成了一個文件對象,并返回。


看一下這里 先創建了臨時路徑,然后再上傳了我們的傳入文件,此時還是沒有改名的。 也就是說如果我們可以訪問,那么就存在競爭了。 (當然前面也很體貼的幫我們看了能不能有寫權限)(最后發現這個目錄下如果訪問 jsp,jspx就直接404了)


找了一下過濾器,發現。。。。。。。。jsp ,jspx都不能直接訪問。


保存的時候還是不出意外的做了預編譯。跟到這里流程差不多了, 但是我們好像沒有發現對后綴進行了處理。試一試直接上傳jsp

出現了問題,跟一下看看,是在 ((MultipartRequest)request).getFiles(); 未獲取到。限制了jsp和jspx不能上傳。



暫時放一下。如果是apache的話還能上傳配置文件,windows$DATA流試了一下沒成功。
SQL查看
上傳暫時放棄一下,看一下有沒有注入,預編譯雖然比較多,但是我們知道limit, orderby后面是不能預編譯的。先放一個跟出來的sql檢查。 說一下這個下斷點跟就行了,沒有太多的技術要求,主要還是看代碼。 (看一下過濾的,果斷猜測xss過濾也是在這里。如果最后拿不下shell, 能出幾個xss釣cookie也還是勉勉強強吧。)

先看第一處,因為才開始順手一點,發現這里確實是直接拼接的, 但是因為獲取的整數類型,傳入payload類型不對所以直接報錯了。 (這里也要注意,不要看到直接拼接就下斷定有。推薦一個工具 seay的mysql監控工具,可以看的很直觀)



看一下模塊這里,這里現在是繼承者全村大半人的希望了,如果沒有出東西, 最后還是要去看看有沒有注入啥 所以這里不能做路徑穿越穿出去,但是好像沒有對路徑做限制, 只限制了不能讀取config和幾個路徑。所以這里應該是有問題的。 并且他默認是往根目錄去讀取。

比如這里,都出來了web-inf/lib目錄下的包。

嘗試看看讀取文件,說實話這里有點服氣,只給了文件的信息,沒有給內容。 那也就是說沒有太大的卵用。

然后高潮就來了,他這個模塊的功能有點多。還能進行下載, 重命名等。放在根目錄,豈不是看到了希望的曙光,要是能讀個數據庫密碼啥的 也是不需此行,試一下。只能說不負眾望。

payload http://10.70.40.114:8080/xxx/admin/filemanager?mode=download&path=/web-inf/classes/conf/db.properties&config=filemanager.config.js 不要急,一般這種造成的都會有連坐,比如任意文件刪除(只限制再web目錄)。 (這里怕把系統整完了,就新建一個文件然后刪除)

成功了。其他的替代這一種不是很想嘗試,因為他限制了不能直接訪問jsp, jspx也就是直接寫馬不行的。傳配置文件的方式我們上傳就能直接解決不需要這么麻煩。

系統都是一些配置編輯的功能,沒有特別的新的。這次只出了一個文件讀取和文件刪除 ,能夠讀取數據庫配置文件還是有一定的危害。因為還有sql哪些沒有審計, 所以說不一定拿不到通用shell(apache的話上傳配置文件可以拿)。主要是審計思路 的多多練習,和審計習慣的鍛煉
VSole
網絡安全專家
