官术网_书友最值得收藏!

2.1 開放式重定向如何工作

開放式重定向一般發生在開發者誤信了攻擊者控制的輸入而將網站重定向到另一個站點,這通常是通過URL參數、HTML<meta>刷新標簽、DOM(Document Object Model,文檔對象模型)中window對象的location屬性等實現的。

很多Web網站都是通過在原始URL的參數中設置目標URL來有意實現用戶訪問的重定向的。應用程序通過使用這個參數來告訴瀏覽器向目標URL發送一個GET請求,例如,假定Google網站具有重定向到Gmail的功能,就可以通過訪問如下URL實現:

在這種情況下,當我們訪問上面的URL時,Google網站會接收到一個HTTP的GET請求,然后依據redirect_to參數中指定的值來確定將你的瀏覽器重定向到哪里。在這之后,Google網站服務器會返回一個用于指示瀏覽器重定向用戶的HTTP響應狀態碼。通常,這個狀態碼是302,但有時也可能是301、303、307或308。這些HTTP響應狀態碼告訴瀏覽器請求的網頁找到了,但是需要瀏覽器發起一個GET請求到redirect_to參數值,https://www.gmail.com/這個參數值也在HTTP響應Location頭中。Location頭表示了向哪里重定向GET請求。

現在,假設攻擊者修改了原始的URL,如下所示:

如果Google沒有驗證redirect_to參數是否為其將訪問者重定向到一個自有合法站點,攻擊者就可以將該參數的值換成它們自己的URL。結果是,HTTP響應可能會引導瀏覽器向https://www.<attacker>.com/發起GET請求。一旦攻擊者已經引導用戶到他們的惡意網站,就可以發起進一步的攻擊。

當檢查這類漏洞時,要重點關注具有特定名稱的URL參數,例如url=、redirect=、next=等,因為這些都有可能會表示引導用戶重定向去的URL。另一個需要注意的是,重定向參數不總是明顯命名的,參數也可能隨著網站的不同而不同,即使同一個網站內部不同的鏈接時也可能不同。在有些情況下,參數可能以單個字母的形式表示,例如r=或u=等。

除了基于參數的攻擊之外,HTML<meta>標簽和JavaScript都可以重定向瀏覽器。HTML<meta>標簽可以告知瀏覽器刷新網頁,并向標簽中的content屬性定義的URL發起GET請求。下面是一個例子:

content屬性定義了瀏覽器發起HTTP請求的兩個步驟。首先,content屬性定義了瀏覽器在向URL發起HTTP請求前需要等待的時間,在本例中,這個時間是0秒。其次,content屬性確定了瀏覽器向其發起GET請求的網站中URL的參數,在本例中,這個參數是https://www.google.com。當攻擊者具有控制<meta>標簽的content屬性的能力時,或者通過其他漏洞能夠注入他們自己的標簽時,就可以利用這種重定向行為。

攻擊者還可以通過使用JavaScript修改文檔對象模型(DOM)中window對象的location屬性來實現重定向用戶。DOM是用于HTML和XML文檔的API,它允許開發者修改網頁的結構、風格和內容。因為location屬性表示了請求將被重定向到哪里,瀏覽器將立刻解釋JavaScript腳本并重定向到指定的URL。攻擊者可以通過如下形式的JavaScript腳本修改window的location屬性:

通常,僅當攻擊者能夠執行JavaScript語句時才能設置window.location的屬性值,而獲得JavaScript執行權限一般是通過跨站腳本漏洞或者網站允許用戶自定義重定向URL的漏洞來實現,就像在本章介紹的HackerOne中間網頁重定向漏洞一樣。

當挖掘開放式重定向漏洞時,你通常需要持續監測發向測試網站的包含URL重定向參數的GET請求代理歷史。

主站蜘蛛池模板: 泽普县| 宁河县| 兴义市| 全椒县| 贡山| 伊通| 武城县| 汽车| 通化县| 夏津县| 华安县| 沁阳市| 长泰县| 新营市| 南华县| 韩城市| 南城县| 普陀区| 西宁市| 吴川市| 鲜城| 同仁县| 年辖:市辖区| 佛学| 沾化县| 尼勒克县| 伊春市| 平远县| 中西区| 锡林郭勒盟| 灵寿县| 松阳县| 湘潭县| 古浪县| 富蕴县| 浮山县| 秭归县| 城固县| 巴彦县| 南部县| 香港|