WebSocket安全漏洞-概念梳理

admin 2022年12月10日15:31:32评论49 views字数 2506阅读8分21秒阅读模式

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



什么是网络套接字(WebSocket)?

WebSocket广泛用于现代Web应用程序,他们通过HTTP启动,并通过双向异步通信提供长期连接。

WebSocket用于各种目的,包括执行用户操作和传输敏感信息,几乎所有由常规HTTP引起的Web安全漏洞也可能与WebSocket通信有关。

WebSocket是通过HTTP发起的双向全双工通信协议,通常用于现代Web应用程序中,用于流式传输数据和其他异步流量。

WebSocket安全漏洞-概念梳理



HTTPWebSocket有什么区别?

Web浏览器和网站之间的大多数通信都使用HTTP,客户端发送请求,服务器返回响应。

通常,响应会立即发生,并且事务完成。即使网络连接保持打开状态,这也将用于请求和响应的单独事务。

一些现代网站使用WebSocketWebSocket连接是通过HTTP发起的,并且通常是长期存在的。消息可以随时向任一方向发送,并且本质上不是事务性的。在客户端或服务器准备好发送消息之前,连接通常会保持打开和空闲状态。

WebSocket在需要低延迟或服务器发起消息的情况下特别有用,例如财务数据的实时馈送。



WebSocket连接时如何建立的?

WebSocket连接通常使用客户端JavaScript创建,如下所示:

WebSocket安全漏洞-概念梳理

ws协议使用未加密的连接,wss协议通过加密的TLS连接建立WebSocket

为了建立连接,浏览器和服务器通过HTTP执行WebSocket握手。浏览器发出WebSocket握手请求,如下所示:

WebSocket安全漏洞-概念梳理

如果服务器接受连接,它会返回一个WebSocket握手响应,如下所示:

WebSocket安全漏洞-概念梳理

此时,网络连接保持打开状态,可用于向任一方向发送WebSocket消息。

WebSocket握手消息的几个特性值得注意:

●请求和响应中ConnectionUpgrade标头表明这是一个WebSocket握手。

Sec-WebSocket-Version请求标头指定客户端希望使用的WebSocket协议版本,通常是13

Sec-WebSocket-Key请求头包含一个Base64编码的随机值,应该在每个握手请求中随机生成。

Sec-WebSocket-Accept响应标头包含Sec-WebSocket-Key请求标头中提交值的哈希,并与协议规范中定义的特定字符串连接,这样做是为了防止错误配置的服务器或缓存代理导致的误导性响应。



WebSocket消息是什么样的?

一旦建立了WebSocket连接,客户端或服务器就可以在任一方向上异步发送消息。

可以使用客户端JavaScript从浏览器发送一条简单的消息,如下所示:

WebSocket安全漏洞-概念梳理

原则上,WebSocket消息可以包含任何内容或数据格式,在现代程序中,通常使用JSONWebSocket消息中发送结构化数据。



WebSocket安全漏洞

原则上,几乎所有与WebSocket相关的Web安全漏洞都可能出现:

●传输到服务器的用户提供的输入可能会以不安全的方式进行处理,从而导致SQL注入或XML外部实体注入等漏洞。

●通过WebSocket达到的一些盲漏洞可能只能使用带外(OAST)技术检测到。

●如果攻击者控制的数据通过WebSocket传输给其他应用程序用户,则可能导致XSS或其他客户端漏洞。



如何保护WebSocket连接?

为最大程度地降低WebSocket引起的安全漏洞风险,请使用以下指南:

●使用wss://协议(基于TLSWebSocket)。

●对WebSocket端点的URL进行硬编码,当然不会将用户可控制的数据合并到该URL中。

●保护WebSocket握手消息免受CSRF攻击,避免跨站WebSocket劫持漏洞。

●将通过WebSocket接收的数据在两个方向上都视为不受信任,在服务器端和客户端安全地处理数据,以防止基于输入的漏洞,例如SQL注入和跨站脚本攻击。



操作WebSocket消息以利用漏洞

大多数影响WebSocket的基于输入的漏洞都可以通过篡改WebSocket消息的内容来发现和利用。

例如,假设一个聊天应用程序使用WebSocket在浏览器和服务器之间发送聊天消息。当用户键入聊天消息时,会向服务器发送如下WebSocket消息:

WebSocket安全漏洞-概念梳理

消息的内容被传输(再次通过WebSocket)给拎一个聊天用户,并在用户的浏览器中呈现如下:

WebSocket安全漏洞-概念梳理

在这种情况下,如果没有其他输入处理或防御在起作用,攻击者可以通过提交以下WebSocket消息来执行Payload验证XSS攻击:

WebSocket安全漏洞-概念梳理


场景试验-操纵WebSocket消息以利用漏洞:

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

场景说明:

这个试验场景的在线商店通过WebSocket实现实时的聊天功能,提交的聊天消息可以实时查看。

试验目的:

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

攻击过程:

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

WebSocket安全漏洞-概念梳理

打开Burp Suite后在"Proxy""WebSockets"中可以看到历史消息

WebSocket安全漏洞-概念梳理

用聊天工具发送包含"<"的语句

WebSocket安全漏洞-概念梳理


Burp Suite中可以看到,尖括号在被发送前就已经被HTML编码了

WebSocket安全漏洞-概念梳理

Burp Suite设置为拦截模式,重新发送一条聊天语句,并把拦截下来的语句修改成如下注入语句:

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

WebSocket安全漏洞-概念梳理


可以看到,浏览器会出现弹窗,完成试验

WebSocket安全漏洞-概念梳理



WebSocket安全漏洞-概念梳理


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

文件上传漏洞-概念梳理

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

信息泄露漏洞-概念梳理

业务逻辑漏洞-概念梳理

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

身份验证漏洞-概念梳理

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


原文始发于微信公众号(H君网安白话):WebSocket安全漏洞-概念梳理

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月10日15:31:32
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   WebSocket安全漏洞-概念梳理http://cn-sec.com/archives/1453294.html

发表评论

匿名网友 填写信息