WEB安全-偽造X-Forwarded-For繞過服務(wù)器IP地址過濾

在正常的TCP/IP 通信中乏梁,是可以偽造數(shù)據(jù)包來源 IP 的贷帮,但這會(huì)讓發(fā)送出去的數(shù)據(jù)包返回到偽造的IP上,無法實(shí)現(xiàn)正常的通信犬缨。

實(shí)現(xiàn)TCP/IP層級(jí)別的偽造很難,因?yàn)楹茈y實(shí)現(xiàn)正常的TCP連接捧请;但是在應(yīng)用層協(xié)議HTTP上的實(shí)現(xiàn)較容易锋喜,通過偽造IP些己,能欺騙多數(shù)服務(wù)器應(yīng)用程序?qū)崿F(xiàn)通信豌鸡。對(duì)于繞過服務(wù)器的IP地址過濾或者偽造來源IP特別有用,導(dǎo)致的后果就是非授權(quán)IP能訪問服務(wù)器段标,甚至能鉆服務(wù)器的漏洞涯冠。

這其中的關(guān)鍵就是偽造X-Forwarded-For。

一逼庞、X-Forwarded-For介紹

我們知道 HTTP 連接基于 TCP 連接蛇更,HTTP 協(xié)議中沒有 IP 的概念,只能通過X-Forwarded-For來實(shí)現(xiàn)赛糟。

X-Forwarded-For位于HTTP協(xié)議的請(qǐng)求頭派任, 是一個(gè) HTTP 擴(kuò)展頭部。HTTP/1.1(RFC 2616)協(xié)議并沒有對(duì)它的定義璧南,它最開始是由 Squid 這個(gè)緩存代理軟件引入掌逛,用來表示 HTTP 請(qǐng)求端真實(shí) IP。如今它已經(jīng)成為事實(shí)上的標(biāo)準(zhǔn)司倚,被各大 HTTP 代理豆混、負(fù)載均衡等轉(zhuǎn)發(fā)服務(wù)廣泛使用,并被寫入RFC 7239(Forwarded HTTP Extension)標(biāo)準(zhǔn)之中动知。

X-Forwarded-For 請(qǐng)求頭格式非常簡(jiǎn)單:

X-Forwarded-For: client, proxy1, proxy2

可以看到皿伺,XFF 的內(nèi)容由「英文逗號(hào) + 空格」隔開的多個(gè)部分組成,最開始的是離服務(wù)端最遠(yuǎn)的設(shè)備 IP拍柒,然后是每一級(jí)代理設(shè)備的 IP心傀。

如果一個(gè) HTTP 請(qǐng)求到達(dá)服務(wù)器之前,經(jīng)過了三個(gè)代理 Proxy1拆讯、Proxy2脂男、Proxy3,IP 分別為 IP1种呐、IP2宰翅、IP3,用戶真實(shí) IP 為 IP0爽室,那么按照 XFF 標(biāo)準(zhǔn)汁讼,服務(wù)端最終會(huì)收到以下信息:

X-Forwarded-For: IP0, IP1, IP2

Proxy3 直連服務(wù)器,它會(huì)給 XFF 追加 IP2阔墩,表示它是在幫 Proxy2 轉(zhuǎn)發(fā)請(qǐng)求嘿架。列表中并沒有 IP3,IP3 可以在服務(wù)端通過 Remote Address 字段獲得啸箫。Remote Address來自 TCP 連接耸彪,表示與服務(wù)端建立 TCP 連接的設(shè)備 IP,在這個(gè)例子里就是 IP3忘苛。

Remote Address 無法偽造蝉娜,因?yàn)榻?TCP 連接需要三次握手唱较,如果偽造了源 IP,無法建立 TCP 連接召川,更不會(huì)有后面的 HTTP 請(qǐng)求南缓。不同語言獲取Remote Address的方式不一樣,例如Node.js 是req.connection.remoteAddress荧呐,原理都一樣汉形。

二、X-Forwarded-For偽造

這里我用node.js進(jìn)行測(cè)試

node.js路由級(jí)中間件:


中間件

模板引擎:


XLindex.jade

運(yùn)行node.js應(yīng)用后坛增,node.js監(jiān)聽3000端口获雕。用Firefox請(qǐng)求鏈接,結(jié)果如下(由于是本機(jī)瀏覽器訪問本機(jī)搭建的服務(wù)器收捣,地址為空届案。本機(jī)地址為127.0.0.1):

http://localhost:3000/

很明顯,X-Forwarded-For參數(shù)并不是瀏覽器當(dāng)前的地址罢艾,在這個(gè)例子中成功偽造了X-Forwarded-For信息楣颠。如果服務(wù)器以X-Forwarded-For中的地址(而不是remote address)作為用戶的IP地址實(shí)行IP地址過濾,很可能讓用戶通過偽造X-Forwarded-For獲取權(quán)限咐蚯,從而導(dǎo)致服務(wù)器應(yīng)用出現(xiàn)漏洞童漩。

三、結(jié)語

目前很多Web 應(yīng)用(例如獲取用戶所在地區(qū)春锋,基于 IP 做訪問頻率控制矫膨,禁止某些IP訪問等等),為了獲取用戶真正的 IP期奔,從 HTTP 請(qǐng)求頭中獲取 IP地址侧馅。這些情況下,必須確保獲取到的IP地址是真實(shí)可靠的呐萌。
經(jīng)過前面的分析和測(cè)試馁痴,
1.對(duì)于直接使用的 Web 應(yīng)用,必須使用從TCP連接中得到的 Remote Address肺孤,才是用戶真實(shí)的IP罗晕;
2.對(duì)于使用 nginx 反向代理服務(wù)器的Web應(yīng)用,nginx必須使用Remote Address正確配置set Headers赠堵,后端服務(wù)器則使用nginx傳過來的相應(yīng)IP地址作為用戶真實(shí)IP小渊;同時(shí),后端服務(wù)器應(yīng)使用X-Real-IP 或 X-Forwarded-For最后1段IP作為限制茫叭,允許自己的nginx服務(wù)器訪問酬屉,禁止其它IP訪問,禁止對(duì)外提供服務(wù)杂靶。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末梆惯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子吗垮,更是在濱河造成了極大的恐慌垛吗,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烁登,死亡現(xiàn)場(chǎng)離奇詭異怯屉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)饵沧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門锨络,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人狼牺,你說我怎么就攤上這事羡儿。” “怎么了是钥?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵掠归,是天一觀的道長。 經(jīng)常有香客問我悄泥,道長虏冻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任弹囚,我火速辦了婚禮厨相,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鸥鹉。我一直安慰自己蛮穿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布宋舷。 她就那樣靜靜地躺著绪撵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪祝蝠。 梳的紋絲不亂的頭發(fā)上音诈,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音绎狭,去河邊找鬼细溅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛儡嘶,可吹牛的內(nèi)容都是我干的喇聊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼蹦狂,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼誓篱!你這毒婦竟也來了朋贬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤窜骄,失蹤者是張志新(化名)和其女友劉穎锦募,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邻遏,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡糠亩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了准验。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赎线。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖糊饱,靈堂內(nèi)的尸體忽然破棺而出垂寥,到底是詐尸還是另有隱情,我是刑警寧澤济似,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布矫废,位于F島的核電站,受9級(jí)特大地震影響砰蠢,放射性物質(zhì)發(fā)生泄漏蓖扑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一台舱、第九天 我趴在偏房一處隱蔽的房頂上張望律杠。 院中可真熱鬧,春花似錦竞惋、人聲如沸柜去。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗓奢。三九已至,卻和暖如春浑厚,著一層夾襖步出監(jiān)牢的瞬間股耽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工钳幅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留物蝙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓敢艰,卻偏偏與公主長得像诬乞,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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