欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Web缓存投毒对多个HTTP头结合攻击实践

程序员文章站 2022-05-12 12:22:06
...

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
Web缓存投毒对多个HTTP头结合攻击实践

今天需要关注下面两个请求:
Web缓存投毒对多个HTTP头结合攻击实践

我们把这两个请求发送到bp的repeater模块进行观察。

直接把第二个对js的请求重发一次观察到返回结果如下,响应正常:
Web缓存投毒对多个HTTP头结合攻击实践

然后我们试着在请求包头中加入一个我们之前加入过的http头 X-Forwarded-Host ,值随便填一个域名,例如: listone.site (我的博客域名,好久没更新了,可以忽略),我们再次观察返回结果:
Web缓存投毒对多个HTTP头结合攻击实践

好像结果并没有什么改变,先把这个 X-Forwarded-Host 头删掉,添加一个 X-Forwarded-Scheme 头,值为 nohttps ,这时我们就可以观察到响应为一个302重定向,但是它指向的还是原来网站的js文件,好像还是没办法利用,别着急,下面我们再次添加上 X-Forwarded-Host 头再观察一下:

Web缓存投毒对多个HTTP头结合攻击实践

我们再次把 X-Forwarded-Host 头加上,值还为 listone.site 然后我们再次观察返回结果,会有不一样的惊喜哦:
Web缓存投毒对多个HTTP头结合攻击实践

我们可以看到,我们加上 X-Forwarded-Host 头后,返回结果会将我们重定向到 https://listone.site/resources/js/tracking.js 这个js文件上,如果这个请求被缓存,并且我们把js文件变成攻击脚本,那所有访问主页的用户都会被攻击,下面我们把漏洞利用服务器上的js脚本改成攻击脚本 alert(document.cookie) ,把X-Forwarded-Host 的值改成我们漏洞利用服务器的网址 ac831f411f6a57f3801b053a014b0078.web-security-academy.net ,然后观察返回结果:
Web缓存投毒对多个HTTP头结合攻击实践

返回结果就会把用户浏览器重定向到我们攻击脚本上。

Web缓存投毒对多个HTTP头结合攻击实践

然后我们去再次访问首页:

就可看到攻击效果了,浏览器会执行我们的攻击脚本,弹出一个框,显示脚本执行的内容了。
Web缓存投毒对多个HTTP头结合攻击实践

这个攻击需要多个http头进行配合才能进行有效的攻击,所以这个攻击成本比起之前的要高一些。