Web缓存投毒对Cookie处理漏洞攻击实践
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
标头。这意味着有关使用哪种语言版本的信息仅包含在 unkeyed
的 Cookie
标头中。如果对该请求的响应被缓存,那么所有尝试访问此博客文章的后续用户也将获得汉语版本,无论他们实际选择哪种语言。
使用Web缓存中毒技术还可以利用缓存对Cookie的这种错误处理。但是实际上,与基于头的缓存中毒相比,这种攻击相对较少。当存在基于cookie的缓存中毒漏洞时,由于合法用户无意中毒了缓存,因此往往可以快速识别并解决它们。
攻击步骤
先对浏览器设置bp的代理,然后打开存在漏洞的网站,下面这个就是网站的首页:
然后我们可以在bp中看到我们请求网站的 http history
,下面框住的是我们对网站首页的请求:
下面这张图片是我第一次请求主页的时候发送的数据包,里面没有包含cookie字段:
然后我们刷新一下,在history里面可以看到我们第二次请求的数据包中多了一个cookie字段:
我们把这个数据包发送到repeater模块中重放,观察返回的数据:
可以看到返回的数据,它会把cookie字段中的fehost的值输出到网页中,那么我们就可以通过改变这个值来达到攻击的效果:
我们把cookie字段中的fehost的值从 prod-cache-01
改成 "-alert(1)-"
,之后就可以看到返回的页面中的那个fehost值被控制了:
这时我们去浏览器刷新页面就可以看到浏览器弹出来了一个 1
,攻击就实现了:
这种攻击是比较危险的攻击,可以攻击到所有访问该网站首页的用户。程序应该对用户的数据进行严格的检查,否则就很容易出现这样的安全问题。