URL重定向漏洞

原文鏈接:秋水表哥博客

0X00:

什么是url重定向行拢?

URL重定向(URL redirection,或稱網(wǎng)址重定向或網(wǎng)域名稱轉(zhuǎn)址)诞吱,是指當(dāng)使用者瀏覽某個(gè)網(wǎng)址時(shí)舟奠,將他導(dǎo)向到另一個(gè)網(wǎng)址的技術(shù)

url轉(zhuǎn)發(fā)和重定向區(qū)別

第一種是request.getRequestDispatcher().forward(request,response):

1、屬于轉(zhuǎn)發(fā)房维,也是服務(wù)器跳轉(zhuǎn)沼瘫,也可以叫做內(nèi)部重定向,相當(dāng)于方法調(diào)用咙俩,在執(zhí)行當(dāng)前文件的過程中轉(zhuǎn)向執(zhí)行目標(biāo)文件耿戚,兩個(gè)文件(當(dāng)前文件和目標(biāo)文件)屬于同一次請(qǐng)求,前后頁共用一個(gè)request阿趁,可以通過此來傳遞一些數(shù)據(jù)或者session信息膜蛔,request.setAttribute()和request.getAttribute()。

2歌焦、在前后兩次執(zhí)行后飞几,地址欄不變,仍是當(dāng)前文件的地址独撇。

3屑墨、不能轉(zhuǎn)向到本web應(yīng)用之外的頁面和網(wǎng)站,所以轉(zhuǎn)向的速度要快纷铣。

4卵史、URL中所包含的“/”表示應(yīng)用程序(項(xiàng)目)的路徑。

第二種是response.sendRedirect():

1搜立、屬于重定向以躯,也是客戶端跳轉(zhuǎn),相當(dāng)于客戶端向服務(wù)端發(fā)送請(qǐng)求之后,服務(wù)器返回一個(gè)響應(yīng),客戶端接收到響應(yīng)之后又向服務(wù)端發(fā)送一次請(qǐng)求,一共是2次請(qǐng)求秒赤,前后頁不共用一個(gè)request,不能讀取轉(zhuǎn)向前通過request.setAttribute()設(shè)置的屬性值膀懈。

2、在前后兩次執(zhí)行后谨垃,地址欄發(fā)生改變启搂,是目標(biāo)文件的地址。

3刘陶、可以轉(zhuǎn)向到本web應(yīng)用之外的頁面和網(wǎng)站胳赌,所以轉(zhuǎn)向的速度相對(duì)要慢。

4匙隔、URL種所包含的"/"表示根目錄的路徑疑苫。

url重定向漏洞

為什么會(huì)產(chǎn)生url重定向漏洞?

個(gè)人理解應(yīng)當(dāng)是外部重定向才會(huì)引發(fā)此漏洞纷责,畢竟參數(shù)可控缀匕,是問題根源,

1\. 寫代碼時(shí)沒有考慮過任意URL跳轉(zhuǎn)漏洞碰逸,或者根本不知道/不認(rèn)為這是個(gè)漏洞;

2\. 寫代碼時(shí)考慮不周,用取子串、取后綴等方法簡單判斷阔加,代碼邏輯可被繞過;

3\. 對(duì)傳入?yún)?shù)做一些奇葩的操作(域名剪切/拼接/重組)和判斷饵史,適得其反,反被繞過;

4\. 原始語言自帶的解析URL胜榔、判斷域名的函數(shù)庫出現(xiàn)邏輯漏洞或者意外特性,可被繞過;

5\. 原始語言胳喷、服務(wù)器/容器特性、瀏覽器等對(duì)標(biāo)準(zhǔn)URL協(xié)議解析處理等差異性導(dǎo)致被繞過;

url重定向漏洞危害是什么呢夭织?

網(wǎng)站接受用戶輸入的鏈接吭露,跳轉(zhuǎn)到一個(gè)攻擊者控制的網(wǎng)站,可能導(dǎo)致跳轉(zhuǎn)過去的用戶被精心設(shè)置的釣魚頁面騙走自己的個(gè)人信息        和登錄口令

ssrf和url重定向區(qū)別尊惰?

問過大佬讲竿,說了一句,除了模樣長得一樣其他什么都不一樣

個(gè)人理解:SSRF是服務(wù)器幫你去訪問弄屡,url重定向其實(shí)也是服務(wù)器幫忙去訪問题禀,那么感覺SSRF可能能實(shí)現(xiàn)url重定向功能,也應(yīng)該      可以用來釣魚膀捷,區(qū)別的話可能SSRF能幫忙探測(cè)內(nèi)網(wǎng)迈嘹,而url重定向是訪問外網(wǎng)

0X01:

以下均轉(zhuǎn)自:https://landgrey.me/open-redirect-bypass/

使用場(chǎng)景

1. 用戶登錄、統(tǒng)一身份認(rèn)證處,認(rèn)證完后會(huì)跳轉(zhuǎn)

2. 用戶分享秀仲、收藏內(nèi)容過后融痛,會(huì)跳轉(zhuǎn)

3. 跨站點(diǎn)認(rèn)證、授權(quán)后神僵,會(huì)跳轉(zhuǎn)

4. 站內(nèi)點(diǎn)擊其它網(wǎng)址鏈接時(shí)雁刷,會(huì)跳轉(zhuǎn)

常見參數(shù)名

redirect
redirect_to
redirect_url
url
jump
jump_to
target
to
link
linkto
domain</pre>

幾種語句和框架版本常見的URL跳轉(zhuǎn)代碼如下,可用作白盒代碼審計(jì)參考:

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]

利用方法

后面假設(shè)源域名為:www.landgrey.me 要跳轉(zhuǎn)過去的域?yàn)椋篹vil.com

1. 直接跳轉(zhuǎn)

沒做任何限制挑豌,參數(shù)后直接跟要跳轉(zhuǎn)過去的網(wǎng)址就行:

https://www.landgrey.me/redirect.php?url=http://www.evil.com/untrust.html

2. 協(xié)議一致性

當(dāng)程序員校驗(yàn)跳轉(zhuǎn)的網(wǎng)址協(xié)議必須為https時(shí)(有時(shí)候跳轉(zhuǎn)不過去不會(huì)給提示):

https://www.landgrey.me/redirect.php?url=https://www.evil.com/untrust.html

3. 域名字符串檢測(cè)欺騙

01. 有的程序員會(huì)檢測(cè)當(dāng)前的域名字符串是否在要跳轉(zhuǎn)過去的字符串中安券,是子字符串時(shí)才會(huì)跳轉(zhuǎn),php代碼如:

<?php
$redirect_url = $_GET['url'];
if(strstr($redirect_url,"www.landgrey.me") !== false){ 
   header("Location: " . $redirect_url);
}
else{
    die("Forbidden");}

繞過:

https://www.landgrey.me/redirect.php?url=http://www.landgrey.me.www.evil.com/untrust.html

一個(gè)京東的實(shí)例:

02. 還有的會(huì)檢測(cè)域名結(jié)尾是不是當(dāng)前域名氓英,是的話才會(huì)跳轉(zhuǎn)侯勉,Django示例代碼如下:

redirect_url = request.GET.get("url")
if redirect_url.endswith('landgrey.me'):
    HttpResponseRedirect(redirect_url)
else:
    HttpResponseRedirect("https://www.landgrey.me")

繞過:

https://www.landgrey.me/redirect.php?url=http://www.evil.com/www.landgrey.me

或者買個(gè)xxxlandgrey.me域名,然后繞過:

https://www.landgrey.me/redirect.php?url=http://xxxlandgrey.me

03.可信站多次重定向繞過

利用已知可重定向到自己域名的可信站點(diǎn)的重定向铝阐,來最終重定向自己控制的站點(diǎn)址貌。

一種是利用程序自己的公共白名單可信站點(diǎn),如www.baidu.com徘键,其中百度有個(gè)搜索的緩存鏈接比如https://www.baidu.com/linkurl=iMwwNDM6ahaxKkSFuOG练对,可以最終跳轉(zhuǎn)到自己網(wǎng)站,然后測(cè)試時(shí):

https://www.landgrey.me/redirect.php?url=https://www.baidu.com/linkurl=iMwwNDM6ahaxKkSFuOG

就可以跳轉(zhuǎn)到自己站點(diǎn)了吹害。

另一種類似螟凭,但是程序的跳轉(zhuǎn)白名單比較嚴(yán)格,只能是自己域的地址它呀,這時(shí)需要有一個(gè)目標(biāo)其它域的任意跳轉(zhuǎn)漏洞螺男,比如https://auth.landgrey.me/jump.do?url=evil.com,然后測(cè)試時(shí):

https://www.landgrey.me/redirect.php?url=https://auth.landgrey.me/jump.do?url=evil.com

4. 畸形地址繞過

這一部分由于各種語言纵穿、框架和代碼實(shí)現(xiàn)的不同下隧,防護(hù)任意跳轉(zhuǎn)代碼的多種多樣;導(dǎo)致繞過方式乍看起來很詭異谓媒,有多詭異淆院?舉三個(gè)案例:

案例一:這個(gè)案例 ,通過添加多余的"/"(%2F)符號(hào)句惯,再對(duì)"."兩次url編碼成"%252E"繞過代碼中對(duì)域名后".com"的切割土辩, 構(gòu)造類似

https://landgrey.me/%2Fevil%252Ecom

達(dá)到了任意URL跳轉(zhuǎn)的目的。

案例二:這個(gè)案例抢野,通過添加4個(gè)"/"前綴和"/.."后綴脯燃,構(gòu)造類似

https://landgrey.me/redirect.php?url=////www.evil.com/..

進(jìn)行了繞過。

案例三:這個(gè)案例蒙保,通過"."字符辕棚,構(gòu)造類似

https://landgrey.me/redirect.php?url=http://www.evil.com.landgrey.me

進(jìn)行繞過。

手工測(cè)試時(shí),主要結(jié)合目標(biāo)對(duì)輸入的跳轉(zhuǎn)處理和提示逝嚎,根據(jù)經(jīng)驗(yàn)來繞過;
自動(dòng)化測(cè)試時(shí)扁瓢,通常是根據(jù)目標(biāo)和規(guī)則,事先生成payload补君,用工具(如burpsuite)在漏洞點(diǎn)處自動(dòng)發(fā)包測(cè)試;
復(fù)雜的案例引几,在當(dāng)時(shí)測(cè)試時(shí)一般有相關(guān)提示信息,不然就是自動(dòng)化fuzzing出的挽铁,實(shí)際中手工bypass的難度和花費(fèi)太大伟桅。

URL跳轉(zhuǎn)漏洞復(fù)雜的真實(shí)例子也比較難找。黑盒測(cè)試叽掘,經(jīng)常是測(cè)試成功也不能確定到底是哪里出的問題楣铁。要達(dá)到繞過效果,主要涉及以下9個(gè)特殊字符:

";", "/", "", "?", ":", "@", "=", "&", "."

一個(gè)“協(xié)議型”的網(wǎng)址示例:

http://user:pass@testweb.com/path/;help.php?q=abc#lastpage

image

10種bypass方式:

1. 單斜線"/"繞過
https://www.landgrey.me/redirect.php?url=/www.evil.com
2. 缺少協(xié)議繞過
https://www.landgrey.me/redirect.php?url=//www.evil.com
3. 多斜線"/"前綴繞過
https://www.landgrey.me/redirect.php?url=///www.evil.com
https://www.landgrey.me/redirect.php?url=////www.evil.com
4. 利用"@"符號(hào)繞過
https://www.landgrey.me/redirect.php?url=https://www.landgrey.me@www.evil.com
5. 利用反斜線""繞過
https://www.landgrey.me/redirect.php?url=https://www.evil.com\www.landgrey.me
6. 利用"#"符號(hào)繞過
https://www.landgrey.me/redirect.php?url=https://www.evil.com#www.landgrey.me
7. 利用"?"號(hào)繞過
https://www.landgrey.me/redirect.php?url=https://www.evil.com?www.landgrey.me
8. 利用"\"繞過
https://www.landgrey.me/redirect.php?url=https://www.evil.com\www.landgrey.me
9. 利用"."繞過
https://www.landgrey.me/redirect.php?url=.evil (可能會(huì)跳轉(zhuǎn)到www.landgrey.me.evil域名)
https://www.landgrey.me/redirect.php?url=.evil.com (可能會(huì)跳轉(zhuǎn)到evil.com域名)
10.重復(fù)特殊字符繞過
https://www.landgrey.me/redirect.php?url=///www.evil.com//..
https://www.landgrey.me/redirect.php?url=////www.evil.com//..

上面的方法有些是有案例更扁,有些是別人總結(jié)的盖腕,有些是有原理依循的,比如第4條浓镜,利用"@"符號(hào)前的"www.landgrey.me"是指"www.evil.com"域的一個(gè)用戶名來繞過溃列。

5. 其它繞過思路

1. 跳轉(zhuǎn)到IP地址,而不是域名;
2. 跳轉(zhuǎn)到IPV6地址膛薛,而不是IPv4地址;
3. 將要跳轉(zhuǎn)到的IP地址用10進(jìn)制听隐、8進(jìn)制、16進(jìn)制形式表示;
4. 更換協(xié)議,使用ftp哄啄、gopher協(xié)議等;
5. 借鑒SSRF漏洞繞過的tricks;
6. CRLF注入不能xss時(shí)遵绰,轉(zhuǎn)向利用任意URL跳轉(zhuǎn)漏洞;

6. 自動(dòng)化利用

參考Github上已總結(jié)的測(cè)試payload(很雜,一些可能根本沒有實(shí)例增淹,完全是YY),按情況替換里面的域名乌企。在黑盒情況下虑润,可以用來批量發(fā)包測(cè)試。

防護(hù)方法

1. 代碼固定跳轉(zhuǎn)地址加酵,不讓用戶控制變量
2. 跳轉(zhuǎn)目標(biāo)地址采用白名單映射機(jī)制
比如1代表auth.landgrey.me拳喻,2代表www.landgrey.me,其它不做任何動(dòng)作
3. 合理充分的校驗(yàn)校驗(yàn)跳轉(zhuǎn)的目標(biāo)地址猪腕,非己方地址時(shí)告知用戶跳轉(zhuǎn)風(fēng)險(xiǎn)</pre>

參考鏈接:

rfc1738

rfc1808

rfc3986

Django的兩個(gè)url跳轉(zhuǎn)漏洞分析

說下我是怎么繞過URL跳轉(zhuǎn)限制的吧

Open-Redirect-payloads

利用URL特性繞過域名白名單檢測(cè)

談?wù)刾arse_url

open-redirect-bypass-story

Unvalidated_Redirects_and_Forwards_Cheat_Sheet

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末冗澈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子陋葡,更是在濱河造成了極大的恐慌亚亲,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異捌归,居然都是意外死亡肛响,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門惜索,熙熙樓的掌柜王于貴愁眉苦臉地迎上來特笋,“玉大人,你說我怎么就攤上這事巾兆×晕铮” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵角塑,是天一觀的道長蔫磨。 經(jīng)常有香客問我,道長吉拳,這世上最難降的妖魔是什么质帅? 我笑而不...
    開封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮留攒,結(jié)果婚禮上煤惩,老公的妹妹穿的比我還像新娘。我一直安慰自己炼邀,他們只是感情好魄揉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拭宁,像睡著了一般洛退。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上杰标,一...
    開封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天兵怯,我揣著相機(jī)與錄音,去河邊找鬼腔剂。 笑死媒区,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的掸犬。 我是一名探鬼主播袜漩,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼湾碎!你這毒婦竟也來了宙攻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤介褥,失蹤者是張志新(化名)和其女友劉穎座掘,沒想到半個(gè)月后递惋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雹顺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年丹墨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嬉愧。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贩挣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出没酣,到底是詐尸還是另有隱情王财,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布裕便,位于F島的核電站绒净,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏偿衰。R本人自食惡果不足惜挂疆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望下翎。 院中可真熱鬧缤言,春花似錦、人聲如沸视事。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俐东。三九已至跌穗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間虏辫,已是汗流浹背蚌吸。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留砌庄,地道東北人羹唠。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像鹤耍,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子验辞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 什么是重定向稿黄? 所謂重定向就是將網(wǎng)頁自動(dòng)轉(zhuǎn)向重定向,即:301永久性重定向和302臨時(shí)性重定向跌造。實(shí)施301后杆怕,新網(wǎng)...
    碼課sir閱讀 2,237評(píng)論 0 3
  • URL 重定向是一種當(dāng)實(shí)際資源族购,如單個(gè)頁面、表單或者整個(gè) Web 應(yīng)用被遷移到新的 URL 下的時(shí)候陵珍,保持(原有)...
    mysimplebook閱讀 1,175評(píng)論 0 0
  • 一寝杖、什么是301重定向 301重定向(或叫301跳轉(zhuǎn)、301轉(zhuǎn)向)是用戶或搜索引擎蜘蛛向網(wǎng)站服務(wù)器發(fā)出訪問請(qǐng)求時(shí)互纯,...
    懷戀青春閱讀 671評(píng)論 0 1
  • 最近大媽過了把癮瑟幕,跳了正宗廣場(chǎng)舞。大媽回中國多次在公園留潦、小區(qū)看到各式各樣的廣場(chǎng)舞只盹,大家排著方陣跳,每人臉上都洋溢著...
    瑜人碼頭閱讀 576評(píng)論 4 5
  • 黃鶯鳴翠笑春風(fēng)兔院, 紫燕歸檐送獵蟲殖卑。 山鵲登枝報(bào)喜訊, 烏鴉亂噪煩心情坊萝。 林清靜孵稽,花蕊紅, 香艷嬪紛豈敢同十偶。 亭榭吟...
    云逸1108閱讀 166評(píng)論 0 1