URL重定向漏洞解析


參考文章


概述


總結


一、漏洞介紹

URL重定向(URLredirection)漏洞,又稱跳轉漏洞。指的是網絡應用程序接受用戶可控的輸入作為到外部站點的鏈接,然后在重定向中使用該鏈接。可以認為是SSRF一種。


二、漏洞原理

http參數可能包含URL值,並且可能導致Web應用程序將請求重定向到指定的URL。通過將URL值修改為惡意站點,攻擊者可以成功啟動網絡釣魚詐騙並竊取用戶憑據。由於修改后的鏈接中的服務器名稱與原始站點相同,因此網絡釣魚嘗試具有更可信賴的外觀。

常見的URL跳轉代碼如下

Java: 
response.sendRedirect(request.getParameter("url")) 
PHP: 
$redirect\_url = $\_GET\['url'\]; header("Location: " . $redirect\_url) 
.NET: 
string redirect\_url = request.QueryString\["url"\]; Response.Redirect(redirect\_url); 
Django: 
redirect\_url = request.GET.get("url") HttpResponseRedirect(redirect\_url) 
Flask: 
redirect\_url = request.form\['url'\] redirect(redirect\_url) 
Rails: 
redirect\_to params\[:url\]

三、漏洞危害

  • 網絡釣魚
    即攻擊者將漏洞用比較有名的域名偽裝,用戶沒有注意到以此放心點擊。被竊取敏感信息。
  • 繞過保護機制;獲取權限或假冒身份
    用戶的訪問可能會被重定向到不可靠的網頁。不可靠網頁中可能存在惡意軟件並可能攻陷用戶電腦。一旦用戶電腦被攻陷,用戶就暴露在大量各種網絡危機中。而且用戶和網絡服務器的交互也可能被攻陷,導致個人身份,密碼等關鍵敏感信息的泄漏。

四、利用前提

  1. URL從用戶可控制的輸入中提取;
  2. 該URL未經驗證,就被用於網絡應用程序的重定向地址。

五、挖掘利用

1、描述

由於該類型的漏洞與語言無關,因此沒有細致的分類。

2、挖掘

==常見於任何需要跳轉處。

  1. 用戶登錄、統一身份認證處,認證完后會跳轉
  2. 用戶分享、收藏內容過后,會跳轉
  3. 跨站點認證、授權后,會跳轉
  4. 站內點擊其它網址鏈接時,會跳轉
  5. 圖片上傳處(暴露圖片存放路徑的,並且可以修改的情況下)
    常見的參數名
redirect 
redirect_to 
redirect_url 
url jump 
jump_to 
target 
to
link 
linkto 
domain

可能性比較高的URL鏈接格式:http://www.aaa.com/bbb?url=http://ccc.com,如果成功跳轉指定的URL,說明存在URL跳轉漏洞。

但是,如果沒有成功跳轉,不能說明不存在URL跳轉漏洞。后台可能會對用戶請求的鏈接進行處理。這里我們要嘗試繞過。

aaa.com是含有URL重定向漏洞的網站, ccc.com是需要跳轉到的網站。

1.利用問號繞過
格式:http://www.aaa.com/bbb?url=http://ccc.com?aaa.com
注意:一定要帶上aaa.com
跳轉后的url是http://ccc.com?aaa.com

2.利用反斜杠和正斜杠繞過
正斜杠
格式1:http://www.aaa.com/bbb?url=http://ccc.com/aaa.com
反斜杠
格式2:http://www.aaa.com/bbb?url=http://ccc.com\aaa.com
" . ":
格式3:http://www.aaa.com/bbb?url=http://ccc.com.aaa.com

3.利用@繞過
格式:http://www.aaa.com/bbb?url=http://aaa.com@ccc.com
疑似只有火狐瀏覽器可以使用該方法

4.利用白名單缺陷繞過
白名單的限制往往是不全面的。
例如該網站想跳轉到自己的內部頁面,而只檢查跳轉url中有沒有白名單的內容。那么:http://www.aaa.com/bbb?url=http://cccaaa.com
購買cccaaa.com的域名,這樣也是可以繞過的。

5.多重驗證&跳轉繞過
現在很多網站都有多重驗證,比如你登陸賬戶后會出現另一個驗證頁面,輸入手機驗證碼進行驗證,此時這上面的URL很可能存在任意跳轉的問題。
比如http://www.aaa.com/acb?Url=http: … ttp://login.aaa.com
當然,還有多重的,結構的多重跳轉你修改最后面的URL就可以達到任意URL跳轉,中間的URL就沒必要動了。

6.點擊觸發實現繞過
很多登陸頁面的地方,其URL是一個跳轉的URL
如某一個登錄頁面,修改url:http://www.aaa.com/bbb?url=http://ccc.com
登錄用戶,有可能觸發。

7.利用xip.io繞過
格式:http://www.aaa.com/bbb?url=http://www.aaa.com.ccc.com.xip.io
但是沒有成功,暫且保留。

8.利用超鏈接繞過可信站點限制
比如一個URL,它是可以直接跳轉的,但是一般測試跳轉時大家習慣用www.baidu.com或qq.com這樣的可信站點進行測試,但是有些網站是可以跳轉這些網站的。
只要是可信站點且常用,基本都可以跳轉,那么這就屬於正常的業務邏輯了,難度就這樣錯失一個URL跳轉漏洞了?
其實不然,只要你的URL被百度收錄過,那么直接搜索你的域名,site:xxx.xxx
因為你在百度里點擊你的域名,它會先是一個302跳轉,而這個302跳轉就是百度下的302跳轉,那么這樣就可以繞過可信站點的限制,從而達到跳轉到指定URL。
當然,百度這個302有點長,你給它進行加密就行。
利用百度緩存鏈接,在其上再進行跳轉

9.POST參數中的URL跳轉
常見於上傳圖片、頭像處。如果過濾不嚴,將會把圖片的完整地址包含在POST參數里,這里我們修改其地址為ccc.com。
由於修改了地址,圖片就會顯示不出來,右鍵查看圖片,就會觸發URL跳轉(可以配合其他繞過方式)
如果POST參數里就只是URL跳轉參數,那么你可以給它轉成GET方式,然后進行跳轉就可以了,只要網站支持這樣的GET方式就行。在Burp Suite里可以一鍵轉換提交方式,右鍵選擇Change request method就可以!

10.利用#號繞過
格式:http://www.aaa.com/bbb?url=http://ccc.com#aaa.com

11.其他繞過思路

1. 跳轉到IP地址,而不是域名; 
2. 跳轉到IPV6地址,而不是IPv4地址; 
3. 將要跳轉到的IP地址用10進制、8進制、16進制形式表示; 
4. 更換協議,使用ftp、gopher協議等; 
5. 借鑒SSRF漏洞繞過的tricks; 
6. CRLF注入不能xss時,轉向利用任意URL跳轉漏洞;

3、利用

修改請求鏈接。釣魚、獲取敏感信息。進一步擴大危害。


六、修復防范

  1. 從實現角度,進行輸入驗證:對輸入的信息進行驗證。 比如說使用已知的有效輸入驗證機制,或是制定嚴格的說明來規范輸入的信息等等。對於不符合規范的輸入,或者是拒絕接受,或者對輸入進行轉換凈化,讓它符合規范要求。

  2. 從體系架構和設計上防范該安全漏洞,並盡量減少暴露的攻擊面。


七、提出問題

與SSRF類似,不知道兩者有何區別。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM