if we know some user's email, the we will can reset the user's email by host header attack. 若是咱們知道了某個註冊用戶的郵箱,那麼咱們就可以經過頭注入的方式重置任意用戶的密碼。因此這個漏洞的攻擊前提是在於用戶必需要綁定郵箱,且咱們知道這個用戶的郵箱。服務器
正常的找回密碼發送的請求以下:spa
經過這個圖片能夠看出來,因爲咱們是在本地搭建的,全部請求頭是localhost。因此咱們收到的重置密碼的連接以下:3d
其中這個重置密碼鏈接的Host頭就是來自於咱們上面找回密碼發送請求時的Host頭。若是咱們修改找回密碼時的請求頭爲咱們的惡意Host,那麼重置密碼的連接也將發生改變。code
因此若是一個攻擊這修改了請求頭爲本身的DNS服務器,而且知道某位用戶的郵箱,就能夠發送一份僞造的重置密碼的郵件到用戶的郵箱。當用戶點擊以後,攻擊者就能夠收到這個請求包括其中的Token,攻擊者將其替換爲真實的請求頭,那麼就能夠修改掉用戶的密碼了。blog
操做步驟以下:圖片
修改重置密碼請求的Host頭email
用戶收到的重置密碼郵箱以下:bfc
用戶點擊重置密碼的鏈接請求
攻擊者經過本身的DNS服務器收到以下的信息。密碼
攻擊者將其替換爲真實的請求頭,讓訪問這個鏈接就能夠修改用戶的密碼了。
形成這個漏洞的緣由是在於,在進行郵件請求地址拼接的時候,使用是經過$_M
取的host都信息,而$_M
是經過$_SERVER['HTTP_HOST']
直接獲取的HOST頭信息,沒有進行任何的校驗,因此致使攻擊者可以可以修改Host頭信息,從而進行重置密碼的連接的修改。