WebSockets与Socket.io渗透测试实战指南

news/2025/9/21 8:09:39/文章来源:https://www.cnblogs.com/qife122/p/19103150

如何渗透测试WebSockets与Socket.io

Ethan Robish //

WebSockets技术概述

WebSockets是一种允许浏览器与服务器建立单一TCP连接并实现双向异步通信的技术。这对Web应用极具价值,可实现实时更新而无需浏览器在后台发送大量HTTP轮询请求。但对渗透测试者而言,由于工具对WebSockets的支持远不如HTTP普遍和成熟,这增加了测试难度。

除Burp Suite外,现有部分工具可处理WebSockets:

  • Zed Attack Proxy (ZAP)
  • Pappy Proxy
  • Man-in-the-Middle Proxy (mitmproxy)
  • WebSocket/Socket.io (WSSiP)

本文重点聚焦socket.io——一个流行的JavaScript WebSockets库,但部分技术思路也可应用于其他库或通用WebSockets协议。

Socket.io的流行度与测试环境

Socket.io在Github拥有超过4.1万星标,同时占据NPM上第二和第三大最受欢迎WebSockets包的位置。本文以使用socket.io的OWASP Juice-Shop项目作为演示环境。

Burp Suite中的WebSockets流量分析

在浏览器中访问Juice-Shop后,可在Burp的Proxy→WebSockets history中查看WebSocket流量。与无状态的HTTP协议始终存在请求/响应对不同,WebSockets是有状态协议,客户端和服务器可随时发送消息而不需等待对方响应。

WebSockets历史视图主要显示单字节消息收发,但当应用执行关键操作时会出现较大负载的消息。

Burp具备实时拦截和修改WebSockets消息的能力,但缺乏Repeater、Scanner或Intruder等高级功能。WebSocket拦截默认启用,只需开启主拦截开关即可。

将WebSockets降级为HTTP

方法一:利用Socket.io的HTTP回退机制

通过观察发现,部分WebSockets消息会同时出现在HTTP历史记录中。socket.io文档表明“polling”和“websockets”是两种默认传输选项,且可通过配置禁用轮询。

通过分析socket.io.js源码发现关键代码:

this.transports=n.transports||["polling","WebSocket"]

通过在Burp的Proxy→Options中设置匹配替换规则,将默认传输方式修改为仅轮询:

原始值:this\.transports=.*?\.transports\|\|\["polling","websocket"]
替换值:this.transports=["polling"]

(需启用正则匹配模式)

方法二:中断WebSockets升级过程

此方法针对WebSockets协议本身,更具通用性。WebSockets首先通过HTTP进行协商升级,关键步骤包括:

  1. 客户端发送包含WebSocket特定头部的升级请求
  2. 服务器返回101状态码(切换协议)及WebSocket特定头部
  3. 通信转为WebSockets模式

根据WebSockets RFC 4.1章节,可通过以下方式使连接失败:

  • 移除或修改Upgrade头字段
  • 移除或修改Connection头字段
  • 篡改Sec-WebSocket-Accept头字段
  • 添加客户端未请求的扩展头字段

设置相应的匹配替换规则后,所有WebSocket升级请求都会失败,迫使通信回退到HTTP。

将Burp Repeater作为Socket.io客户端

强制通信降级到HTTP后,可应用自定义匹配替换规则处理原本通过WebSockets传输的流量。

但直接重放HTTP请求面临两个问题:

  1. 每个请求包含会话ID(sid),无效请求会导致服务器终止会话
  2. 请求体包含计算后的消息长度字段,错误计算会导致服务器拒绝消息

解决方案:Burp宏与会话处理规则

创建宏:在Project options→Sessions→Macros中添加新宏,通过无sid参数的URL建立新会话:

/socket.io/?EIO=3&transport=polling&t=MJJJ4Ku

使用正则表达式"sid"\:"(.*?)"提取新会话ID。

创建会话处理规则:在Project options→Sessions→Session Handling Rules中新建规则,配置“检查会话有效性”操作并设置作用范围(建议至少包含Repeater)。

最终思考

尽管通过上述方法解决了会话管理问题,但由于消息长度计算复杂性,仍无法完全使用Burp Scanner和Intruder功能。现有Burp插件修改方案尚未完全解决服务器兼容性问题,此领域仍需进一步研究。


本文基于Black Hills Information Security的技术文章进行编译,旨在提供WebSockets安全测试的实用方法。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码

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

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

相关文章

深入解析:spring boot3.0整合rabbitmq3.13

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

完整教程:VLAN划分——TRUNK

完整教程:VLAN划分——TRUNKpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

现代操作系统-音频处理技术1 Linux驱动底层

应用数学基础: 香农-奈奎斯特采样定理 角速度倒数是频率; 采样一段最大角速度为ω的信息,理想状态下需要2ω的速度才能完全采样,否则就会产生混叠Aliasing(即较高频被对称采样到较低频段),而限制于前后端,一般…

mcp-server-chart chart mcp 服务

mcp-server-chart chart mcp 服务基于antv 的mcp 服务,支持25+ charts 的生成,对于图表的开发还是挺方便的,对于图表的渲染基于了ssr,同时官方还提供了额一个示例实现(ssr 转换为图片) 简单试用安装npm install …

元推理:人和事物,都是针对性的存在着与必然因果,残缺之美

元推理:人和事物,都是针对性的存在着与必然因果,残缺之美ECT-OS-JiuHuaShan/https://orcid.org/0009-0006-8591-1891▮ 推理就绪:基于自然辩证法数学形式化系统启动因果律算符 命题是穿透表象的终极洞察。所言的不…

人和事物,都是针对性的存在着与必然因果,残缺之美

人和事物,都是针对性的存在着与必然因果,残缺之美ECT-OS-JiuHuaShan/https://orcid.org/0009-0006-8591-1891▮ 推理就绪:基于自然辩证法数学形式化系统启动因果律算符 命题是穿透表象的终极洞察。所言的不是诗意的…

ArcEngine10.2中融合工具Dissolve的bug

问题描述 使用AE调用Dissolve的GP工具时,在10.2版本中发现一个bug,当融合字段dissolve_field不填任何值,执行时不报错也不结束,感觉似乎进入某种死循环。1 string inFc = @"D:\Data\Test\新建文件地理数据库.…

Linux驱动适配I2C/SPI例子

栗子: TI的PCM3060 /sound/soc/codecs/pcm3060-i2c.c /sound/soc/codecs/pcm3060-spi.c /sound/soc/codecs/pcm3060.c 主驱动 /sound/soc/codecs/pcm3060.h 导出一个probe符号给iic/spi probe时传入spi_client/i2c_cl…

[重要] PySimpleGU控件函数用法整理

以下是基于PySimpleGUI 4.60.5版本的控件函数用法演示示例整理,按功能分类并编号说明: 一、基础控件Text(文本显示) import PySimpleGUI as sg layout = [[sg.Text(欢迎使用PySimpleGUI, key=-TEXT-, font=(Arial,…

使用XState测试分布式微服务的完整指南

本文介绍了如何使用XState库建模微服务工作流,通过状态机简化测试流程,提升测试覆盖率,并利用声明式状态机实现可视化调试,适用于订单处理等分布式场景。测试分布式微服务使用XState 分布式微服务架构带来了可扩展…

含“华”量超高的奥迪,卖爆了

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087奥迪转型,有点狠。没有四环标,但有隐藏式门把手,电子外后视镜,…

某些外审专家的意见,真是臭不可闻

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087常在网上看到有学者抱怨,外审意见就是一坨翔! 每次看到这样的话,…

智元首次明确七人合伙人团队

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 35469554100490879月19日,第一财经记者在智元官网发现,官网已经上架了“合伙人团队…

大模型赋能的具身智能:自主决策和具身学习技术最新综述

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087 具身智能(Embodied AI)被视为通往通用人工智能(AGI)的关键路径…

ST首批中国产MCU,价格曝光

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087去年十一月底,欧洲芯片大厂意法半导体STMicroelectronics在投资者…

ABC424

ABC424C. New Skill Acquired 多源bfs代码实现 #include <bits/stdc++.h> #define rep(i, n) for (int i = 0; i < (n); ++i)using namespace std;int main() {int n;cin >> n;vector<vector<int…

解决 Windows 无法挂载 HTTP WebDAV(AList,OpenList)的问题

Windows 默认的 WebClient 服务仅支持 HTTPS 协议,而本地搭建的 WebDAV 服务通常基于 HTTP 协议,但是我们有办法将其“修复”。解决 Windows 无法挂载 HTTP WebDAV 的问题 当前市面上大多数网盘都可以挂载到 AList(…

在Ubuntu系统中使用gcc和Makefile编译C程序

一.用Ubuntu系统编写hello world程序并编译运行 1.用vim命令编写hello world程序代码2.用gcc命令编译并运行二.用Ubuntu系统编写主程序文件main1.c和子程序文件sub1.h并编译运行 1.编写子程序sub1.h2.编写主程序main1.…

HN CSP-S 2024 游记

本文中,一 Day 指一段 \(24\) 小时的时间段,从 \(4:00\) 开始计算。S1 Day -1 @湖南省队御用绫厨TM_Sharweek 拉我进了一个群。 熬到了凌晨一点,与 @湖南省队御用绫厨TM_Sharweek 在 QQ 上进行了聊天。 睡着了。 S1…

CSP-S 2025 初赛解析

T1有 5 个红色球和 5 个蓝色球,它们除了颜色之外完全相同。将这 10 个球排成一排,要求任意两个蓝色球都不能相邻,有多少种不同的排列方法? ( )A. 25 B. 30 C. 6 D. 120选 C. 排列组合:不相邻问题先排 \(5\) 个红…