WebSocket 测试入门篇

ops/2025/1/14 1:17:00/

Websocket 是一种用于 H5 浏览器的实时通讯协议,可以做到数据的实时推送,可适用于广泛的工作环境,例如客服系统、物联网数据传输系统,

基础介绍

我们平常接触最多的是 http 协议的接口,http 协议是请求与响应的模式,你发个请求到服务端,服务端给个返回你。

这种模式并不能满足我们生活中的全部场景,就拿最近小伙伴们关注的股票基金为例,比如我想关注某个基金当天的净值估算。

我打开一个网页后,这时候我在页面不需要做任何操作,页面上的数据会自动刷新,间隔 x 秒或者 x 分钟,会自动刷新数据。

要实现这种实时更新的效果,有几种实现方式:

  1. 还是用 http 请求,用 ajax 轮询,每间隔固定的时间,询问一次服务端,从服务端拿最新的数据

  2. 使用 websocket 建立长连接,服务端和客户端可以互相通信,服务端只要有数据更新,就可以主动推给客户端

         

图片

上图为 ajax 轮询与 webscokets 实现的方式对比图,从图中可以看出 ajax 轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出 HTTP 请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而 HTTP 请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。

HTML5 定义的 WebSocket 协议,能更好节省服务器资源和带宽,并且能够更实时地进行通讯。 浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。

识别方式

想要识别网站是否使用了 websockets 协议,需要先了解其工作过程,下图是 WebSocket 工作的详细过程:

图片

WebSocket 服务端的连接地址与 http 协议类似,以 ws、wss 开头,比如:

ws://ws.xazlsec.com:8888 

wss://wss.xazlsec.com:9999

wss 是 ws 基础上用 ssl 加密传输信息,使用 javascript 连接的代码案例如下:

var ws = new WebSocket("wss://wss.xazlsec.com:9999/chat");

所以识别网站是否使用该协议,可以从两个地方分辩:

1、数据包中是否有 ws、wss 开头的链接地址 2、javascript 代码中是否包含 WebSocket 这样的函数调用,或者以 ws、wss 开头的链接

对于这种协议的数据包,常见的 web 测试工具都具备抓取能力,比如 BurpSuite,ZAP 等:

图片

常见漏洞

1、CSWSH(跨站点网站劫持,最为广泛的漏洞)

类似于 CSRF 漏洞,在没有验证请求源的情况下,任意来源均可以连接 WebSocket 服务器进行数据交互,攻击者通过构造恶意页面,诱使用户访问,然后借助用户的身份信息与服务器建立连接,从而劫持用户身份下的 WebSocket 连接。

2、XSS(跨站脚本攻击)

由于大多数的聊天室,对于用户输入过滤不严导致 XSS 漏洞的发生。

3、授权问题

WebSocket 中没有可以检查 IDOR 和 授权问题的标头

4、DOS 攻击

WebSockets 允许无限数量的连接服务器。攻击者可以用 DOS 攻击服务器。这种行为增加了服务器的负担并耗尽了服务器上的资源致使网站速度大大降低。

黑盒测试内容

1、检查是否可以通过其他来源连接 ws 服务器 2、是否使用了 ssl 加密传输敏感信息,也就是服务器连接是否 ws 还是 wss 3、身份验证检查,连接 ws 服务器是否需要授权 4、输入内容是否做了过滤,比如 xss、sql 注入等 payload,检测是否存在该漏洞

WebSocket 靶场 DVWS 初体验

DVWS 类似于 DVWA,但是客户端之间的通信是通过 WebSockets 进行,项目地址:

https://github.com/interference-security/DVWS

图片

         

首先在 burp 上设置好监听端口,然后在浏览器中设置代理为 burp 监听的地址:

图片

暴力破解

打开 dvws 左侧菜单中的暴力破解实验,输入账号密码之后登录:

图片

Burp 截取到的数据包,从 WebSocket History 选项卡中可以看到:

图片

我们如果想暴力破解这个账号密码需要不断与服务器建立连接,而 Burp 的 Intruder 是针对 http 协议进行利用,所以这里需要用到一个脚本,将 http 协议转为 WebSocket 协议,脚本地址:

https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Web%20Sockets/Files/ws-harness.py

下载脚本后,将 ws 的地址(burp 的代理端口)作为参数,启动该脚本:

python ws-harness.py -u “ws://dvws.local:8080” -m ./message.txt

注意:如果是 https 则使用 wss,message.txt 中保存的是 websockets 消息模板,访问时以 fuzz 作为参数名,如图:

图片

         

启动后,监听一个新的端口 8000:

图片

接下来访问:

http://localhost:8000/?fuzz=

图片

到这里已经实现了 http 协议转 WebSocket,针对这个连接进行 fuzz,也就是针对 WebSockets 协议的认证做 fuzz,接下来就很简单了,使用 Intruder 进行 fuzz:

图片

由于靶场中的用户名密码使用了 base64 编码,所以需要在 burp 中设置:

图片

         

到这里就完成了针对 WebSocket 协议的认证做暴力破解的操作。

SQL 注入

图片

操作过程与暴力破解类似,设置完 http 转 WebSocket 后:

图片

         

使用 sqlmap 针对该接口进行测试,需要用到 base64encode 这个 tamper:

图片

成功利用:

图片

总结

本文主要讲了 WebSockets 协议的原理基础,主要目的是对 WebSockets 有个大体的认识,推荐大家去玩玩 DVWS 这个靶场。


http://www.ppmy.cn/ops/149043.html

相关文章

vue(2,3), react (16及以上)开发者工具资源

在前端开发的广阔领域中,Vue.js 和 React.js 作为两大主流框架,各自拥有庞大的用户群体和丰富的生态系统。为了帮助开发者更高效地进行调试和开发,Vue Devtools 和 React 开发者工具应运而生,成为这两个框架不可或缺的辅助工具。本…

【渗透测试术语总结】

Top 渗透测试常用专业术语 相信大家和我一样,搞不清这些专业名词的区别,所以我来整理一下。 1. POC、EXP、Payload与Shellcode POC:全称 Proof of Concept ,中文 概念验证 ,常指一段漏洞证明的代码。 EXP&#xf…

NO.3 《机器学习期末复习篇》以题(问答题)促习(人学习),满满干huo,大胆学大胆补!

目录 🔍 1. 对于非齐次线性模型 ,试将其表示为齐次线性模型形式。 ​编辑 🔍 2. 某汽车公司一年内各月份的广告投入与月销量数据如表3-28所示,试根据表中数据构造线性回归模型,并使用该模型预测月广告投入为20万元时…

搭建RK3588开发板Qt交叉编译环境

一、开发环境 在虚拟机里安装Ubuntu20.04Qt5.14.2交叉编译器gcc-linaro-7.5.0 二、相关资料下载 在虚拟机里安装Ubuntu20.04 Ubuntu20.04镜像下载(https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/)安装Qt5.14.2 下载安装包和源码 安装包(http…

console.log封装

console.log封装 在控制台中打印带有颜色和格式的日志信息。 /*** 检查给定的对象是否为数组*/ const isArray function (obj: any): boolean {return Object.prototype.toString.call(obj) [object Array] }/*** Logger 构造函数*/ Logger () > {}/*** 根据日志类型返回…

51单片机——串口通信(重点)

1、通信 通信的方式可以分为多种,按照数据传送方式可分为串行通信和并行通信; 按照通信的数据同步方式,可分为异步通信和同步通信; 按照数据的传输方向又可分为单工、半双工和全双工通信 1.1 通信速率 衡量通信性能的一个非常…

晨辉面试抽签和评分管理系统之五:面试准备时间倒计时管理

晨辉面试抽签和评分管理系统(下载地址:www.chenhuisoft.cn)是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…

java进阶之maven

Maven Maven问题处理本地jar包导入本地maven库 Maven基础什么是mavenidea整合mavenmaven目录maven仓库maven远程仓库maven本地仓库 仓库的配置jdk的配置本地仓库的配置镜像仓库的配置访问仓库的优先级别如何在idea中进行配置 maven工程的类型POM模式-Maven工程关系依赖关系如何…