iT邦幫忙

2021 iThome 鐵人賽

DAY 22
0
Security

讓Web開發者森77的Hacking Trick系列 第 22

[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也是此漏洞的受害者之一。參考連結


上一篇
[Day21] Remote Code Execution
下一篇
[Day23] Session fixation
系列文
讓Web開發者森77的Hacking Trick30

尚未有邦友留言

立即登入留言