WebSocket 测试入门篇
Websocket 是一种用于 H5 浏览器的实时通讯协议,可以做到数据的实时推送,可适用于广泛的工作环境,例如客服系统、物联网数据传输系统,
基础介绍
我们平常接触最多的是 http 协议的接口,http 协议是请求与响应的模式,你发个请求到服务端,服务端给个返回你。
这种模式并不能满足我们生活中的全部场景,就拿最近小伙伴们关注的股票基金为例,比如我想关注某个基金当天的净值估算。
我打开一个网页后,这时候我在页面不需要做任何操作,页面上的数据会自动刷新,间隔 x 秒或者 x 分钟,会自动刷新数据。
要实现这种实时更新的效果,有几种实现方式:
-
还是用 http 请求,用 ajax 轮询,每间隔固定的时间,询问一次服务端,从服务端拿最新的数据
-
使用 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 这个靶场。
相关文章:

WebSocket 测试入门篇
Websocket 是一种用于 H5 浏览器的实时通讯协议,可以做到数据的实时推送,可适用于广泛的工作环境,例如客服系统、物联网数据传输系统, 基础介绍 我们平常接触最多的是 http 协议的接口,http 协议是请求与响应的模式&…...
Apache Traffic存在SQL注入漏洞(CVE-2024-45387)
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...
Centos7使用yum工具出现 Could not resolve host: mirrorlist.centos.org
在 CentOS 7 中使用 yum 工具时,出现 "Could not resolve host: mirrorlist.centos.org" 的错误,一般情况是因为默认的镜像源无法访问。 以下是一些常用的解决方法: 检查网络连接:首先使用 ping 命令测试网络连接是否…...
zookeeper shell操作和zookeeper 典型应用(配置中心、集群选举服务、分布式锁)
文章目录 引言I zookeeper客户端命令查看子节点 ls创建子节点 create获取节点信息 get更新节点数据 set删除节点 delete\ rmrII 监听机制node1:设置监听node3:修改监听节点node1:得到监听反馈III zookeeper 典型应用分布式锁集群选举服务数据发布/订阅(配置中心)引言 zk 的…...

Vue中Watch使用监听修改变动
使用注意 监听一个值时 多个值时...
Lua语言的文件IO
1、我们都知道,在任何语言当中都有输入输出,比如c语言当中就有很多printf,scanf,get ,put,gets,puts,文件io:open,read,write,close,标准io:fopen,fread,fwrite,fclose.在lua语言当中,也有相同的一些输入输出特性,叫io.open,io.re…...
C语言基本知识复习浓缩版:输出函数printf
输出函数printf学习 printf()的作用是将文本输出到屏幕上使用之前需要先引入stdio.h头文件printf函数在使用的时候,至少需要一个参数 printf() 是 C 语言标准库中的一个函数,用于将格式化的文本输出到标准输出设备(通常是屏幕)。…...

Ubuntu中使用miniconda安装R和R包devtools
安装devtools环境包 sudo apt-get install gfortran -y sudo apt-get install build-essential -y sudo apt-get install libxt-dev -y sudo apt-get install libcurl4-openssl-dev -y sudo apt-get install libxml2.6-dev -y sudo apt-get install libssl-dev -y sudo apt-g…...

Jmeter-压测时接口如何按照顺序执行
Jmeter-压测时接口如何按照顺序执行-临界部分控制器 在进行压力测试时,需要按照顺序进行压测,比如按照接口1、接口2、接口3、接口4 进行执行 查询结果是很混乱的,如果请求次数少,可能会按照顺序执行,但是随着次数增加…...

Ungoogled Chromium127 编译指南 MacOS篇(七)- 安装依赖包
1. 引言 在获取了 Ungoogled Chromium 的源代码之后,我们需要安装所有必要的依赖包。这些依赖包对于成功编译 Chromium 至关重要。本文将指导您完成所有必需软件包的安装。 2. 依赖包安装 2.1 使用 Homebrew 安装基础依赖 # 安装 Ninja 构建系统 brew install n…...
批量写入数据到数据库,卡顿怎么解决
在批量写入数据到数据库时,遇到卡顿或性能瓶颈是比较常见的问题。以下是一些可能的解决方案和优化策略,帮助你提高批量写入的性能: ### 1. **批量大小优化** - **调整批量大小**:尝试调整批量写入的数据量,找到一个平衡点。过大或过小的批量大小都可能影响性能。通常,批…...

Python爬虫 - 豆瓣图书数据爬取、处理与存储
文章目录 前言一、使用版本二、需求分析1. 分析要爬取的内容1.1 分析要爬取的单个图书信息1.2 爬取步骤1.2.1 爬取豆瓣图书标签分类页面1.2.2 爬取分类页面1.2.3 爬取单个图书页面 1.3 内容所在的标签定位 2. 数据用途2.1 基础分析2.2 高级分析 3. 应对反爬机制的策略3.1 使用 …...

Qt 5.14.2 学习记录 —— 칠 QWidget 常用控件(2)
文章目录 1、Window Frame2、windowTitle3、windowIcon4、qrc机制5、windowOpacity 1、Window Frame 在运行Qt程序后,除了用户做的界面,最上面还有一个框,这就是window frame框。对于界面的元素,它们的原点是Qt界面的左上角或win…...
在vue3项目中利用自定义ref实现防抖
一,效果展示 自定义ref实现防抖效果 二,代码部分 1在app.vue中 <template><input v-model"text"/><p class"result">{{text}}</p> </template><script setup> import {debounceRef} from ./u…...

服务器及MySQL安全设置指南
文章目录 Linux安全配置1、密码复杂度策略2、登陆失败策略3、登录超时策略4、安全日志记录5、账户策略5.1 创建系统管理员(应该对/var进行授权,修改可能会影响到ssh登录)5.2 创建安全管理员(应该对/etc进行授权)5.3 创…...
MDX语言的网络编程
MDX语言的网络编程探索 引言 在当今信息技术快速发展的时代,网络编程越来越成为软件开发的重要组成部分。无论是为了创建Web应用,还是为了开发与云服务交互的程序,网络编程的知识愈发显得重要。MDX(Multidimensional Expression…...
client-go中watch机制的一些陷阱
Reference https://stackoverflow.com/questions/51399407/watch-in-k8s-golang-api-watches-and-get-events-but-after-sometime-doesnt-get-an 问题描述 最近在使用 client-go 的 watch 机制监听 k8s 中的 deployment 资源时,发现一个奇怪的现象 先看下代码&a…...

Chrome访问https页面显示ERR_CERT_INVALID,且无法跳过继续访问
在访问网页的时候,因为浏览器自身的安全设置问题, 对于https的网页访问会出现安全隐私的提示, 甚至无法访问对应的网站,尤其是chrome浏览器, 因此本文主要讲解如何设置chrome浏览器的设置,来解决该问题&…...

Jenkins pipeline 发送邮件及包含附件
Jenkins pipeline 发送邮件及包含附件 设置邮箱开启SMTP服务 此处适用163 邮箱 开启POP3/SMTP服务通过短信获取TOKEN (保存TOKEN, 后面Jenkins会用到) Jenkins 邮箱设置 安装 Build Timestamp插件 设置全局凭证 Dashboard -> Manage Jenkins …...

怎么把word试题转成excel?
在教育行业、学校管理以及在线学习平台中,试题库的高效管理是一项核心任务。许多教育工作者和系统开发人员常常面临将 Word 中的试题批量导入 Excel 的需求。本文将详细介绍如何快速将试题从 Word 转换为 Excel,帮助您轻松解决繁琐的数据整理问题&#x…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...