【Academy】测试WebSockets安全漏洞Testing for WebSockets security vulnerabilities

测试WebSockets安全漏洞Testing for WebSockets security vulnerabilities

  • 概述
  • WebSockets是什么?
    • HTTP和WebSockets有什么区别?
    • 如何建立WebSocket连接?
    • WebSocket消息看起来像什么?
  • 操纵WebSocket流量
    • 拦截和修改WebSocket消息
    • 重放和生成新的WebSocket消息
    • 操作WebSocket连接
  • WebSockets安全漏洞
    • 操纵WebSocket消息以利用漏洞
    • 操纵WebSocket握手以利用漏洞
    • 使用跨站点WebSockets来利用漏洞
    • 跨站点WebSockets劫持
  • 如何保护WebSocket连接

概述

在本文中,将解释如何操作WebSocket消息和连接,描述WebSocket可能出现的安全漏洞类型,并给出一些利用WebSocket漏洞的示例。
WebSockets在现代Web应用程序中被广泛使用。它们通过HTTP发起,并在两个方向上提供具有异步通信的长期连接。
WebSockets用于各种目的,包括执行用户操作和传输敏感信息。实际上,常规HTTP中出现的任何Web安全漏洞也可能与WebSockets通信有关。

WebSockets是什么?

WebSockets是一种双向、全双工通信协议,通过HTTP发起。它们通常用于现代Web应用程序中的流数据和其他异步流量。

在下文将解释HTTP和WebSockets之间的区别,描述如何建立WebSockets连接,并概述WebSockets消息的特征。

HTTP和WebSockets有什么区别?

Web浏览器和网站之间的大多数通信都使用HTTP。使用HTTP,客户端发送请求,服务器返回响应。通常情况下,响应会立即发生,并且事务完成。即使网络连接保持打开,这也将用于请求和响应的单独事务。

一些现代网站使用WebSockets。WebSockets连接通过HTTP发起,并且通常是长期存在的。消息可以在任何时候向任何一个方向发送,并且本质上不是事务性的。连接通常保持打开和空闲状态,直到客户端或服务器准备好发送消息。

WebSockets在需要低延迟或服务器启动的消息的情况下特别有用,例如财务数据的实时馈送。

如何建立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握手消息的几个特性值得注意:

  • 请求和响应中的ConnectionUpgrade头表明这是一次WebSocket握手。
  • 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消息中发送结构化数据。

例如,使用WebSockets的聊天机器人应用程序可能会发送如下消息:

{"user":"Hal Pline","content":"I wanted to be a Playstation growing up, not a device to answer your inane questions"}

操纵WebSocket流量

寻找WebSockets安全漏洞通常涉及以应用程序不期望的方式操纵它们。

使用Burp Suite:

  • 拦截和修改WebSocket消息。
  • 重放并生成新的WebSocket消息。
  • 操作WebSocket连接。

拦截和修改WebSocket消息

您可以使用Burp Proxy拦截和修改WebSocket消息,如下所示:

  • 打开Burp的浏览器。
  • 浏览到使用WebSockets的应用程序函数。您可以通过使用该应用程序并查找Burp Proxy中的WebSockets历史选项卡中出现的条目来确定WebSockets正在使用。
  • 在Burp Proxy的“拦截”选项卡中,确保拦截已打开。
  • 当从浏览器或服务器发送WebSocket消息时,它将显示在拦截选项卡中,供您查看或修改。按“转发”按钮转发消息。

注意

您可以配置是否在Burp Proxy中拦截客户端到服务器或服务器到客户端的消息。在“设置”对话框的“WebSocket拦截规则”设置中执行此操作。

重放和生成新的WebSocket消息

除了动态拦截和修改WebSocket消息之外,您还可以重播单个消息并生成新消息。您可以使用Burp Repeater:

  • 在Burp Proxy中,选择WebSockets历史记录中的消息,或在Intercept选项卡中,然后从上下文菜单中选择“发送到中继器”。
  • 在burp中继器中,您现在可以编辑选定的消息,并一遍又一遍地发送它。
  • 您可以输入一条新消息,并将其发送到客户端或服务器。
  • 在Burp Repeater中的“历史记录”面板中,您可以查看通过WebSocket连接传输的消息的历史记录。这包括您在Burp Repeater中生成的消息,以及通过相同连接由浏览器或服务器生成的任何消息。
  • 如果您想编辑并重新发送历史面板中的任何消息,您可以通过选择消息并从上下文菜单中选择“编辑并重新发送”来完成。

操作WebSocket连接

除了操作WebSocket消息外,有时还需要操作建立连接的WebSocket握手。

在各种情况下,可能需要操纵WebSocket握手:

  • 它可以使你到达更多的攻击面。
  • 某些攻击可能会导致您的连接中断,因此您需要建立新的连接。
  • 原始握手请求中的令牌或其他数据可能已经过时,需要更新。

您可以使用Burp Repeater操纵WebSocket握手:

  • 如前所述,向Burp Repeater发送WebSocket消息。
  • 在Burp Repeater中,单击WebSocket URL旁边的铅笔图标。这将打开一个向导,该向导允许您附加到现有的已连接WebSocket、克隆已连接的WebSocket或重新连接到已断开连接的WebSocket。
  • 如果您选择克隆已连接的WebSocket或重新连接到已断开连接的WebSocket,则向导将显示WebSocket握手请求的完整详细信息,您可以在执行握手之前根据需要对其进行编辑。
  • 当您点击“连接”时,Burp将尝试执行配置的握手并显示结果。如果成功建立了新的WebSocket连接,则可以使用此连接在Burp Repeater中发送新消息。

WebSockets安全漏洞

原则上,几乎任何Web安全漏洞都可能与WebSockets有关:

  • 传输到服务器的用户提供的输入可能会以不安全的方式进行处理,从而导致漏洞,如SQL注入或XML外部实体注入。
  • 一些通过WebSockets访问的盲漏洞可能只能使用带外(OAST)技术检测。
  • 如果攻击者控制的数据通过WebSockets传输给其他应用程序用户,则可能导致XSS或其他客户端漏洞。

操纵WebSocket消息以利用漏洞

大多数影响WebSocket的基于输入的漏洞都可以通过篡改WebSocket消息的内容来发现和利用。

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

{"message":"Hello Carlos"}

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

<td>Hello Carlos</td>

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

{"message":"<img src=1 οnerrοr='alert(1)'>"}

操纵WebSocket握手以利用漏洞

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

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

使用跨站点WebSockets来利用漏洞

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

跨站点WebSockets劫持

什么是跨站点WebSocket劫持?

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

攻击者可以在自己的域中创建恶意网页,从而建立到易受攻击的应用程序的跨站点WebSocket连接。应用程序将在受害者用户与应用程序的会话的上下文中处理连接。

攻击者的页面可以通过该连接向服务器发送任意消息,并读取从服务器接收回的消息内容。这意味着,与常规CSRF不同,攻击者可以与受感染的应用程序进行双向交互。
跨站点WebSocket劫持有什么影响?

成功的跨站点WebSocket劫持攻击通常使攻击者能够:

  • 伪装成受害者用户执行未经授权的操作。与常规CSRF一样,攻击者可以向服务器端应用程序发送任意消息。如果应用程序使用客户端生成的WebSocket消息来执行任何敏感操作,则攻击者可以跨域生成合适的消息并触发这些操作。
  • 用户可以访问的网络敏感数据。与常规CSRF不同,跨站点WebSocket劫持使攻击者能够通过被劫持的WebSocket与易受攻击的应用程序进行双向交互。如果应用程序使用服务器生成的WebSocket消息向用户返回任何敏感数据,那么攻击者可以拦截这些消息并捕获受害用户的数据。

执行跨站点WebSocket劫持攻击

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

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

例如,下面的WebSocket握手请求可能容易受到CSRF的攻击,因为唯一的会话令牌是在cookie中传输的:

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标头包含一个随机值,以防止缓存代理出错,并且不用于身份验证或会话处理目的。

如果WebSocket握手请求易受CSRF攻击,则攻击者的网页可以执行跨站点请求,在易受攻击的站点上打开WebSocket。攻击中接下来发生的事情完全取决于应用程序的逻辑以及它如何使用WebSockets。攻击可能涉及:

  • 发送WebSocket消息以代表受害用户执行未经授权的操作。
  • 发送WebSocket消息以检索敏感数据。
  • 有时,只是等待包含敏感数据的传入消息到达。

如何保护WebSocket连接

要最大限度地降低WebSocket出现安全漏洞的风险,请使用以下准则:

  • 使用wss://协议(WebSockets over TLS)。
  • 硬编码WebSockets端点的URL,当然不要将用户可控的数据合并到这个URL中。
  • 保护WebSocket握手消息不受CSRF攻击,避免跨站点WebSocket劫持漏洞。
  • 将通过WebSocket接收的数据在两个方向上都视为不可信。在服务器和客户端安全地处理数据,以防止基于输入的漏洞,如SQL注入和跨站点脚本。

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

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

相关文章

ONLYOFFICE 8.1:引领桌面办公新潮流,功能升级全面提升

目录 一、ONLYOFFICE是什么&#xff1f; 二、功能完善的PDF编辑器 三、幻灯片版式升级 四、改进从右至左显示 五、新的本地化选项 六、多媒体功能增强 七、应用价值探讨 一、ONLYOFFICE是什么&#xff1f; ONLYOFFICE 是一款功能强大的办公套件&#xff0c;旨在提供全面…

什么是云服务器镜像,如何选择?

云服务器镜像是一种用于业务连续性、灾难恢复和备份的技术手段&#xff0c;其本质是云端创建的服务器数据副本。 这些镜像内容可以涵盖系统、光盘、软件、网站甚至整个服务器&#xff0c;主要用于创建容错和冗余服务器计算基础架构&#xff0c;为用户提供了一个方便且可靠的解…

YOLOv8改进 | 注意力机制 | 轻量级的空间组增强模块SGE【全网独家】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a;《YOLOv8改进有效涨…

python项目运营时,出现,redis用户密码未设置问题,排查解决

一、问题描述&#xff1a; 在本地化开发过程中&#xff0c;pythonDjango运行项目&#xff0c;redis为本地windows版本&#xff0c;在设置过密码后&#xff0c;仍然会出现pythonDjango运行项目&#xff0c;终端日志显示如下&#xff1a; INFO info信息 ERROR redis数据库异常[&…

内网安全【4】SSH隧道技术

1.四大隧道协议 (1)SMB协议 判断&#xff1a;445端口是否开放 (2)ICMP协议 判断&#xff1a;ping命令能通说明使用icmp协议 (3)DNS协议 判断&#xff1a;nslookup www.baidu.com 属于UDP iodine工作原理是 &#xff0c;通过TAP虚拟网卡&#xff0c;在服…

大厂面试经验分享,小白如何在面试中脱颖而出

前言 毕业季&#xff0c;对于每一位即将步入社会的学子来说&#xff0c;都是一个充满挑战和机遇的时刻。作为我的一位好朋友也是好学长&#xff0c;他刚刚在一家顶尖科技公司斩获了他梦寐以求的职位。他深知求职路上的艰辛&#xff0c;因此打算把自己的经验分享给大家&#xf…

一键掌握多渠道推广效果!Xinstall超级渠道功能,让你的App推广更高效

在App运营的大潮中&#xff0c;如何高效、精准地推广App&#xff0c;成为每一位运营者关注的焦点。传统的推广方式&#xff0c;如地推、代理、分销、广告等&#xff0c;虽然能够带来一定的用户增长&#xff0c;但如何衡量推广效果、如何与合作伙伴结算、如何管理下属渠道等问题…

Java程序递归及mybatis递归查询

之前项目组有个需求&#xff0c;定时同步机构的信息。已知三方接口由于返回数据量很大&#xff0c;所以最后需要三方提供一个可根据机构编号获取当前机构及子机构信息的接口。而不是一次性返回全部机构信息&#xff01; 由于这次需求也用到了递归&#xff0c;所以记录下&#…

2024.6.26 刷题总结

2024.6.26 **每日一题** 526.优美的排列&#xff0c;该题考察的是状压dp的知识&#xff0c;用一个n位的二进制数表示排列中的数被选取的情况&#xff0c;若为1&#xff0c;则表示该位被选取&#xff0c;若为0&#xff0c;则表示该位没有被选取&#xff0c;用一个数组来存储当前…

【Vue】集成富文本编辑器

这文章使用的是wangeditor插件&#xff0c;官网地址&#xff1a;wangEditor&#xff0c;这个比较简单 安装 npm i wangeditor --save 使用 <div id"editor"></div>import E from "wangeditor"const editor new E("#editor") e…

兰州市红古区市场监管管理局调研食家巷品牌,关注细节,推动进步

近日&#xff0c;兰州市红古区市场监管管理局临平凉西北绿源电子商务有限公司进行了深入视察&#xff0c;为企业发展带来了关怀与指导。 食家巷品牌作为平凉地区特色美食的代表之一&#xff0c;一直以来凭借其纯手工工艺和独特的风味&#xff0c;在市场上占据了一席之地。领导…

charls抓包工具 mumu模拟器抓包apk

1.先安装mumu 官网添加链接描述 2.配置 设置&#xff0c;点进互联网&#xff0c;点编辑&#xff0c;选择手动代理 主机名写自己电脑的ip地址&#xff0c;端口随便&#xff0c;只要不被占用&#xff0c;一般参考其他人都是8888 3.下载charls 参考这个添加链接描述 先官网…

一文详解:什么是企业邮箱?最全百科

什么是企业邮箱&#xff1f;企业邮箱即绑定企业自有域名作为邮箱后缀的邮箱&#xff0c;是企业用于内部成员沟通和客户沟通的邮箱系统。 一、企业邮箱概念拆解 1.什么是企业邮箱&#xff1f; 企业邮箱即使用企业域名作为后缀的邮箱系统。它不仅提供专业的电子邮件收发功能&a…

How to persist LangChain conversation memory (save and load)

题意&#xff1a;如何持久化 LangChain 对话记忆&#xff08;保存和加载&#xff09; 问题背景&#xff1a; Im creating a conversation like so: 我正在创建一个对话&#xff0c;如下所示&#xff1a; llm ChatOpenAI(temperature0, openai_api_keyOPENAI_API_KEY,…

大学生毕业季,寄物流快递避雷指南

随着毕业季的来临&#xff0c;大学生们纷纷开始整理自己的行李&#xff0c;准备离开校园&#xff0c;踏入社会。 在这个过程中&#xff0c;寄送快递成为了一个不可或缺的环节。然而&#xff0c;在寄送快递的过程中&#xff0c;如果不注意一些细节&#xff0c;很容易遭遇各种“…

【别再用Excel了!】这款免费可视化工具能帮你轻松提升效率

现代数据分析和展示的需求已经远远超出了传统工具的能力&#xff0c;尤其是在需要快速、直观和高效地处理复杂数据的情况下。山海鲸可视化通过其强大的功能和易用性&#xff0c;成为了设计师以及各类新手用户的理想选择。下面我就以一个可视化设计师的角度&#xff0c;和大家简…

金升阳电源被制裁,广州顶源电源模块可以完美替换

广州顶源电子科技股份有限公司,座落于国家高新技术开发区---广州科学城&#xff0c;是一家集研发、生产、销售及服务于一体的DC-DC&#xff0c;AC-DC电源的生产厂家。 公司通过了IATF16949汽车认证及ISO9001:2015质量管理体系认证。拥有专家级研发团队&#xff0c;产品研发经过…

Python中20个鲜为人知的字符串函数

目录 1. capitalize() 2. casefold() 3. join() 和 split() 4. strip(), lstrip(), rstrip() 5. replace() 6. format() 7. enumerate() 8. isalpha(), isdigit(), isalnum() 9. startswith(), endswith() 10. center() 11. count() 12. find(), index() 13. make…

ATFX汇市:澳大利亚5月CPI大增0.4百分点,降息预期显著降温

ATFX汇市&#xff1a;据澳大利亚统计局数据&#xff0c;澳大利亚5月加权CPI年率为4%&#xff0c;高于前值3.6%&#xff0c;高于预期3.8%&#xff0c;显示出澳大利亚通胀率颇具韧性。5月份数据公布之前&#xff0c;月度CPI年率平均波幅不足0.1个百分点&#xff0c;呈现出横盘震荡…

2024年高级会计职称题库。高效备考!!!

61.下列各项中&#xff0c;属于对会计职业道德进行自律管理与约束的机构是&#xff08;&#xff09;。 A.纪律检查部门 B.财政部门 C.会计行业组织 D.其他组织 答案&#xff1a;C 62.下列各项中&#xff0c;对会计职业行为自我约束和自我控制的部门主要是&#xff08;&am…