某不知名博客 某不知名博客
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carsaid

安全界的小学生
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前言

  • 服务器端主题(翻译)

  • 客户端主题(翻译)

  • 高级主题(翻译)

  • 扩展阅读(翻译)

  • 个人学习笔记

    • 说明
    • 笔记-服务端主题

    • 笔记-客户端主题

      • XSS笔记
      • CSRF笔记
      • CORS笔记
      • 点击劫持笔记
      • 基于DOM的漏洞笔记
      • WebSockets笔记
        • WebSockets基本知识
          • 1、什么是WebSockets?
          • 2、WebSockets和HTTP之间有什么区别?
          • 3、如何建立WebSockets连接?
          • 4、有哪些标头可用于WebSockets?这些标头分别有什么作用?
          • 5、WebSockets消息中可以包含什么内容?
          • 6、WebSockets和Socket一样吗?它们之间有什么区别?
        • WebSockets安全漏洞
          • 1、WebSockets会产生什么安全漏洞?
          • 2、有哪些利用WebSockets漏洞的方式?
          • 3、通过WebSockets来传输数据很安全?
          • 4、什么是跨站点WebSockets劫持(CSWSH)?
          • 5、跨站点WebSockets劫持和普通的CSRF之间有什么联系和区别?
        • 防御措施
          • 1、如何建立安全的WebSocket连接
    • 笔记-高级主题

  • 实验室做题记录

  • BurpSuite及官方实验室
  • 个人学习笔记
  • 笔记-客户端主题
carsaid
2023-10-19
目录

WebSockets笔记

个人总结

参考:https://portswigger.net/web-security/websockets

- name: 个人总结
  desc: 参考:https://portswigger.net/web-security/websockets
  bgColor: '#F0DFB1'
  textColor: 'green'
1
2
3
4

# WebSockets笔记

# 1WebSockets基本知识

# 1、什么是WebSockets?

答案
  • WebSockets 是一种通过 HTTP 发起的双向全双工通信协议;
  • WebSockets 可以用于传输异步流量,实现实时异步通信;
  • 浏览器和服务器只需要完成一次握手,两者之间就可以打开交互式通信会话,建立持久性的长期连接,并进行双向数据传输(浏览器能发数据给服务器,服务器也能反过来发数据给浏览器)。

# 2、WebSockets和HTTP之间有什么区别?

答案

HTTP:

  • 是大多数 Web 浏览器和 Web 站点之间的通信协议;
  • 通过 HTTP,客户端可以向服务端发送请求;
  • 请求的生存期很短,每次请求都会建立一个新的连接,且会立即生成响应;
  • 多请求,多连接,单向即时传输。

WebSockets:

  • 通过 HTTP 发起,建立在 HTTP 协议之上,用于实现某些特定的流量传输需求;
  • 通过 WebSockets 可以建立双向通信,客户端可以向服务端发送请求,服务端也可以向客户端发送请求;
  • 请求的生存期很长,通过一个请求完成握手,就可以建立一个持久性的连接,连接会保持打开和空闲状态,等待任意一方(客户端或服务端)主动发送数据;
  • 单请求,单个持久性连接,双向异步传输。

# 3、如何建立WebSockets连接?

答案

一般通过客户端 JavaScript 创建连接:var ws = new WebSocket("wss://<服务器地址>/abc")

  • ws://是普通的 WebSocket 协议,相当于http://
  • wss://是经过 TLS 加密的 WebSockets 协议,相当于https://

建立连接后,通过客户端 JavaScript,从浏览器方向 往 服务器发送一条简单的消息:ws.send("数据");

# 4、有哪些标头可用于WebSockets?这些标头分别有什么作用?

请求和响应示例:

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

HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=
1
2
3
4
5
6
7
8
9
10
11
12
答案

通用标头:

  • Connection: Upgrade和Upgrade: websocket这两个标头,表明当前 HTTP 请求是一次 WebSocket 握手。

请求标头:

  • Sec-WebSocket-Version: 13指定了客户端希望使用的 WebSocket 协议版本,这通常都为13
  • Sec-WebSocket-Key: wDqumtseNBJdhkihL6PW7w==包含一个经过 Base64 编码的随机值,该值在每次握手请求中都需要随机生成;注意,该标头不会用于身份验证 或 会话处理等目的

响应标头:

  • Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=包含了请求标头Sec-WebSocket-Key所提交值的散列,该散列还与特定的字符串连接,最后才给到响应标头。这样做是为了防止 因服务器配置错误或缓存代理 而导致的误导性响应

# 5、WebSockets消息中可以包含什么内容?

答案

原则上,WebSocket 消息可以包含任何内容或数据格式。在现代应用程序中,JSON (opens new window) 通常用于在 WebSocket 消息中发送结构化数据。

# 6、WebSockets和Socket一样吗?它们之间有什么区别?

答案

两者的区别有点多,推荐一篇讲Socket的文章 (opens new window)。下面只列举两者之间的部分区别:

WebSockets:

  • 一种基于 HTTP 的全新协议;
  • 在客户端和服务端之间建立双向通信;
  • 通过建立 WebSockets 连接,可以在任意一端(客户端或服务端)收发数据。

Socket(套接字):

  • 一种从 TCP 中抽象出来的网络接口;
  • 在程序与程序之间建立双向通信;
  • 通过建立 Socket 连接,程序可以通过其进行收发数据、IO 操作(打开、读写、关闭)等动作。

# 2WebSockets安全漏洞

# 1、WebSockets会产生什么安全漏洞?

答案

原则上来讲,几乎任何 Web 安全漏洞都可能在 WebSockets 中出现。WebSockets 是建立在 HTTP 上的一种数据传输协议,只是单纯用来传输数据的,对于安全漏洞的出现并没有决定性的因素。

  • 如果 WebSockets 将数据传递到服务器,而服务器没有以安全的方式处理数据,则可能产生服务端漏洞
  • 如果 WebSockets 将数据传递给其他应用程序用户,则可能产生客户端漏洞

# 2、有哪些利用WebSockets漏洞的方式?

答案
  • 操纵 WebSockets 消息
  • 操纵 WebSockets 握手
  • 跨站点 WebSockets 劫持

# 3、通过WebSockets来传输数据很安全?

判断。

答案

错误。WebSockets 只是一种新型的数据传输协议和方式,并不提供安全方面的保护。

# 4、什么是跨站点WebSockets劫持(CSWSH)?

答案

跨站点 WebSockets 劫持(CSWSH)是由 WebSocket 握手请求中的 CSRF 漏洞造成的一种攻击方式。

当 WebSocket 握手请求仅依赖 HTTP cookie 进行会话处理,并且不包含任何 CSRF 令牌或其他不可预测的值时,就会出现这种情况。这涉及 WebSocket 握手上的 CSRF 漏洞利用。该攻击允许你代表受害用户执行特权操作,或捕获受害用户有权访问的敏感数据等。

然后,攻击者的页面可以通过该连接,向服务器发送任意消息,并读取从服务器接收回来的消息内容。

# 5、跨站点WebSockets劫持和普通的CSRF之间有什么联系和区别?

答案

CSRF:

  • 漏洞产生地点:无 CSRF 防护的某个功能点中;
  • 载荷:攻击者构造 CSRF 载荷,然后将其投递给受害用户,攻击过程发生在用户会话层面;
  • 单向性:CSRF 可以诱使受害者发出请求,但攻击者无法检索响应;
  • 危害:伪装成受害用户并执行未经授权的操作。

跨站点WebSockets劫持:

  • 漏洞产生地点:无 CSRF 防护的 WebSockets 握手请求中;
  • 载荷:攻击者可以在自己的域上创建恶意网页,从而与目标应用程序建立跨域 WebSocket 连接,该连接建立在用户会话层面;
  • 双向性:攻击者通过该连接,可以向服务器发送任意消息,并读取从服务器接收回来的消息内容。这与常规的 CSRF 不同,攻击者获得了与受损应用程序的双向交互;
  • 危害-1:与常规 CSRF 一样;
  • 危害-2:与常规 CSRF 不同,跨站点 WebSockets 劫持攻击具有双向性,可以读取来自服务器的任何响应内容,可以检索用户有权访问的敏感数据。

WebSockets + CSRF 组合拳,形成跨站 WebSockets 劫持攻击(升级版的 CSRF 漏洞)。

# 3防御措施

# 1、如何建立安全的WebSocket连接

答案
  • 使用wss://协议来建立 WebSockets 连接(经过 TLS 加密),而非ws://;
  • 对 WebSockets 端点的 URL 进行硬编码,同时不要把用户可控数据合并到此 URL 中;
  • 针对 WebSockets 握手消息实施 CSRF 保护,防止跨站点 WebSockets 劫持漏洞;
  • 在两个传输方向上,将来自对方的数据都视为不可信,就和平常的 HTTP 传输一样,客户端与服务端都要做好相应的防护措施。
编辑 (opens new window)
基于DOM的漏洞笔记
不安全的反序列化笔记

← 基于DOM的漏洞笔记 不安全的反序列化笔记→

最近更新
01
API测试笔记
04-30
02
msfvenom
03-29
03
Metasploit
03-29
更多文章>
Theme by Vdoing | Copyright © 2023-2024 Carsaid | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式