SRC常見WEB漏洞系列之HTTP-HOST頭攻擊


一、背景:

web程序需要知道網站的域名比較麻煩,需要使用HTTP的 host頭字段:

1 <?php _SERVER["HTTP_HOST"] ?>
1 @app.route("/index/",methods=["GET"])
2 def index:
3     domain = request.headers.get("Host")

等等......

而且有些會把這個值不做HTML編碼直接輸出到頁面:Joomla、Django、Gallery、others

二、常見的三種攻擊行為:

1、密碼重置:

郵件重置密碼時,劫持了郵件的內容,將host替換掉,然后用戶點擊發起鏈接的事后,身份認證信息(這里一般指的是網站傳給重置密碼者的隨機token)會自動傳到惡意的host上面,從而導致攻擊者可以劫持賬戶(已知身份認證信息)。

2、緩存污染:

Apache看所有host,nginx看最后一個host,Varnish看第一個。

所以可以通過在一個請求報文中加多個不同的host來污染緩存。

(現有架構下比較難攻擊)因為之前的緩存節點可能污染區別host頭,但現在的緩存一般都可以識別host頭。

1 '''
2 GET /index.html HTTP/1.1
3 Host: www.baidu.com
4 
5 GET /index.html HTTP/1.1
6 Host: www.google.com
7 '''

這兩種是絕對不會搞錯的

3、跳轉釣魚

web開發程序重定向時候:

例如未登錄訪問頁面會跳轉回登錄頁面,而開發人員是無法得知自己開發的站點上線后的域名的,所以一般都是host獲取。如果你重定向到登錄頁面所使用的HOST被攻擊者污染了,改成了他的,很相似的域名,也轉到仿造的一模一樣的頁面,用戶再次輸入密碼,就會被盜取。

三、防御:

1、配置web程序使用server_name而不是host頭

2、維護一個host白名單,難度較大。

3、UseCanonicalName選項開啟。


免責聲明!

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



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