成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

任意URL跳轉(zhuǎn)漏洞修復與JDK中g(shù)etHost()方法之間的坑

安全 應用安全
服務端未對傳入的跳轉(zhuǎn)url變量進行檢查和控制,導致可惡意構(gòu)造任意一個惡意地址,誘導用戶跳轉(zhuǎn)到惡意網(wǎng)站。

任意URL跳轉(zhuǎn)漏洞

服務端未對傳入的跳轉(zhuǎn)url變量進行檢查和控制,導致可惡意構(gòu)造任意一個惡意地址,誘導用戶跳轉(zhuǎn)到惡意網(wǎng)站。由于是從可信的站點跳轉(zhuǎn)出去的,用戶會比較信任,所以跳轉(zhuǎn)漏洞一般用于釣魚攻擊,通過轉(zhuǎn)到惡意網(wǎng)站欺騙用戶輸入用戶名和密碼盜取用戶信息,或欺騙用戶進行金錢交易。

修復該漏洞最有效的方法之一就是校驗傳入的跳轉(zhuǎn)url參數(shù)值,判斷是否為預期域名。在java中可使用下列方法:

  1. String url = request.getParameter("returnUrl"); 
  2. String host = ""
  3. try { 
  4.     host = new URL(url).getHost(); 
  5. } catch (MalformedURLException e) { 
  6.     e.printStackTrace(); 
  7. if host.endsWith(".bbb.com"){ 
  8.     //跳轉(zhuǎn) 
  9. }else{ 
  10.     //不跳轉(zhuǎn),報錯 

上述代碼中主要校驗了客戶端傳來的returnUrl參數(shù)值,使用java.net.URL包中的getHost()方法獲取了將要跳轉(zhuǎn)url的host,判斷host是否為目標域,上述代碼中限制了必須跳轉(zhuǎn)到xxx.bbb.com的域名,從而排除了跳轉(zhuǎn)到不可信域名的可能。

但是,getHost()方法真的靠譜嗎??

getHost()方法的坑之一

可以被反斜線繞過,即returnUrl=http://www.aaa.com\www.bbb.com會被代碼認為是將要跳轉(zhuǎn)到bbb.com,而實際在瀏覽器中反斜線被糾正為正斜線,跳轉(zhuǎn)到www.aaa.com/www.bbb.com,最終還是跳到www.aaa.com的服務器。

使用下列代碼進行測試:

  1. public class Main { 
  2.  
  3.     public static void main(String[] args) { 
  4.         String url = "https://www.aaa.com\\www.bbb.com?x=123"
  5.         String host = ""
  6.         try { 
  7.             host = new URL(url).getHost(); 
  8.         } catch (MalformedURLException e) { 
  9.             e.printStackTrace(); 
  10.         } 
  11.         System.out.println("host---"+host); 
  12.         System.out.println("url---"+url); 
  13.     } 

url參數(shù)的域名getHost()之后是www.aaa.com還是www.bbb.com呢?打印結(jié)果如下:

該結(jié)果會被endsWith(“.bbb.com”)方法判斷為真,從而成功執(zhí)行跳轉(zhuǎn),但實際在瀏覽器中跳轉(zhuǎn)到了www.aaa.com網(wǎng)站。

getHost()方法的坑之二

getHost()方法的結(jié)果在不同JDK版本中對井號#的處理結(jié)果不同,通常井號被用作頁面錨點,對于https://www.aaa.com#www.bbb.com?x=123這個url,較高版本的JDK中,取出結(jié)果為www.aaa.com,低版本中為www.aaa.com#www.bbb.com,從而低版本又可繞過endsWith(“.bbb.com”)方法,成功跳轉(zhuǎn)。

這里所說的高版本指的是java version 1.8.0_181或者java version 1.7.0_161中的181和161,與JDK7還是8無關(guān)。可能java在某個時間集中修復了JDK6/7/8中的URL庫。

測試過程中發(fā)現(xiàn)1.6.0_45,1.7.0_71,1.8.0_25均可被#繞過,即不同的JDK中低版本均存在問題。

通過對比rt.jar---java---net--URLStreamHandler.java代碼(低版本為左邊,高版本為右邊)找到問題所在如下圖所示,代碼中的start為url中冒號位置,limit為url中井號位置:

從代碼中可以發(fā)現(xiàn),低版本中未考慮到一個完整url中斜線/或者問號?之前會出現(xiàn)井號#的情況,如果url中有斜線/或者問號?,取host就以斜線或者問號為終止,即使中間包含井號也不處理;而高版本中進行了井號位置的判斷,排除了使用井號繞過的可能。但是線上生成環(huán)境的JDK版本又不是敢隨便亂升級的,只能從代碼里提前預防。

下圖為使用不同版本JDK測試的結(jié)果:

同一段代碼在不同JDK版本中打印出的host值不同,在低版本中包含了井號及其后邊的部分。

綜合上述兩個坑,若想使用getHost()來修復任意URL跳轉(zhuǎn)漏洞,需要考慮到反斜線和井號繞過,可使用如下代碼:

  1. String url = request.getParameter("returnUrl"); 
  2. String host = ""
  3. try { 
  4.     urlurl = url.replaceAll("[\\\\#],"/"); //替換掉反斜線和井號 
  5.     host = new URL(url).getHost();   
  6. } catch (MalformedURLException e) { 
  7.     e.printStackTrace(); 
  8. if host.endsWith(".bbb.com"){ 
  9.     //跳轉(zhuǎn) 
  10. }else{ 
  11.     //不跳轉(zhuǎn),報錯 

附送一個真實例子

該站可使用井號配合斜線或者問號來繞過域名檢測,即將target設置為URL編碼后的https://www.baidu.com#www.bbb.com?x=123,該站即可302跳轉(zhuǎn)到百度。

 

責任編輯:趙寧寧 來源: Freebuf
相關(guān)推薦

2014-06-18 10:59:22

2021-04-16 10:49:07

人工智能機器學習

2019-08-26 00:30:48

2023-06-21 11:19:21

2018-06-27 10:07:28

2015-01-29 09:54:12

2011-06-07 10:13:58

2010-10-12 16:33:40

2011-12-03 20:25:53

2010-05-14 12:00:36

2018-11-21 10:13:35

2009-06-25 14:46:50

JDKJREJVM

2009-04-27 23:45:07

2009-01-16 16:26:19

2010-03-12 16:19:11

Safari漏洞修復

2021-09-22 14:55:08

Finder零日漏洞macOS

2025-03-31 07:10:00

2013-01-21 11:04:07

2022-05-26 12:03:00

補丁漏洞網(wǎng)絡安全

2025-03-12 14:10:57

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 五月综合色啪 | 久久av一区 | 日中文字幕在线 | 欧美色综合一区二区三区 | 欧美一区二区三区久久精品 | 亚洲在线免费观看 | 国产日韩一区二区 | 中文字幕一区二区三区四区不卡 | 91 久久 | 欧美日韩在线观看一区二区三区 | 国产精品久久久久久久久久免费看 | 久久亚洲国产 | 国产1区在线 | 精品亚洲永久免费精品 | 亚州精品成人 | 国产精品自产拍 | 精品国产一二三区 | 国产二区在线播放 | 国产视频久久 | 欧美日韩精品久久久免费观看 | 啪一啪在线视频 | 欧美国产精品一区二区 | 国产激情福利 | 久久久久久国产精品久久 | 视频一二三区 | 久久久国产精品一区 | 在线观看成人小视频 | 国产精品一区二区三区在线播放 | 91久久精品国产91久久性色tv | 日韩在线中文 | 精品一区二区三区在线观看 | 国产精品毛片一区二区在线看 | 成人毛片在线视频 | 在线观看精品视频网站 | 国产精品久久久亚洲 | 国产视频精品视频 | 91在线免费视频 | 亚洲高清一区二区三区 | 一级一片在线观看 | 91中文字幕在线 | 天堂在线中文 |