Web緩存投毒對多個HTTP頭結合攻擊實踐
某些網站容易受到簡單的Web緩存中毒攻擊。但是,有一些其他網站需要攻擊者使用更復雜的攻擊,並且僅在攻擊者能夠操縱多個 unkeyed
輸入的請求時才變得脆弱。
例如,假設一個網站要求使用HTTPS進行安全通信。爲了強制執行此操作,如果收到使用其他協議的請求,則網站會動態生成一個使用HTTPS的自身重定向:
GET /random HTTP/1.1
Host: innocent-site.com
X-Forwarded-Proto: http
HTTP/1.1 301 moved permanently
Location: https://innocent-site.com/random
就其本身而言,這種行爲並不一定很容易受到攻擊。但是,通過將此與我們先前瞭解的有關動態生成的URL中的漏洞的知識相結合,攻擊者可能利用此行爲來生成可緩存的響應,該響應將用戶重定向到惡意URL。
攻擊步驟
第一步還是老樣子,打開bp,設置好瀏覽器代理,訪問首頁,然後看bp的 http history
:
今天需要關注下面兩個請求:
我們把這兩個請求發送到bp的repeater模塊進行觀察。
直接把第二個對js的請求重發一次觀察到返回結果如下,響應正常:
然後我們試着在請求包頭中加入一個我們之前加入過的http頭 X-Forwarded-Host
,值隨便填一個域名,例如: listone.site
(我的博客域名,好久沒更新了,可以忽略),我們再次觀察返回結果:
好像結果並沒有什麼改變,先把這個 X-Forwarded-Host
頭刪掉,添加一個 X-Forwarded-Scheme
頭,值爲 nohttps
,這時我們就可以觀察到響應爲一個302重定向,但是它指向的還是原來網站的js文件,好像還是沒辦法利用,彆着急,下面我們再次添加上 X-Forwarded-Host
頭再觀察一下:
我們再次把 X-Forwarded-Host
頭加上,值還爲 listone.site
然後我們再次觀察返回結果,會有不一樣的驚喜哦:
我們可以看到,我們加上 X-Forwarded-Host
頭後,返回結果會將我們重定向到 https://listone.site/resources/js/tracking.js
這個js文件上,如果這個請求被緩存,並且我們把js文件變成攻擊腳本,那所有訪問主頁的用戶都會被攻擊,下面我們把漏洞利用服務器上的js腳本改成攻擊腳本 alert(document.cookie)
,把X-Forwarded-Host
的值改成我們漏洞利用服務器的網址 ac831f411f6a57f3801b053a014b0078.web-security-academy.net
,然後觀察返回結果:
返回結果就會把用戶瀏覽器重定向到我們攻擊腳本上。
然後我們去再次訪問首頁:
就可看到攻擊效果了,瀏覽器會執行我們的攻擊腳本,彈出一個框,顯示腳本執行的內容了。
這個攻擊需要多個http頭進行配合才能進行有效的攻擊,所以這個攻擊成本比起之前的要高一些。