【网络安全】Web缓存欺骗攻击原理及攻防实战

简介: 【网络安全】Web缓存欺骗攻击原理及攻防实战

Web缓存欺骗是一种新的攻击方式,危害范围可扩大至各种技术及框架。

本文仅分享Web缓存攻击知识,不承担任何由于传播、利用本文所发布内容而造成的任何后果及法律责任。


前言

缓存的意义在于实现资源的快速访问,在Web程序中就使用了网络缓存功能,如CDN、负载均衡器及反向代理。

为了实现快速访问,同时保证数据安全,可将一些静态的、公共的、不敏感的文件缓存在服务器,而一些动态的、敏感的文件则不应缓存。

攻击前提及原理

攻击前提:代理服务器可以进行静态文件的缓存,但对文件的缓存头部置之不理,且服务器能返回错误请求中有效路径的文件内容。

举个例子:当请求http://www.ice.com/ice.php/AAAA.txt时,由于AAA.txt并不存在,服务器提取http://www.ice.com/ice.php/的内容,并将其作为HTTP缓存发送给代理服务器,在这个缓存的HTTP头部中,可能指示代理服务器不可缓存/AAAA.txt页面。

但由于代理服务器对文件的缓存头部置之不理,而且通过文件拓展名判断出AAA.txt文件为静态文件,导致代理服务器缓存该页面,于是,代理服务器将创建一个名为ice.php的目录(如果没有),并在该目录下缓存AAA.txt,其内容为HTTP缓存。

也就是说,我们访问http://www.ice.com/ice.php/返回的HTTP头部与访问http://www.ice.com/ice.php/AAAA.txt返回的HTTP头部是相同的,具有相同的缓存头部及内容类型。

总结来说,即使服务器返回了不可缓存该页面的头部指令,但代理服务器仍然可以绕过该指令,同时如果该不存在的文件的拓展名被检测为静态文件,就将该文件缓存到合适的目录下。这将导致客户端在请求时错误地获取了伪装的文件,同时该文件无法更新。

利用此漏洞,即利用服务器对于请求 URL 的解析方式,从而绕过了文件的实际存在性检查,就能够在访问一个不存在的文件时得到有效路径的内容,而这就是Web缓存攻击。

实例一、ChatGPT帐户接管漏洞

已知:ChatGPT用户的账户信息页面为https://chat.openai.com/api/auth/session

引导已登录的用户ice请求https://chat.openai.com/api/auth/session/victim.css,此时回显在ice眼前的仍然是自己的账户信息页面,但其账户信息已被服务器存储在https://chat.openai.com/api/auth/session/victim.css中。

由于/victim.css被服务器缓存,谁都可以轻松查看ice的会话数据,而不会受到任何阻碍或困难,任何人访问https://chat.openai.com/api/auth/session/victim.css即可得到ice的账户信息:

可以看到上图中含有令牌等敏感数据,通过利用令牌等即可实现账户接管。

实例二、Paypal缓存攻击

经测试,可缓存在 PayPal 上的各种静态文件扩展名有:

aif、aiff、au、avi、bin、bmp、cab、carb、cct、cdf、class、css、doc、dcr、dtd、gcf、gff、gif、grv、hdml、hqx、ico、ini、jpeg、jpg、 js、mov、mp3、nc、pct、ppc、pws、swa、swf、txt、vbs、w32、wav、wbmp、wml、wmlc、wmls、wmlsc、xsd、zip

因此我们可以构造形如:https://www.paypal.com/myaccount/home/ice.css的链接,从而实现缓存攻击。

同时,经测试可知缓存文件过期所需的时间为5小时,再次访问则会增加延长时间,故信息捕获的难度不大。

实战案例:

当一个已登录的用户Omer访问https://www.paypal.com/myaccount/home/malicious3.css时,回显的内容其实是https://www.paypal.com/myaccount/home/(即个人主页面):

此时个人信息已被缓存至/malicious3.css。

用户ice访问https://www.paypal.com/myaccount/home/malicious3.css即可得到Omer的隐私信息:

解决措施如下:

1)从问题根源解决:配置缓存机制,只有当文件的 HTTP 缓存头允许缓存时才进行缓存。

2)如果缓存组件提供了选项,则配置它按其内容类型缓存文件。

3)配置Web服务器,使其对于诸如http://www.ice.com/ice.php/AAA.txt这样的页面,不返回具有该URL的ice.php的内容。相反,应响应404或302。

实例三、IIS攻击

设有一个网站托管在两台Web服务器上,这两台服务器位于一个安装了 IIS 负载均衡器和 Application Request Routing (ARR) 的中间。成功登录后,用户将被重定向到包含其个人内容的"welcome.php"页面。负载均衡器被配置为缓存所有CSS文件,并忽略它们的缓存头部。

举例如下:

有一个经过身份验证的用户admin:

当admin访问http://www.sampleapp.com/welcome.php/stylesheet.css时,回显仍为welcome.php所示界面:

此时IIS负载均衡器已将"welcome.php"页面视为一个目录,在缓存目录中创建该目录,并缓存了包含用户私人内容的 “stylsheet.css”:

此时任何一人访问http://www.sampleapp.com/welcome.php/stylesheet.css都将导致admin的信息被泄露:

解决措施如下:

1)配置 IIS 负载均衡器,使其正确处理非存在的资源请求,并返回适当的错误响应。

2)检查和更新负载均衡器的缓存配置,确保只缓存适当的静态资源,而不是包含用户私人内容的敏感文件。

3)定期审查和更新服务器和负载均衡器的安全配置,以确保应用程序的安全性。


相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
2月前
计算机网络:思科实验【1-访问WEB服务器】
计算机网络:思科实验【1-访问WEB服务器】
计算机网络:思科实验【1-访问WEB服务器】
|
18天前
|
机器学习/深度学习 PyTorch 算法框架/工具
【PyTorch实战演练】AlexNet网络模型构建并使用Cifar10数据集进行批量训练(附代码)
【PyTorch实战演练】AlexNet网络模型构建并使用Cifar10数据集进行批量训练(附代码)
36 0
|
18天前
|
机器学习/深度学习 PyTorch 算法框架/工具
【PyTorch实战演练】使用Cifar10数据集训练LeNet5网络并实现图像分类(附代码)
【PyTorch实战演练】使用Cifar10数据集训练LeNet5网络并实现图像分类(附代码)
36 0
|
18天前
|
机器学习/深度学习 算法 PyTorch
【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别
【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别
35 2
|
18天前
|
机器学习/深度学习 自然语言处理 PyTorch
【PyTorch实战演练】基于全连接网络构建RNN并生成人名
【PyTorch实战演练】基于全连接网络构建RNN并生成人名
22 0
|
1月前
|
SQL 监控 安全
网络安全产品之认识WEB应用防火墙
随着B/S架构的广泛应用,Web应用的功能越来越丰富,蕴含着越来越有价值的信息,应用程序漏洞被恶意利用的可能性越来越大,因此成为了黑客主要的攻击目标。传统防火墙无法解析HTTP应用层的细节,对规则的过滤过于死板,无法为Web应用提供足够的防护。为了解决上述问题,WAF应运而生。它通过执行一系列针对HTTP、HTTPS的安全策略,专门对Web应用提供保护。
30 1
|
1月前
|
人工智能 监控 安全
网络安全知识入门:Web应用防火墙是什么?
网络安全知识入门:Web应用防火墙是什么?
22 1
|
1月前
|
运维 数据库
Powershell实战:测试网络请求两个命令介绍
【2月更文挑战第11篇】 Test-Connection 命令将 Internet 控制消息协议 (ICMP) 回显请求数据包或 ping 发送给一台或多台远程计算机并返回回显响应回复。 我们可以使用该命令确定是否可通过 IP 网络ping通特定的计算机。
|
1月前
|
JSON Go API
Go语言网络编程:HTTP客户端开发实战
【2月更文挑战第12天】本文将深入探讨使用Go语言开发HTTP客户端的技术细节,包括发送GET和POST请求、处理响应、错误处理、设置请求头、使用Cookie等方面。通过实例演示和代码解析,帮助读者掌握构建高效、可靠的HTTP客户端的关键技术。
|
2月前
|
机器学习/深度学习 Go Python
【轻量化网络】实战:更改SqueezeNet网络&MobileNet网络& ShuffleNet网络输出替换yolo的backbone部分
【轻量化网络】实战:更改SqueezeNet网络&MobileNet网络& ShuffleNet网络输出替换yolo的backbone部分
40 0