前段時間在滲透網站的時候遇到一個十幾年前開發的網站,該網站使用的是JSP和Servlet混合開發,后端數據庫為MySQL 4.x版本,可以說這個網站的運行時間相當的長了。
這個網站存在一處任意文件下載漏洞,后端代碼將前端URL傳入的路徑進行拼接從而組成完整的文件路徑。但是最終拼接的文件路徑總是以“*.doc”結尾,即使進行目錄跳轉(../)也只能訪問*.doc文件。
我嘗試%00截斷,結果成功讀到其他類型的文件,說明該網站存在%00截斷漏洞。最終拿到WebShell后審閱網站源代碼並在本地多次模擬發現:%00截斷漏洞是Java語言自身的問題(與操作系統無關),此漏洞只存在於低版本的Java(如:Java 1.4),高版本的Java(如:Java 1.7)已經修復這個問題。
本地測試:
在這段代碼中filePath變量表示文件路徑,我特意在路徑中加入ASCII碼的0x00字符進行截斷。
在Java 1.4中運行上述代碼,可以讀取到password.txt文件。
在Java 1.7中運行上述代碼,程序報錯: