文章目錄
- 前言
- 一、漏洞本質
- 二、攻擊原理
- 正常跳轉流程
- 漏洞觸發流程
- 三、抓包的關鍵時機:跳轉參數生成時
- 四、風險場景
- 1.登錄/注冊后跳轉
- 2.退出登錄跳轉
- 3.分享/廣告鏈接跳轉
- 4.密碼重置鏈接跳轉
- 五、漏洞挖掘:怎么找到這種漏洞?
- 1.找到跳轉參數
- 2.篡改參數測試
- 3.繞過網站的簡單攔截
- 六、漏洞危害:被利用后會發生什么?
- 七、URL 跳轉漏洞危害實例:從正常登錄到信息被竊的全過程
- 1. 正常登錄流程(無漏洞時)
- 2. 漏洞被利用:黑客如何構造惡意鏈接?
- 3. 用戶中招:信息如何被黑客獲取?
- 4. 最終危害:黑客拿到憑證后能做什么?
- 八、與SSRF漏洞的區別
- 九、防御方案:怎么堵住這個漏洞?
- 1.用“白名單”限制跳轉范圍
- 2.不用URL,用“編號”代替
- 3.限制“內部跳轉”,禁止跳外部
- 4.加個“確認頁”
- 十、總結
往期文章
【Web安全】一次性搞懂 ReDOS 漏洞原理/檢測/防御
【Web安全】一次性搞懂 XSS 漏洞原理/檢測/防御
【Web安全】一次性搞懂 CSRF 漏洞原理/檢測/防御
【Web安全】一次性搞懂 SSRF 漏洞原理/檢測/防御
【Web安全】一次性搞懂越權漏洞原理/檢測/防御
【Web安全】邏輯漏洞之支付漏洞:原理、場景與防御
【Web安全】小白也能懂的并發漏洞:原理、場景與防御
前言
在Web安全的邏輯漏洞里,URL跳轉漏洞可能不像支付漏洞那樣直接關聯金錢,但它卻像一個“惡意導航員”,能悄無聲息地把用戶引向釣魚網站、病毒頁面,進而導致賬號被盜、信息泄露等問題。
簡單說,當你點擊一個“安全鏈接”,本應跳轉到官方網站,結果卻跳到了騙子仿造的假網站——這背后可能就是URL跳轉漏洞在搞鬼。它的危害不在于復雜的技術,而在于利用用戶對“正規網站”的信任,完成釣魚、詐騙等攻擊。
一、漏洞本質
URL跳轉漏洞的核心是服務器對“跳轉目標URL”的校驗邏輯失效。
正常情況下,網站的跳轉功能(比如登錄后跳回原頁面、點擊鏈接跳轉到相關頁面)需要先檢查“要跳轉到的URL”是否合法(比如是否屬于官方域名、是否在允許的范圍內);但如果存在漏洞,服務器可能直接信任用戶傳來的跳轉地址,或者校驗時偷懶(比如只檢查開頭幾個字符),導致攻擊者可以隨意修改跳轉目標,把用戶“騙”到惡意網站。
一句話總結:“該攔的壞鏈接沒攔住,該驗證的地址沒驗證”。
二、攻擊原理
正常跳轉流程
- 用戶在網站上觸發跳轉(比如點擊“登錄后返回”“查看詳情”按鈕);
- 服務器生成跳轉鏈接,其中包含目標URL參數(比如
https://xxx.com/login?redirect=https://xxx.com/home
); - 服務器校驗這個
redirect
參數里的URL是否合法(比如是否屬于xxx.com
域名); - 校驗通過后,用戶被安全跳轉到目標地址。
漏洞觸發流程
- 攻擊者發現網站的跳轉鏈接里有可修改的參數(比如
redirect
、url
、jump
等); - 攻擊者篡改這個參數,把合法URL換成惡意地址(比如
https://xxx.com/login?redirect=https://hack.com/fake
); - 服務器沒有校驗這個篡改后的URL(或者校驗不嚴格),直接執行跳轉;
- 用戶點擊鏈接后,被“騙”到惡意網站(比如仿造的登錄頁,用于盜取賬號密碼)。
三、抓包的關鍵時機:跳轉參數生成時
URL跳轉漏洞的攻擊,關鍵是在**“生成跳轉鏈接”的環節篡改參數**。
比如這些場景:
- 登錄頁面:可能有
redirect
參數,用于登錄后跳回原頁面(例:https://xxx.com/login?redirect=https://xxx.com/user
); - 退出登錄:可能有
logoutUrl
參數,用于退出后跳轉到首頁(例:https://xxx.com/logout?logoutUrl=https://xxx.com/index
); - 分享/廣告鏈接:可能有
url
參數,用于跳轉到目標頁面(例:https://xxx.com/share?url=https://xxx.com/article
)。
攻擊者會用抓包工具(比如BurpSuite工具)抓住這些包含跳轉參數的請求,把里面的合法URL改成惡意地址,再發給用戶。
四、風險場景
URL跳轉漏洞的危害主要是“誘導用戶訪問惡意網站”,常見場景有這些:
1.登錄/注冊后跳轉
很多網站登錄后會自動跳回用戶之前瀏覽的頁面,比如https://xxx.com/login?redirect=https://xxx.com/cart
(登錄后跳購物車)。
如果有漏洞,攻擊者可以把redirect
改成惡意地址(比如https://hack.com/fake-login
),然后把鏈接偽裝成“官方登錄頁”發給用戶。用戶點擊后,先正常登錄官方網站,接著被自動跳轉到假登錄頁——由于假頁面長得和官方一樣,用戶可能會再次輸入賬號密碼,導致信息被黑客盜取。
2.退出登錄跳轉
退出登錄時,網站可能會跳轉到首頁,參數類似https://xxx.com/logout?redirectUrl=https://xxx.com/index
。
攻擊者篡改后,鏈接變成https://xxx.com/logout?redirectUrl=https://hack.com/fake-home
。用戶退出后,會被跳轉到假首頁,假頁面可能會彈窗“賬號異常,請重新登錄”,誘導用戶輸入信息。
3.分享/廣告鏈接跳轉
比如某論壇的“分享到微博”功能,鏈接可能是https://xxx.com/share?url=https://weibo.com
。
攻擊者篡改后,分享鏈接變成https://xxx.com/share?url=https://hack.com/virus
。當其他用戶點擊“分享”時,會直接跳轉到帶病毒的頁面。
4.密碼重置鏈接跳轉
有些網站重置密碼后,會跳轉回登錄頁,參數比如https://xxx.com/reset-password?jump=https://xxx.com/login
。
攻擊者篡改后,用戶重置密碼成功后,會被跳轉到假的“安全中心”,騙取銀行卡信息等。
五、漏洞挖掘:怎么找到這種漏洞?
即使是安全小白,也能通過簡單步驟測試是否存在URL跳轉漏洞,核心是“找參數、改地址、測跳轉”。
1.找到跳轉參數
先在網站上找包含“跳轉”功能的地方,看看鏈接里有沒有類似這些參數:
redirect
(最常見,比如登錄后跳轉)url
(比如點擊鏈接跳轉)jump
(比如按鈕跳轉)target
(比如頁面內跳轉)
例:在登錄頁看到鏈接https://xxx.com/login?redirect=https://xxx.com/home
,這里的redirect
就是要測試的參數。
2.篡改參數測試
把參數里的合法地址換成自己能控制的地址(比如自己的博客、團隊官網,別用baidu.com
這類常見域名,很多網站會拉黑它們),然后訪問修改后的鏈接,看是否會跳轉過去。
例:把redirect=https://xxx.com/home
改成redirect=https://myblog.com/test
,如果能成功跳轉到myblog.com
,說明可能有漏洞。
3.繞過網站的簡單攔截
如果直接改域名被攔截(比如提示“不允許跳轉外部鏈接”),可以試試這些小技巧:
- 用
@
符號:比如https://xxx.com/login?redirect=https://xxx.com@myblog.com
(網站可能只校驗@
前面的xxx.com
,實際跳轉到myblog.com
); - 用IP代替域名:比如把
myblog.com
換成它的IP地址(1.2.3.4
),有些網站只攔域名不攔IP; - 加特殊符號:比如在URL后加
/
或#
(https://myblog.com/#
),可能繞過簡單校驗。
這里繞過的更多操作可以參考:SSRF漏洞中的URL繞過的 3.3 章節。
六、漏洞危害:被利用后會發生什么?
最常見的危害是釣魚攻擊:如今AI來造一個高仿的假頁面已經很難從肉眼分辨出來了。
- 攻擊者偽造一個和官方網站一模一樣的假頁面(比如假登錄頁、假支付頁);
- 通過URL跳轉漏洞,誘導用戶從正規網站“無縫跳轉”到假頁面;
- 用戶以為還在正規網站上,輸入賬號、密碼、銀行卡信息,這些信息會被攻擊者獲取。
此外,還可能導致:
- 傳播惡意軟件:跳轉至帶病毒的頁面,自動下載木馬;
- 損壞網站信譽:用戶被騙后,會認為是官方網站不安全。
七、URL 跳轉漏洞危害實例:從正常登錄到信息被竊的全過程
為了讓安全小白更直觀理解 URL 跳轉漏洞的危害,我們結合具體場景拆解:黑客如何利用漏洞,一步步獲取用戶的敏感信息。
場景背景
假設aaa.bb.com
是一個正規網站(比如某購物平臺),用戶需要登錄才能使用功能;aaa.cc.com
是該網站的關聯域名(比如官方幫助中心)。正常情況下,登錄后會自動跳轉到用戶需要訪問的頁面。
1. 正常登錄流程(無漏洞時)
- 用戶訪問登錄頁,鏈接為:
https://aaa.bb.com/login?redirectUrl=aaa.cc.com
這里的redirectUrl
參數表示:登錄成功后,自動跳轉到aaa.cc.com
(比如用戶原本在瀏覽幫助中心,點擊 “登錄” 后,登錄成功會跳回幫助中心)。 - 用戶輸入賬號密碼,點擊 “登錄”;
- 服務器驗證賬號密碼正確后,檢查
redirectUrl
參數中的aaa.cc.com
是否為可信域名(比如屬于官方允許的跳轉范圍); - 校驗通過,用戶被安全跳轉到
aaa.cc.com
,同時瀏覽器會記錄登錄狀態(比如生成一個臨時憑證req=qweasdzxc123
,用于證明 “已登錄”)。
整個過程中,用戶始終在官方信任的域名內跳轉,信息是安全的。
2. 漏洞被利用:黑客如何構造惡意鏈接?
黑客發現aaa.bb.com
的登錄頁存在 URL 跳轉漏洞 ——服務器沒有校驗redirectUrl
參數,或者用了容易繞過的校驗方式(比如只檢查域名開頭,不檢查完整地址)。
于是,黑客做了兩件事:
- 構造惡意登錄鏈接:把
redirectUrl
換成自己控制的服務器地址11.2.12.4:8080
(這是黑客電腦的 IP 和端口,用于監聽用戶信息),鏈接變成:https://aaa.bb.com/login?url=11.2.12.4:8080
(這里的url參數和redirectUrl
作用一樣,都是控制跳轉目標)。 - 用釣魚手段誘導用戶點擊:比如偽裝成 “官方活動鏈接”“賬號異常需驗證”,發給目標用戶(用戶看到鏈接開頭是
aaa.bb.com
,會認為是正規網站,放松警惕)。
3. 用戶中招:信息如何被黑客獲取?
用戶點擊了黑客發的惡意鏈接https://aaa.bb.com/login?url=11.2.12.4:8080
,接下來的流程對用戶來說 “看似正常”,但實際上已陷入陷阱:
- 用戶在
aaa.bb.com
的登錄頁輸入賬號密碼(因為頁面確實是正規網站的登錄界面,用戶不會懷疑); - 服務器驗證賬號密碼正確后,由于漏洞存在,直接按照url參數的指示,把用戶跳轉到
11.2.12.4:8080
(黑客的服務器); - 此時,用戶的瀏覽器會帶著 “登錄憑證”(比如之前提到的
req=qweasdzxc123
)跳轉到黑客服務器 —— 這個憑證相當于 “已登錄的通行證”,能證明用戶在aaa.bb.com
上的登錄狀態; - 黑客早已在自己的服務器上啟動了監聽工具(
nc -lvvp 11.2.12.4:8080
,這行命令的作用是 “打開 8080 端口,等待并記錄所有連接過來的信息”); - 當用戶的瀏覽器跳轉到
11.2.12.4:8080
時,黑客的監聽工具會捕獲到用戶的登錄憑證req=qweasdzxc123
。
4. 最終危害:黑客拿到憑證后能做什么?
登錄憑證req=qweasdzxc123
是用戶在aaa.bb.com
上的 “身份令牌”,黑客拿到后可以:
- 直接用這個憑證訪問
aaa.bb.com
(無需登錄密碼),查看用戶的個人信息(姓名、電話、地址等); - 操作用戶賬號(比如購物平臺的話,可能盜用優惠券、發起訂單;社交平臺的話,可能冒充用戶發送詐騙信息);
- 如果用戶在
aaa.bb.com
綁定了銀行卡、支付賬號,甚至可能導致財產損失。
八、與SSRF漏洞的區別
很多小白會把URL跳轉漏洞和SSRF漏洞搞混,其實它們的“攻擊對象”完全不同:
區別 | URL跳轉漏洞 | SSRF漏洞 |
---|---|---|
受害者 | 普通用戶(客戶端) | 服務器(網站后臺) |
行為 | 誘導用戶跳轉到惡意網站 | 誘導服務器主動請求惡意地址 |
例子 | 你點了一個鏈接,從官網跳到假網站 | 黑客讓淘寶服務器主動去訪問他的惡意服務器 |
九、防御方案:怎么堵住這個漏洞?
核心原則:不要相信用戶傳來的任何跳轉地址,服務器自己把控跳轉目標。
1.用“白名單”限制跳轉范圍
服務器只允許跳轉到提前設定好的合法域名(比如官網的域名xxx.com
、合作網站域名),其他地址一律拒絕。
例:如果網站只允許跳轉到xxx.com
和partner.com
,那么當redirect
參數是myblog.com
時,直接攔截,不執行跳轉。
2.不用URL,用“編號”代替
不直接在參數里寫跳轉地址,而是給每個合法地址編一個號,參數只傳編號。
例:用redirect=1
代表跳轉到xxx.com/home
,redirect=2
代表跳轉到xxx.com/cart
。服務器收到編號后,自己去查對應的合法地址,再執行跳轉。這樣攻擊者改編號也沒用(不知道哪個編號對應哪個地址)。
3.限制“內部跳轉”,禁止跳外部
如果網站不需要跳轉到外部域名,就明確規定:只能在自己的域名內跳轉(比如xxx.com
下的頁面),一旦發現跳轉地址包含其他域名,直接攔截。
4.加個“確認頁”
在跳轉前,給用戶一個提示:“即將跳轉到xxx網站,是否繼續?”讓用戶有機會發現異常(比如看到要跳轉到陌生網站,就取消操作)。
十、總結
URL跳轉漏洞的本質,是服務器對“跳轉地址”的校驗太松懈,讓攻擊者有機可乘。它不像支付漏洞那樣直接影響金錢,但卻能通過釣魚等方式間接危害用戶的信息和財產安全。
對于普通用戶:點擊鏈接后,如果發現跳轉的頁面和預期不符(比如突然出現陌生登錄框),一定要提高警惕,別輕易輸入信息。
對于開發者:記住“客戶端傳來的跳轉地址都不可信”,用白名單、編號映射等方法,讓服務器牢牢控制跳轉目標。只有這樣,才能擋住那些“惡意導航員”。
本文是「Web安全基礎」系列的第 8 篇,點擊專欄導航查看全部系列內容。