超碰人人人人人,亚洲AV午夜福利精品一区二区,亚洲欧美综合区丁香五月1区,日韩欧美亚洲系列

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

一文講解HTTP報(bào)頭之host頭攻擊

admin
2025年5月13日 23:47 本文熱度 52

前言

今天來看一個(gè)比較有意思的漏洞-HTTP報(bào)頭攻擊,也就是host頭攻擊。在我們的印象中host頭是我們所要訪問的域名,默認(rèn)是不可控的,因?yàn)橐坏└淖兾覀兙筒荒苷_訪問目標(biāo)地址。其實(shí)不然,在某些情況下,改變了host頭依然可以訪問目標(biāo)。那么host頭在某些情況下也是我們可以控制的輸入,這也就為host頭攻擊提供了可能。

由于本人水平有限,文章中可能會(huì)出現(xiàn)一些錯(cuò)誤,歡迎各位大佬指正,感激不盡。如果有什么好的想法也歡迎交流~~

什么是 HTTP Host 頭?

重新再來認(rèn)識(shí)一下什么是host頭。

從 HTTP/1.1 開始,HTTP Host 頭是一個(gè)必需的請求頭,其指定了客戶端想要訪問的域名。例如我們訪問百度,發(fā)送的請求如下,會(huì)包含一個(gè)host頭。

HTTP頭的作用

當(dāng)我們在瀏覽器中輸入一個(gè)網(wǎng)址時(shí),首先會(huì)根據(jù)網(wǎng)址進(jìn)行DNS解析,找到對應(yīng)的IP地址,然后將請求發(fā)送到對應(yīng)的IP地址。

我理解的域名與host頭其實(shí)并不是一個(gè)概念,域名是我們在瀏覽器中輸入要訪問的地址,而host頭是數(shù)據(jù)包中的一個(gè)值。

那么什么地方會(huì)用到http頭呢?

1)虛擬主機(jī)根據(jù)HTTP頭訪問具體的業(yè)務(wù)。目前由于IPV4的地址已經(jīng)耗盡,所以越來越多的應(yīng)用對應(yīng)同一個(gè)公網(wǎng)IP,這種情況下,就需要根據(jù)HTTP頭來判斷具體需要訪問那個(gè)業(yè)務(wù)。

2)通過代理訪問后端組件。域名的IP解析到代理的公網(wǎng)IP,然后代理在根據(jù)HTTP頭來分配到具體的后端組件。我們經(jīng)常使用的CDN也可以認(rèn)為是這種情況。

HTTP頭是否可以修改

答案當(dāng)然是可以修改的,如下面在burp里面可以直接修改host頭,修改host頭以后還可以正常訪問應(yīng)用。

如下圖,修改以后還可以正常訪問

HTTP頭攻擊

HTTP Host 頭攻擊會(huì)利用以不安全的方式處理 Host 頭的漏洞網(wǎng)站。如果服務(wù)器隱式信任 Host 標(biāo)頭,且未能正確驗(yàn)證或轉(zhuǎn)義它,則攻擊者可能會(huì)使用此輸入來注入有害的有效負(fù)載,以操縱服務(wù)器端的行為。將有害負(fù)載直接注入到 Host 頭的攻擊通常稱為 "Host header injection"(主機(jī)頭注入攻擊)。

上面我們已經(jīng)了解到就算改變了HTTP報(bào)頭也是可以正常訪問到應(yīng)用的,那么如果后端使用HTTP報(bào)頭,并且沒有做過濾,那么就有可能造成危害。

HTTP報(bào)頭可能得攻擊場景

HTTP報(bào)頭攻擊可能存在以下的利用場景

1)重置密碼或者注冊用戶登場景發(fā)送重置鏈接取HTTP報(bào)頭的值

2)根據(jù)host頭限制一些資源的訪問

3)系統(tǒng)啟用了web緩存功能,可以利用web緩存投毒

4)根據(jù)host頭進(jìn)行路由(基于路由的SSRF)

在portswigger上有關(guān)于http host攻擊的專題,如下:

鏈接:https://portswigger.net/web-security/all-labs#http-request-smuggling

類似密碼重置場景攻擊

幾乎所有需要登錄的網(wǎng)站都實(shí)現(xiàn)了下面的場景。下面以密碼重置來簡要概述這個(gè)場景

  • 用戶輸入用戶名或電子郵件地址,然后提交密碼重置請求。

  • 網(wǎng)站檢查該用戶是否存在,然后生成一個(gè)臨時(shí)的、唯一的、高熵的 token 令牌,并在后端將該令牌與用戶的帳戶相關(guān)聯(lián)。

  • 網(wǎng)站向用戶發(fā)送一封包含重置密碼鏈接的電子郵件。用戶的 token 令牌作為 query 參數(shù)包含在相應(yīng)的 URL 中,如 https://normal-website.com/reset?token=0a1b2c3d4e5f6g7h8i9j。

  • 當(dāng)用戶訪問此 URL 時(shí),網(wǎng)站會(huì)檢查所提供的 token 令牌是否有效,并使用它來確定要重置的帳戶。如果一切正常,用戶就可以設(shè)置新密碼了。最后,token 令牌被銷毀。

與其他一些方法相比,這個(gè)過程足夠簡單并且相對安全。然而,它的安全性依賴于這樣一個(gè)前提:只有目標(biāo)用戶才能訪問他們的電子郵件收件箱,從而使用他們的 token 令牌。而密碼重置中毒就是一種竊取此 token 令牌以更改其他用戶密碼的方法

這里有一個(gè)問題,如果我們拿到這個(gè)鏈接就可以修改用戶的密碼,而token是動(dòng)態(tài)生成的,我們一般是無法獲取的。如果這個(gè)鏈接是根據(jù)host生成的,則給我們拿到這個(gè)鏈接提供了一種可能。如下:

如何構(gòu)造一個(gè)密碼重置中毒攻擊

如果發(fā)送給用戶的 URL 是基于可控制的輸入(例如 Host 頭)動(dòng)態(tài)生成的,則可以構(gòu)造如下所示的密碼重置中毒攻擊:

  1. 攻擊者根據(jù)需要獲取受害者的電子郵件地址或用戶名,并代表受害者提交密碼重置請求,但是這個(gè)請求被修改了 Host 頭,以指向他們控制的域。我們假設(shè)使用的是 evil-user.net 。

  2. 受害者收到了網(wǎng)站發(fā)送的真實(shí)的密碼重置電子郵件,其中包含一個(gè)重置密碼的鏈接,以及與他們的帳戶相關(guān)聯(lián)的 token 令牌。但是,URL 中的域名指向了攻擊者的服務(wù)器:https://evil-user.net/reset?token=0a1b2c3d4e5f6g7h8i9j 。

  3. 如果受害者點(diǎn)擊了此鏈接,則密碼重置的 token 令牌將被傳遞到攻擊者的服務(wù)器。

  4. 攻擊者現(xiàn)在可以訪問網(wǎng)站的真實(shí) URL ,并使用盜取的受害者的 token 令牌,將用戶的密碼重置為自己的密碼,然后就可以登錄到用戶的帳戶了。

在真正的攻擊中,攻擊者可能會(huì)偽造一個(gè)假的警告通知來提高受害者點(diǎn)擊鏈接的概率。

即使不能控制密碼重置的鏈接,有時(shí)也可以使用 Host 頭將 HTML 注入到敏感的電子郵件中。請注意,電子郵件客戶端通常不執(zhí)行 JavaScript ,但其他 HTML 注入技術(shù)如懸掛標(biāo)記攻擊可能仍然適用。

PortSwigger靶場測試

在這里添加用戶名,然后攔截?cái)?shù)據(jù)包,將數(shù)據(jù)包改成你的exploit server。

然后當(dāng)用戶訪問了這個(gè)鏈接以后,你就可以去查看你的exploit server的log日志,可以發(fā)現(xiàn)重啟密碼的鏈接

在瀏覽器中用原來的域名訪問這個(gè)重置密碼鏈接

跳出重置密碼的頁面

根據(jù)host限制資源的訪問

有時(shí)處于安全的考慮,會(huì)把某些功能限制成只能特定的IP或者h(yuǎn)ost頭訪問,那么通過修改host頭就可能繞過這個(gè)限制。

portswigger靶場:https://portswigger.net/web-security/host-header/exploiting/lab-host-header-authentication-bypass

訪問robots.txt發(fā)現(xiàn)存在admin頁面,直接訪問顯示拒絕

將host頭改成localhost可能正常訪問

在實(shí)際的利用中,往往需要fuzz host頭的內(nèi)容。

web緩存投毒

當(dāng)存在Host頭攻擊的web站點(diǎn)不存在密碼重置的功能等場景時(shí),由于不可能驅(qū)使用戶去抓包修改Host頭,該漏洞就顯得沒有什么作用。

但是,如果目標(biāo)站點(diǎn)使用Web緩存,則可以通過緩存投毒給其他用戶提供帶有病毒的緩存響應(yīng)。此時(shí)的Host頭攻擊漏洞轉(zhuǎn)變?yōu)轭愃芚SS存儲(chǔ)型類的漏洞。要構(gòu)造Web緩存投毒攻擊:

  • 需要尋找映射到其他用戶請求的緩存鍵;

  • 下一步則是緩存此惡意響應(yīng);

  • 然后,此惡意緩存將提供給嘗試訪問受影響頁面的所有用戶。

下面結(jié)合portswigger上的實(shí)驗(yàn)來看一下

鏈接:https://portswigger.net/web-security/host-header/exploiting/lab-host-header-web-cache-poisoning-via-ambiguous-requests

打開這個(gè)實(shí)驗(yàn),可以看到,添加一個(gè)host頭,會(huì)返回在響應(yīng)中,而且啟用了web緩存功能,那么我們可以將host頭替換成我們服務(wù)上同名的文件:/resources/js/tracking.js

如下

多請求幾次,使此請求被緩存下來

此時(shí),其它用戶再去訪問該鏈接,就會(huì)訪問到這個(gè)已經(jīng)緩存的頁面,也就是可以造成類似于xss的漏洞。

基于host頭進(jìn)行路由

有的應(yīng)用會(huì)根據(jù)host頭進(jìn)行路由,那么在這種情況下,我們可以通過改變host頭來訪問內(nèi)網(wǎng)的應(yīng)用,也就是常說的SSRF。

這可能需要知道內(nèi)部系統(tǒng)的IP地址(私有地址),一般可以通過信息收集或者Fuzz來判斷有效的私有IP地址(如枚舉192.168.1.1/16)

接下來還是看一下portswigger上面的實(shí)驗(yàn)

鏈接:https://portswigger.net/web-security/host-header/exploiting/lab-host-header-routing-based-ssrf

該實(shí)驗(yàn)已知內(nèi)網(wǎng)中存在admin頁面并且通過host頭進(jìn)行路由

直接訪問顯示404

爆破內(nèi)網(wǎng)IP嘗試訪問

成功訪問到內(nèi)網(wǎng)應(yīng)用

?

在portswigger還有一個(gè)實(shí)驗(yàn),校驗(yàn)了host頭的值,只要修改host的值就會(huì)拒絕服務(wù),此時(shí)可以將host頭放到path中,如下面這種

GET http://evil.web-security-academy.net/ HTTP/1.1

HTTP host頭繞過

有時(shí)我們發(fā)現(xiàn)修改host頭時(shí)會(huì)受到限制,可以通過下面的方式進(jìn)行繞過

1)檢查限制是否有缺陷,例如沒有限制端口號(hào),只會(huì)驗(yàn)證是否以允許的子域結(jié)尾等等

2)注入多個(gè)host頭

如果服務(wù)器端會(huì)將第二個(gè)Host頭優(yōu)先于第一個(gè)Host頭,就會(huì)覆蓋掉它的值,然后中轉(zhuǎn)組件會(huì)因?yàn)榈谝粋€(gè)Host頭指定了正確的目標(biāo)而照常轉(zhuǎn)發(fā)這個(gè)請求包,這樣就能保證它可以順利到達(dá)服務(wù)器。

GET /example HTTP/1.1Host: vulnerable.comHost: evil.com

3)提供絕對URL

GET https://evil.com/ HTTP/1.1Host: vulnerable.com

4)注入覆蓋Host頭的字段

與Host頭功能相近的字段,如X-Forwarded-Host、X-Forwarded-For等,這些有時(shí)候是默認(rèn)開啟的。

GET /example HTTP/1.1Host: vulnerable-website.comX-Forwarded-Host: attack-stuff

諸如此類,還有其他的字段:

  • X-HostX-Forwarded-ServerX-HTTP-Host-OverrideForwarded

5)添加縮進(jìn)或者換行

當(dāng)一些站點(diǎn)block帶有多個(gè)Host頭的請求時(shí),可以通過添加縮進(jìn)字符的HTTP頭來繞過

GET /example HTTP/1.1 Host: attack-stuffHost: vulnerable-website.comHTTP Host頭攻擊防護(hù)

最簡單的方法是避免在服務(wù)器端代碼中使用前端獲取的host頭。

其他方法包括:

正確配置絕對域名URL

當(dāng)必須使用絕對域名URL時(shí),應(yīng)在配置文件中手動(dòng)指定當(dāng)前域的URL,并引用配置的值,而不是從HTTP的Host頭中獲取。這種方法可防止密碼重置的緩存投毒。 白名單校驗(yàn)Host頭的域

如果必須使用Host頭,需要正確校驗(yàn)它的合法性。這包括允許的域,并使用白名單校驗(yàn)它,以及拒絕或重定向?qū)o法識(shí)別的主機(jī)請求。這包括但不僅限于單個(gè)web應(yīng)用程序、負(fù)載均衡以及反向代理設(shè)備上。

不支持主機(jī)頭覆蓋

確保不適用與Host頭功能相近的字段,如X-Forwarded-Host、X-Forwarded-For等,這些有時(shí)候是默認(rèn)開啟的。


總結(jié)

上面簡要介紹了一下HTTP報(bào)頭攻擊以及實(shí)際可能存在的場景,在實(shí)際的測試中遇到的比較少,常規(guī)漏洞已經(jīng)不多見的情況下,可以多測一下這方面的漏洞。


參考鏈接

https://blog.csdn.net/angry_program/article/details/109034421

https://www.freebuf.com/articles/web/375432.html


閱讀原文:原文鏈接


該文章在 2025/5/14 9:08:12 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved