【漏洞學習】HOST 頭攻擊漏洞



日期:2018-03-06 14:32:51
作者:Bay0net


0x01、 前言

  在一般情況下,幾個網站可能會放在同一個服務器上,或者幾個 web 系統共享一個服務器,host 頭來指定應該由哪個網站或者 web 系統來處理用戶的請求。

0x02、密碼重置漏洞

#!php
$user -> hash = random::hash() ;

$message -> confirm_url = url::abs_site("password/do_reset?key=$user->hash") ;

漏洞存在於 url::abs_site

這一部分使用的Host header是來自用戶重置密碼的請求,攻擊者可以這么來攻擊

  1. 攻擊者向服務器發送一個帶有 attacker-controlled 的 host 頭類型的密碼重置
  2. 服務器在生成密碼重置的 key 時,會把攻擊者操控的 host 也放到密碼重置鏈接中。
  3. 用戶如果點擊了密碼重置鏈接,那么攻擊者就能得到密碼重置的 key,從而重置用戶密碼。

0x03、緩存污染

Varnish 是通過最先到達的請求的host header來辨別host的,
Apache 是看所有請求的host,
Nginx 只是看最后一個請求的host。

攻擊方法

GET / HTTP/1.1
Host: example.com
Host: alert(xss)

可以用上面這種方法,來欺騙 Varnish ,達到污染的目的。

攻擊者提交上面的請求之后,緩存服務器會把數據放到緩存中,有人再訪問 example.com 時,服務器會把 alert(xss) 也返回給用戶。

0x04、修復方案

在服務器端判斷 host 的值,設置白名單,不在白名單內的直接403


免責聲明!

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



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