新型Web攻击技术——Web缓存欺骗

简介: 本文讲的是新型Web攻击技术——Web缓存欺骗,Web缓存欺骗是一种新的Web攻击向量,这种攻击技术的出现使得多种Web缓存技术和框架面临风险。
本文讲的是 新型Web攻击技术——Web缓存欺骗Web缓存欺骗是一种新的Web攻击向量,这种攻击技术的出现使得多种Web缓存技术和框架面临风险。

Web缓存和服务器反应的一点介绍

很多网站通常都倾向于使用web缓存功能(例如通过CDN,负载均衡器或简单的反向代理)。使用Web缓存功能的目的很简单:存储那些经常检索的文件,以减少Web服务器响应的延迟。

让我们来看一个网络缓存的例子。网站http://www.example.com通过配置了反向代理作为Web缓存。存储在服务器上并需要返回用户个人内容(如http://www.example.com/home.php)的动态网页必须要按不同的用户动态的创建,因为每个用户的数据是不同的。这种数据,或至少其个性化的这一部分,是不会被缓存的。

更合理及常见的缓存内容都是静态或公共文件:样式表(css),脚本(js),文本文件(txt),图像(png,bmp,gif) 等,在大多数人的正常意识中,这些文件通常不会包含用户的任何敏感信息。此外,在那些关于Web缓存配置的各种最佳实践的文章中,都会这样说:“建议缓存所有公开的静态文件并忽略其HTTP缓存头信息”。

2.网络缓存欺骗攻击依赖于浏览器和网络服务器的反应,与RPO攻击很相似,下面两篇文章对RPO攻击做了一些解释。

http://www.thespanner.co.uk/2014/03/21/rpo/
http://blog.innerht.ml/rpo-gadgets/

那么访问了像http://www.example.com/home.php/non-existent.css这样的网址时会发生什么?(译者注:也就是在http://www.example.com/home.php后面加上缓存的文件类型,文件名可以是不存在的)

浏览器会发出对该网址的GET请求。有趣的是服务器的反应 —— 服务器会如何解释请求的URL?根据服务器的Web缓存技术和配置(对于不同的服务器,URL的结构可能略有不同),服务器返回了http://www.example.com/home.php的内容。是的,浏览器地址栏的网址仍然为http://www.example.com/home.php/non-existent.css。HTTP标头信息与直接访问http://www.example.com/home.php的标头信息相同:缓存标头信息和内容类型相同(在这种情况下为text / html)。

如果我们访问http://www.example.com/home.php/non-existent.css,会发生什么情况,注意,在代理服务器上已经设置了对静态文件进行网络缓存。服务器会忽略此类文件的缓存头?让我们来分析一下这个过程:

1. 浏览器请求http://www.example.com/home.php/non-existent.css。
2. 服务器返回http://www.example.com/home.php的内容,很可能使用了标识不缓存此页面的HTTP缓存标头。
3. 通过代理服务器响应该请求。
4. 代理服务器发现该文件的扩展名是css。
5. 在缓存目录下,代理服务器会创建一个名为home.php的目录,并缓存冒名顶替的“CSS”文件(不存在的css文件)。

Oh!

新型Web攻击技术Web缓存欺骗

漏洞利用

如果攻击者诱骗已登录的用户访问http://www.example.com/home.php/logo.png,则该网页(包含用户个人信息的网页)将被缓存到缓存服务器上,因此这些被缓存的个人信息就可以公开访问。 如果响应的HTTP主体信息中包含(由于某种原因)了会话标识符,安全密保问题或CSRF令牌,则可能变得更糟。 在这种时候,所有的攻击者都会自己访问缓存页面然后公开这些被缓存的用户隐私数据。

新型Web攻击技术Web缓存欺骗

一件有趣儿的小事

通常,不需要进行身份验证即可访问网站缓存的公共静态文件。因此,缓存的文件是公共的且可访问的 ——不需要身份验证。

条件

因此,基本上,需要两个条件来确认网站是否存在此漏洞:

1. Web缓存功能是通过判断Web应用程序URL文件的扩展名来决定是否进行高速缓存,而且忽略了HTTP中的任何缓存头标识信息。
2. 访问http://www.example.com/home.php/non-existent.css等网页时,网络服务器将返回“home.php”的网址的内容。

缓解措施

1.  将缓存文件的缓存机制配置为仅当缓存文件的HTTP缓存标头允许时才进行缓存。这是解决这个问题的根本的解决办法。

2.  如果缓存组件提供Content-Type选项的话,请将缓存组件配置为按文件的内容类型进行缓存。

3.  配置Web服务器,以便对于像http://www.example.com/home.php/non-existent.css之类的页面,Web服务器不会返回带有 “home.php” 的URL的内容。相反的,服务器应该用404或302来响应这些URL的请求。

PayPal 网站中的Web缓存欺骗——漏洞披露

PayPal很容易受到网络缓存欺骗攻击。目前该漏洞现已修复,并已公开披露。

利用此漏洞可能泄漏的用户信息:

用户的名字和姓氏
账户余额
最后四个信用卡数字
交易数据
护照号码
电子邮件地址
家庭地址
电话号码
漏洞页面中包含的任何其他信息

一些漏洞页面的示例:

https://www.paypal.com/myaccount/home/attack.css
https://www.paypal.com/myaccount/settings/notifications/attack.css
https://history.paypal.com/cgi-bin/webscr/attack.css?cmd=_history-details

下面是可用于在PayPal网站上缓存页面的各种静态文件扩展名(超过40个):

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

缓存过期

我测试了缓存文件过期的时间。看起来,在被访问一次(第一次)后,文件被缓存大约5个小时。如果在该期间再次访问,则会延长过期时间。很明显,这么长的时间段足以让攻击者在缓存文件过期之前“捕获”到缓存文件,并且通过不断地监视此URL,获取他可以在创建缓存文件时要公开的用户隐私信息。

Demo视频

主页:https://www.paypal.com/myaccount/home

Paypal主页的Web缓存欺骗攻击Demo视频:https://youtu.be/pLte7SomUB8

个人设置页面:https://www.paypal.com/myaccount/settings

Paypal个人设置页面的Web缓存欺骗攻击Demo视频:https://youtu.be/e_jYtALsqFs

历史页面:https://history.paypal.com/cgi-bin/webscr?cmd=_history-details

Paypal历史页面的Web缓存欺骗攻击Demo视频:https://youtu.be/dgZVe7D8SRE

在我报告了此漏洞后,PayPal奖励了我3,000美刀,;)。

通过Web缓存欺骗技术劫持用户

我在其他应用程序中也发现了此漏洞,不过不幸的是,由于一些原因,我不能向公众公开(更糟的是,还有一些不错的Demo视频)。在这些应用程序中,可以完全控制应用程序的用户。这完全是有可能的,因为恢复用户密码的会话ID或安全密保问题的答案包含在了易受攻击的网页的HTML代码中。非常感谢Sagi Cohen的帮助。

IIS演示视频

在下面的视频中,网站托管在了IIS负载均衡器后面的两个Web服务器上,并安装了应用程序请求路由(ARR)。

成功登录的用户将被重定向到“welcome.php”的页面,其中包含其个人信息内容。负载均衡器配置为对所有的CSS文件进行缓存,并忽略这类文件的HTTP缓存头。

已登录的用户在访问http://www.sampleapp.com/welcome.php/stylesheet.css时,IIS负载均衡器会将“welcome.php”页面引用为一个目录,并在缓存目录中创建它,然后缓存“welcome.php”的内容,其中包含了用户的隐私内容信息,缓存的文件名为'stylesheet.css'。




原文发布时间为:2017年3月2日
本文作者:丝绸之路
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
15天前
|
前端开发 JavaScript 关系型数据库
从前端到后端:构建现代化Web应用的技术探索
在当今互联网时代,Web应用的开发已成为了各行各业不可或缺的一部分。从前端到后端,这篇文章将带你深入探索如何构建现代化的Web应用。我们将介绍多种技术,包括前端开发、后端开发以及各种编程语言(如Java、Python、C、PHP、Go)和数据库,帮助你了解如何利用这些技术构建出高效、安全和可扩展的Web应用。
|
26天前
|
缓存 NoSQL 关系型数据库
在Python Web开发过程中:数据库与缓存,MySQL和NoSQL数据库的主要差异是什么?
MySQL是关系型DB,依赖预定义的表格结构,适合结构化数据和复杂查询,但扩展性有限。NoSQL提供灵活的非结构化数据存储(如JSON),无统一查询语言,但能横向扩展,适用于大规模、高并发场景。选择取决于应用需求和扩展策略。
114 1
|
1月前
|
前端开发 数据库 UED
构建高性能Web应用的关键技术
本文将介绍构建高性能Web应用的关键技术,包括前端优化、后端优化、数据库优化等方面。通过深入讨论各项技术的原理和实践方法,帮助开发者们提升Web应用的响应速度和用户体验。
|
1月前
|
存储 前端开发 JavaScript
从前端到后端,探索现代Web开发技术
本文探索了现代Web开发技术的各个方面,包括前端和后端开发以及多种编程语言的应用。通过对JavaScript、Java、Python、C、PHP和Go等语言的介绍,深入探讨了前端和后端开发的基本原理和常用工具。同时,还涵盖了数据库技术在Web开发中的重要性和应用场景。无论你是初学者还是有经验的开发者,本文都能为你提供全面的视角和实用的知识,帮助你在Web开发领域取得更好的成果。
|
1天前
|
存储 缓存 运维
软件体系结构 - 缓存技术(5)Redis Cluster
【4月更文挑战第20天】软件体系结构 - 缓存技术(5)Redis Cluster
29 10
|
1天前
|
存储 缓存 NoSQL
软件体系结构 - 缓存技术
【4月更文挑战第20天】软件体系结构 - 缓存技术
28 7
|
2天前
|
SQL 存储 前端开发
< 今日份知识点:web常见的攻击方式(网络攻击)有哪些?如何预防?如何防御呢 ? >
网络安全威胁日益严重,2017年的永恒之蓝勒索病毒事件揭示了网络攻击的破坏力。为了防御Web攻击,了解攻击类型至关重要。Web攻击包括XSS、CSRF和SQL注入等,其中XSS分为存储型、反射型和DOM型,允许攻击者通过注入恶意代码窃取用户信息。防止XSS攻击的方法包括输入验证、内容转义和避免浏览器执行恶意代码。CSRF攻击则伪装成用户执行操作,防范措施包括同源策略和CSRF Token验证。SQL注入则通过恶意SQL语句获取数据,预防手段包括输入验证和使用预编译语句。面对网络威胁,加强安全意识和实施防御策略是必要的。
|
26天前
|
缓存 应用服务中间件 数据库
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(多级缓存设计分析)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(多级缓存设计分析)
29 1
|
1月前
|
存储 NoSQL Redis
陌陌技术分享:陌陌IM在后端KV缓存架构上的技术实践
在本文中,陌陌数据库负责人冀浩东将聚焦探讨陌陌的 KV 系统架构选型思路,深入解析如何进行此类系统的甄选决策,同时进一步分享陌陌团队在采用 OceanBase(OBKV)过程中所经历的探索与实践经验。
32 0
|
1月前
|
开发框架 Dart 前端开发
构建响应式Web界面:Flutter的跨界前端技术
【2月更文挑战第23天】随着移动互联网的飞速发展,响应式Web设计成为现代前端开发的重要趋势。在众多框架中,Google推出的Flutter以其高效的渲染性能、跨平台能力及丰富的组件生态,为前端开发者带来了新的选择。本文将深入探讨如何利用Flutter进行高效、美观的响应式界面构建,同时剖析其与传统前端技术的差异和优势。

热门文章

最新文章