点击蓝字
关注我们
始于理论,源于实践,终于实战
老付话安全,每天一点点
激情永无限,进步看得见
严正声明
本号所写文章方法和工具只用于学习和交流,严禁使用文章所述内容中的方法未经许可的情况下对生产系统进行方法验证实施,发生一切问题由相关个人承担法律责任,其与本号无关。
特此声明!!!
什么是 WebSockets
WebSockets 是通过 HTTP 启动的双向全双工通信协议。用于 Web 应用程序中的流数据和其他异步流量的交互。
HTTP 和 WebSockets 有什么区别
浏览器和 Web 服务器之间的大多数通信都使用 HTTP。使用 HTTP 时,客户端发送请求,服务器返回响应。响应会立即发生,并且完成通信。即使网络连接保持打开状态,这也将用于请求和响应的单独通信。
WebSocket 连接是通过 HTTP 启动的,消息可以随时向任一方向发送,并且本质上不是事务性的。连接通常会保持打开和空闲状态,直到客户端或服务器准备好发送消息。WebSockets 在需要低延迟或服务器启动的消息的情况下特别有用,如财务数据的实时发送。
WebSocket 连接是如何建立的
WebSocket 是一种在 Web 浏览器和服务器之间在单个 TCP 连接上进行全双工通信的协议。它允许服务器主动向客户端推送数据,而不需要客户端频繁地发送请求。它允许客户端和服务器之间建立持久连接,实现实时数据传输。
1、初始 HTTP 请求:客户端首先发送一个普通的 HTTP 请求到服务器,这个请求包含了升级协议的头部字段,表明客户端希望将连接升级到 WebSocket 协议。
var socket = new WebSocket('ws://example.com/socket');
在这个请求中,客户端会发送一些特定的头部字段,比如 Upgrade: websocket 和 Connection: Upgrade,以及一个随机生成的密钥 Sec-WebSocket-Key,并使用Sec-WebSocket-Version指定版本。
socket实例尝试连接到ws://example.com/socket(WebSocket 服务器的地址),注意这里是ws,不是HTTP,而且还可以使用WSS,wss 即使用 TLS/SSL 加密的 WebSocket 连接。ws 协议使用未加密的连接。类似与HTTP与https。
2、服务器响应:服务器接收到这个请求后,如果同意升级到 WebSocket 协议,会返回一个特殊的 HTTP 响应,这个响应也包含了一些特定的头部字段,比如 Upgrade: websocket 和 Connection: Upgrade,以及一个经过计算的密钥 Sec-WebSocket-Accept。
3、连接建立:一旦客户端接收到服务器的响应,并且确认了服务器返回的密钥是正确的,就会认为连接已经成功建立。此时,客户端和服务器就可以通过这个连接发送和接收数据了。
4、数据传输:在连接建立之后,客户端和服务器可以通过这个连接发送和接收数据。这些数据可以是文本数据,也可以是二进制数据。
5、连接关闭:当通信完成后,客户端或服务器可以主动关闭连接。关闭连接时,会发送一个关闭帧,对方接收到关闭帧后也会关闭连接,整个过程结束。
WebSocket 消息长什么样
WebSocket 消息可以包含任何内容或数据格式,一般使用 JSON 来在 WebSocket 消息中发送结构化数据。
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成。它在 Web 应用程序中非常流行,尤其是在 AJAX请求中。
如何通过WebSocket 流量来挖掘漏洞
1、利用WebSocket 消息攻击
基于输入的漏洞类型(如:XSS、命令注入、SQL注入)都可以通过篡改 WebSocket 消息的内容来实施攻击。
2、利用WebSocket 握手攻击
篡改 Sec-WebSocket-Key:攻击者可以尝试篡改 Sec-WebSocket-Key 头部字段的值,以绕过服务器的验证逻辑。如果服务器没有严格验证这个字段,可能会导致握手成功,从而建立一个不安全的 WebSocket 连接。
篡改 Sec-WebSocket-Version:攻击者可以尝试篡改 Sec-WebSocket-Version 头部字段的值,以利用服务器对不同版本 WebSocket 协议的支持情况。如果服务器没有正确处理不同版本的握手请求,可能会导致握手成功,从而建立一个不安全的 WebSocket 连接。
篡改 Connection 和 Upgrade 头部字段:攻击者可以尝试篡改 Connection 和 Upgrade 头部字段的值,以绕过服务器的验证逻辑。如果服务器没有严格验证这两个字段,可能会导致握手成功,从而建立一个不安全的 WebSocket 连接。
3、跨站点 WebSockets 利用漏洞
攻击者可以利用这种漏洞来劫持用户的 WebSocket 连接,从而执行未经授权的操作。通过在受害者的浏览器中注入恶意脚本来实现。注入恶意脚本,恶意脚本会在受害者的浏览器中创建一个新的 WebSocket 连接到目标服务器。建立成功后恶意脚本会通过这个连接发送恶意指令窃取数据。
END
老付
欢迎扫码
关注我们
网络安全
原文始发于微信公众号(老付话安全):详解WebSockets 安全漏洞
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论