渗透测试 | web缓存投毒
2023-12-6 15:50:39 Author: www.freebuf.com(查看原文) 阅读量:5 收藏

freeBuf

主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

前言

现在大多数网站为了提高响应速度,都会在各地节点设置一些缓存服务器,这些服务器会缓存一些后端服务器的内容,如果收到了相同的请求则直接响应给客户端缓存的内容,如我们最常见的CDN就属于这种格式,这种方式提高了响应的速度,可也带来新的一些新的攻击方式,今天就来认识一下web缓存投毒。

由于本人水平有限,文章中可能会出现一些错误,欢迎各位大佬指正,感激不尽。如果有什么好的想法也欢迎交流~~

什么是web缓存?

先来了解一下什么是web缓存,Web缓存就是服务器会先将之前没见过的请求对应的响应缓存下来,然后当有认为是相同请求的时候直接将缓存发给用户,这样可以减轻服务器的负荷。

这里面有几个需要关注的点

1)什么样的请求被认为是相同的请求?

这个主要是根据请求包的几个关键特征(参数)来确定的,如认为host头,请求行,Referer,query参数消息头完全一致,则认为是相同的请求,缓存服务器如果有这个请求的缓存则会直接发送给客户端。这几个关键特征也被叫做缓存键,其它的字段被称作非缓键了。

2)缓存的信息是否会因为请求的不同而改变?

实际情况也是会的,如果开发过程中取请求的某些内容动态的填充到页面中,那么我们也就有可能改变缓存的内容,如果后端取X-Forwarded-Host的值填充到页面中。

1701848414_6570255ee32905527e509.png!small?1701848415684

web缓存投毒的利用条件?

1)页面被缓存服务器缓存

2)页面存在某个内容是根据非缓存键的值来生成的。例如存在非缓键X-Forwarded-Host,而页面存在一个a标签,它的href是根据X-Forwarded-Host来生成的

#正常请求
GET / HTTP/1.1
Host: test.com
X-Forwarded-Host: www.demo.com

#正常响应
<a href='www.demo.com'></a>

#我们就可以利用web投毒构造XSS
GET / HTTP/1.1
Host: test.com
X-Forwarded-Host: #'></a><script>alert(1)</script> // 

#响应变成了
<a href='#'></a><script>alert(1)</script> // '></a>

web缓存投毒可以造成的危害?

看了上面的介绍,大家对web缓存投毒应该有了基本的了解,那么web缓存投毒可以造成什么危害呢?

web缓存投毒只要是将带有payload的缓存发送给其它请求该页面的人,那么它跟xss就很相似,可以通过payload获取客户端的敏感信息或者修改页面内容。但是从影响范围来看,一旦成功缓存被投毒的响应,会影响到大量的用户,比起以往某些只能针对某个用户发起的攻击,危害大很多很多。

工具

上面的说了web缓存中毒的一个重点就是要找到非缓键对页面的影响,这点可以通过burp的一个插件param miner来实现。

param miner可以帮助我们找到影响页面响应的非缓键。

如下图,选择一个请求,右键->Extensions->Param Miner->Guess Params->Guess headers

默认配置即可

1701848456_6570258800f62ec6141a0.png!small?1701848456913

实际利用

接下来通过portswigger上面的靶场来进行实际利用

靶场地址:https://portswigger.net/web-security/web-cache-poisoning

1701848507_657025bb362f21fbc7dfa.png!small?1701848508664

1.一个非缓键导致的web缓存中毒

打开这个实验,抓取首页的数据包,将X-Forwarded-Host的值改为baidu.com,看到影响也发生了改变

1701848513_657025c132a3d52fe3371.png!small?1701848514192

这一步也可以通过上面的工具来完成,如下,可以探测到X-Forwarded-Host是一个可以影响页面结果的非缓存键。

1701848518_657025c6aff042f01595d.png!small?1701848519448

在服务器上修改创建一个脚本,内容如下

1701848522_657025ca7c87bf6c6c972.png!small?1701848523256

然后将页面的内容修改如下,多点击几次,让缓存生效,如下图,x-cache显示hit表示缓存已经生效。

1701848528_657025d0cfac865d288c0.png!small?1701848530020

然后刷新页面,可以看到弹窗

1701848533_657025d50823e93679342.png!small?1701848534365

2.cookie内容造成的web缓存投毒

实验地址:


文章来源: https://www.freebuf.com/articles/web/385863.html
如有侵权请联系:admin#unsafe.sh