參考文章
- 悟空雲課堂 | 第二期:URL重定向(跳轉)漏洞
- CWE-601: URL Redirection to Untrusted Site ('Open Redirect')
- 分享幾個繞過URL跳轉限制的思路
- URL重定向(跳轉)漏洞
- Tag: #URL重定向
- Ref: [[001.SSRF]]
概述
總結
一、漏洞介紹
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\]
三、漏洞危害
- 網絡釣魚
即攻擊者將漏洞用比較有名的域名偽裝,用戶沒有注意到以此放心點擊。被竊取敏感信息。 - 繞過保護機制;獲取權限或假冒身份
用戶的訪問可能會被重定向到不可靠的網頁。不可靠網頁中可能存在惡意軟件並可能攻陷用戶電腦。一旦用戶電腦被攻陷,用戶就暴露在大量各種網絡危機中。而且用戶和網絡服務器的交互也可能被攻陷,導致個人身份,密碼等關鍵敏感信息的泄漏。
四、利用前提
- URL從用戶可控制的輸入中提取;
- 該URL未經驗證,就被用於網絡應用程序的重定向地址。
五、挖掘利用
1、描述
由於該類型的漏洞與語言無關,因此沒有細致的分類。
2、挖掘
==常見於任何需要跳轉處。
- 用戶登錄、統一身份認證處,認證完后會跳轉
- 用戶分享、收藏內容過后,會跳轉
- 跨站點認證、授權后,會跳轉
- 站內點擊其它網址鏈接時,會跳轉
- 圖片上傳處(暴露圖片存放路徑的,並且可以修改的情況下)
常見的參數名
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、利用
修改請求鏈接。釣魚、獲取敏感信息。進一步擴大危害。
六、修復防范
-
從實現角度,進行輸入驗證:對輸入的信息進行驗證。 比如說使用已知的有效輸入驗證機制,或是制定嚴格的說明來規范輸入的信息等等。對於不符合規范的輸入,或者是拒絕接受,或者對輸入進行轉換凈化,讓它符合規范要求。
-
從體系架構和設計上防范該安全漏洞,並盡量減少暴露的攻擊面。
七、提出問題
與SSRF類似,不知道兩者有何區別。