[Day22] Websocket Injection

前言

:Websocket除了能建立一个双向通讯通道外,还能干嘛?

:当然是拿来Injection阿

正文

概念

Websocket允许客户端或Server建立一个全双工/双向的通讯,并达到客户端和Server之间的真正异步(asynchronous)通讯,让Web应用程序可以做到real-time。

先通过HTTP进行初始的Upgrade Handshake,在这之後所有通讯都使用"frame"通过TCP通道进行。Server通常会在初始的HTTP Websocket Handshake中验证Origin Header,并Response 101 Switching Protocols的Status Code。

GET /chat HTTP/1.1
Host: exmaple.com
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: xxxxxxxxxxxxbase64
Connection: keep-alive, Upgrade
Cookie: session=xxxxxxxxxxxxxxxxxxxx
Upgrade: websocket
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: xxxxxxxxxxxxxxxxhash

而最常见的Websocket漏洞包括:

  • DOS

由於Websockets允许无限(大量)的Connection连接到Server,让攻击者可以使用DOS来瘫痪Server或使网站速度极大减慢。

  • Handshake过程无身分验证

Websocket协议不允许Server在握手过程中对客户端进行身分验证,只有正常的HTTP Connection可以使用,而Upgrade之後的Handshake仍然存在於HTTP和Websocket之间,但HTTP将身分验证的资讯直接发送给websocket,这让攻击者可以利用,也就是Cross-Site WebSocket Hijacking。

过度信任HTTP Header也会产生这种问题,例如X-Forward-For Header。当然其他由HTTP Header引入websocket通讯的攻击也都存在,跟之前介绍过很多篇的HTTP相关的攻击一样。

  • Injection

也是本篇的主题,也是在Websocket中最常发生的漏洞,通常是通过窜改Websocket message中的内容来攻击。
例如某个通讯软件,使用Websocket进行通讯,当一个用户A对另一个用户B发送消息时,发送以下Websocket message:
"msg": "安安"
而用户接受到讯息时,会在聊天视窗中收到
<div role="none" class="test" dir="auto">安安</div>
若是这个通讯软件没有对使用者input进行检查和处理的话,可以透过插入一些Javascript的程序码来进行XSS攻击:
{"msg": "</div><img src=1 onerror='alert("XSS")'>"}

当然,其他像是SQL Injection、RFI等等或是之前介绍过的攻击手法,也都可以用在测试Websocket安全性上。

Case Study

在Websocket API中的DocID进行SQL Injection,
Github也是此漏洞的受害者之一。参考连结


<<:  2.4.13 Design System - Loading Indicator

>>:  Day 21 民生公共物联网资料应用竞赛 线稿转精稿

Day7 - 什麽是Snapshot及如何使用

今天要讲的是snapshot函数,顾名思义,snapshot函数能让我们收取程序执行当下的商品资料,...

[DAY 18] 阿豪牛车庒冰糖猪脚

阿豪牛车庒冰糖猪脚 地点:台南市新营区公园路一段218号 时间:17:00~21:00 在南部有些店...

javascript(DOM)(DAY19)

在上一篇文章中说明了javascript的DOM和event是什麽,而这篇文章会介绍如何利用上一篇所...

[用 Python 解 LeetCode] (001) 27. Remove Element

题干懒人包 输入一个数组及一个数,最後输出一个数值代表非重复数值的数量,然後以下几点要注意: 只能修...

Day19 - Ruby 杂凑处理入门

GitHub 网址:https://github.com/ Heroku 网址:https://w...