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

Web缓存投毒对Cookie处理漏洞攻击实践

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

Web缓存投毒对Cookie处理漏洞攻击实践

Cookies通常用于在响应中动态生成内容。一个常见的示例可能是cookie,它指示用户的首选语言,然后将其用于加载页面的相应版本:

GET /blog/post.php?mobile=1 HTTP/1.1
Host: innocent-website.com
User-Agent: Mozilla/5.0 Firefox/57.0
Cookie: language=zh;
Connection: close

在此示例中,要求提供博客文章的汉语版本。假设缓存键仅包含请求行和 Host 标头。这意味着有关使用哪种语言版本的信息仅包含在 unkeyedCookie 标头中。如果对该请求的响应被缓存,那么所有尝试访问此博客文章的后续用户也将获得汉语版本,无论他们实际选择哪种语言。

使用Web缓存中毒技术还可以利用缓存对Cookie的这种错误处理。但是实际上,与基于头的缓存中毒相比,这种攻击相对较少。当存在基于cookie的缓存中毒漏洞时,由于合法用户无意中毒了缓存,因此往往可以快速识别并解决它们。

攻击步骤

先对浏览器设置bp的代理,然后打开存在漏洞的网站,下面这个就是网站的首页:
Web缓存投毒对Cookie处理漏洞攻击实践

然后我们可以在bp中看到我们请求网站的 http history ,下面框住的是我们对网站首页的请求:
Web缓存投毒对Cookie处理漏洞攻击实践

下面这张图片是我第一次请求主页的时候发送的数据包,里面没有包含cookie字段:
Web缓存投毒对Cookie处理漏洞攻击实践

然后我们刷新一下,在history里面可以看到我们第二次请求的数据包中多了一个cookie字段:
Web缓存投毒对Cookie处理漏洞攻击实践

我们把这个数据包发送到repeater模块中重放,观察返回的数据:
Web缓存投毒对Cookie处理漏洞攻击实践

可以看到返回的数据,它会把cookie字段中的fehost的值输出到网页中,那么我们就可以通过改变这个值来达到攻击的效果:
Web缓存投毒对Cookie处理漏洞攻击实践

我们把cookie字段中的fehost的值从 prod-cache-01 改成 "-alert(1)-" ,之后就可以看到返回的页面中的那个fehost值被控制了:
Web缓存投毒对Cookie处理漏洞攻击实践

这时我们去浏览器刷新页面就可以看到浏览器弹出来了一个 1 ,攻击就实现了:
Web缓存投毒对Cookie处理漏洞攻击实践

这种攻击是比较危险的攻击,可以攻击到所有访问该网站首页的用户。程序应该对用户的数据进行严格的检查,否则就很容易出现这样的安全问题。