URL 跳轉漏洞的利用技巧
URL跳轉漏洞僅是一個url,如:
https://www.example.com/?
go=https://www.google.com/
當我們訪問這個url時,將從example.com跳轉到google.com。通常來說,它們被歸類到低影響的一類中,甚至,有些程序將它們列入超范圍的名單中,且不允許用戶訪問。那我們能對它們做些什么呢?一年多以前,我發布了這個教程,當時我稱之為“全互聯網的問題”,因為Facebook發行其APP時,沒有嚴格要求開發人員正確設置他們的白名單。這意味著開發人員可以將他們的跳轉URL設置為example.com所允許的所有子域。很多網站都采用了“用Facebook登錄”的方式,所以只需要在目標網站上設置一個url跳轉漏洞,就可以實現賬戶接管。
從此之后,Facebook和其他第三方登錄的開發者已經做出了相當大的改變,以防止此類攻擊。但我們是否仍舊可以利用url跳轉漏洞做些手腳呢?我們一起來探索吧!
開始
首先,讓我們先找到一個開放式重定向的url,并探索常見的位置來尋找它們。我們來看看當我們在google中搜索site:example.com,并且使用以下模板時會發生什么:(當然,你也可以嘗試自己寫的變量,你永遠不知道會有怎樣的發現!)

nurl:go
沒有發現?好吧,也沒事,讓我們在試試使用其網站,并在相同的位置尋找。從我的經驗看來,大多數網站會在用戶發生登錄、注銷、改密或注冊等行為后跳轉url,并通過處理url參數來完成這些操作。人們通常會忽視一個關鍵點——郵件中的鏈接。這些通常是由第三方操縱的。這些地方都應該是您第一時間要查看的地方,從登錄頁面開始瀏覽并測試這些頁面。
也不要忘記檢查哈希片段!!
提示:試試移動用戶代理呢,因為通常移動站點的工作方式不同!
利用url跳轉漏洞
此時,我們至少能夠發現一個url跳轉漏洞,如果還沒有發現的話,就繼續探索吧!:) 那么,我們一旦發現了一個有效的漏洞,如何利用它呢?下面就是我將使用url跳轉漏洞的最常見的利用方式:
通過配置錯誤的應用程序/登錄流程獲取口令
想象下面的場景:當我們登錄redacted.com時,看到url是這樣的returnto=/supersecure,使用你的口令成功登錄后,網站將重定向到/supersecure?token=39e9334a,然后才會跳轉到主站點去。所以,這是否意味著,如果我們將其設置為returnto=//myevilsite.com,并將這個登錄url發送給受害者,,當此網站存在漏洞且用戶成功登錄網站,那么攻擊者可以通過事先準備好的站點(用戶就會被重定向到這里)竊取用戶的登錄口令了。
繞過SSRF / RCE的黑名單
有些網站會將某些請求列入黑名單,從而只允許訪問theirsite.com。在他們的域環境中配有開放式的重定向,有時你可以通過繞過這些黑名單來實現SSRF或RCE(視情況而言),但這取決于網站的框架和它們處理重定向的方式是什么。
通過 javascript:alert(0) 進行XSS攻擊
這種方式不是每次都能奏效的,這取決于網站是如何重定向的。若其實302跳轉,則不會奏效;但如果它是通過JavaScript跳轉的,那就能成功。
利用文件上傳和移動設備的優勢
這種方式我還未曾公開講過,但還是計劃給大家分享。由于各種原因,許多網站允許我們上傳自定義文件。通常,在訪問這些網站時,系統會自動下載我們上傳的這些文件。所以,舉個例子來說,你上傳了一個zseano.html,并將其鏈接發送給你的好友,你的好友打開它時,便會自動下載這個html文件。
但是,你知道嗎,移動設備在顯示這個鏈接時,并不只顯示其鏈接和標題,而是顯示其內容。不要高興太早,認為自己已經拿到了XSS,因為移動設備上的瀏覽器不會執行JS。但是,你可以設置可點擊的鏈接,并添加所有精美的CSS/HTML..它們能夠泄露引用者。
現在,想象一下這個場景。你向redacted.com上傳一個文件,并且注意到他們的登錄流程中有returnUrl,且允許.theirdomain.com。那么,你剛剛上傳的文件就在cdn.theirsite.com上, 堪稱完美。將returnUrl設置為cdn.theirsite.com/eg/yourfile.html,并將這個鏈接發送給你的 目標 讓他登錄。登錄后,用戶將被重定向到你呈現的文件頁面。添加一個漂亮的“點擊此處繼續”按鈕,按鈕鏈接指向你自己的網站,點擊后,他們的登錄口令將因為引用而泄露*。
話雖如此,但是瀏覽器通常不會泄漏引用。這對我來說可能是極個別的情況,因為我以前發現過類似的問題。但是這個方法還是值得一試的,你永遠不知道它可能會發現什么。
常見的問題和繞過
我總是遇到試圖阻止第三方重定向的過濾器。然而,在考慮繞過過濾器之前,人們在測試使用一個開放式重定向的網站的登錄流程時,碰到的一個最常見的問題就是沒有正確編碼這些值。例如,https://example.com/login?return=https://mysite.com/。網站或瀏覽器或許不能識別其返回參數的格式,因此嘗試常規編碼總是好的,否則,就嘗試雙重編碼。
https://example.com/login?return=https%3A%...
https://example.com/login?return=https%3A%...
你是否注意到我們在一個鏈接中放了兩個重定向?我們需要對最后一次重定向進行雙重編碼,以便瀏覽器最后對其進行解碼并跳轉。有時,我們沒能正確的編碼,那么,瀏覽器也不會正確地跳轉。
繞過
下面是一些我自己發現的有趣的繞過方式,你可以隨時使用,也可以提供其他新的方式。
/yoururl.com
//yoururl.com
\yoururl.com
//yoururl.com
//%2F/yoursite.com
////yoursite.com
/%0D/yoursite.com
java%0d%0ascript%0d%0a:alert(0), j%0d%0aava%0d%0aas%0d%0acrip%0d%0at%0d%0a:confirm
0,java%07script:prompt0,java%09scrip%07t:prompt0
原創:安全先師
原創鏈接:https://mp.weixin.qq.com/s/4MSqASI146kOsIF...