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头进行配合才能进行有效的攻击,所以这个攻击成本比起之前的要高一些。

原创文章 9 获赞 2 访问量 222

猜你喜欢

转载自blog.csdn.net/cookieXSS/article/details/106161883