學習存貨(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跳轉了.

   這種反推對漏洞挖掘來說還是很有意思的