(三)Host頭攻擊


01 漏洞描述

為了方便獲取網站域名,開發人員一般依賴於請求包中的Host首部字段。例如,在php里用_SERVER["HTTP_HOST"]。但是這個Host字段值是不可信賴的(可通過HTTP代理工具篡改),如果應用程序沒有對Host字段值進行處理,就有可能造成惡意代碼的傳入。

02 漏洞知識拓展

Host首部字段是HTTP/1.1新增的,旨在告訴服務器,客戶端請求的主機名和端口號,主要用來實現虛擬主機技術。

運用虛擬主機技術,單個主機可以運行多個站點。以下圖為例,hacker和usagidesign兩個站點都運行在同一服務器A上,不管我們請求哪個域名,最終都會被解析成服務器A的IP地址,這個時候服務器就不知道該將請求交給哪個站點處理,因此需要Host字段指定請求的主機名。

我們訪問hacker域名,經DNS解析,變成了服務器A的IP,請求傳達到服務器A,A接收到請求后,發現請求報文中的Host字段值為hacker,進而將請求交給hacker站點處理。(這里又涉及到計算機網絡知識了,是不是覺得要學的真多?沒關系,我后面都會一一介紹的)

 

 

這個時候,問題就出現了。為了方便獲取網站域名,開發人員一般依賴於請求包中的Host首部字段。例如,在php里用_SERVER["HTTP_HOST"]。但是這個Host字段值是不可信賴的(可通過HTTP代理工具篡改),如果應用程序沒有對Host字段值進行處理,就有可能造成惡意代碼的傳入。

03 漏洞檢測

Host頭攻擊漏洞的檢測比較簡單,只需要抓包,修改Host字段值,提交,查看響應中是否包含修改后的Host字段值即可。

下面我分三個場景,介紹一下Host頭攻擊漏洞存在的表現。

跳轉

場景一:正常請求,響應302,Location首部字段指明跳轉的地址,其中Location字段值為Host字段指定的地址。

 

將請求包的Host字段值修改為www.baidu.com提交,響應包中的Location地址也被更改為www.baidu.com。

拼接

場景二:正常請求,正常響應,將Host字段值拼接到標簽屬性值中。

 

 

將請求包的Host字段值修改為www.baidu.com提交,發現服務器將www.baidu.com拼接到了script標簽的src屬性值中。

代碼注入

場景三:這其實也屬於拼接,只不過在場景二的基礎上寫入了惡意代碼。

 

 

利用Host字段寫入script標簽,彈出警告框。

04 漏洞修復

對Host字段進行檢測。

Nginx,修改ngnix.conf文件,在server中指定一個server_name名單,並添加檢測。

Apache,修改httpd.conf文件,指定ServerName,並開啟UseCanonicalName選項。

Tomcat,修改server.xml文件,配置Host的name屬性。



作者:安全小白團
鏈接:https://www.jianshu.com/p/690acbf9f321
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM