學習存貨(2)
CVE-2018-11784簡單分析之反推的魅力
看著挺有趣的,簡單分析下:
通過搜尋tomcat漏洞找到:
修改了這兩個檔案,我們看java檔案即可,xml檔案先不看:
因為跟url跳轉相關,直接搜尋redirect/direct等關鍵字:

關鍵問題在這裡
說實話這樣黑盒找修復程式碼,還是有點費勁的,畢竟看的是修復程式碼,沒有漏洞程式碼做參照
通過網上前人的腳印找到github漏洞修復對比:

這樣看太清晰了,其中問題程式碼是左邊的程式碼塊:

右邊是加了一行這個:
// Avoid protocol relative redirects
while (location.length() > 1 && location.charAt(1) == '/') {
location.deleteCharAt(0);
}
修復這個問題程式碼的版本如下:

github專案:tomcat>9.0.12都修復了,tomcat9.0.12之前都沒做處理
跟進相關修復檔案:

複製粘貼出來這一段到我的本地測試:
這是修復後的,直接去除掉修復的程式碼:
執行檢視:
訪問:http://localhost:8070//test
跳轉到了test
漏洞原因就是因為:
sendRedirect方法支援http/https外,還有//

執行下:
訪問路由地址,跳轉到百度:

這裡的程式碼沒對//做處理,導致變數走sendRedirect的時候,直接url跳轉了:
簡單跟下sendRedirect方法:

再往下跟進函式
修復方案就是去除掉兩次/
所以官方的修復方案就是這樣:
迴圈判斷,如果這裡的while改成if,那麼會存在安全問題hhhh

再次訪問:http://localhost:8070//test/
已經不能重定向了
輸入//,只會輸出一個

這樣可控點再走sendRedirect方法,就不能url跳轉了.
這種反推對漏洞挖掘來說還是很有意思的