Web缓存投毒对多个HTTP头结合攻击实践
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头进行配合才能进行有效的攻击,所以这个攻击成本比起之前的要高一些。