過HTTP啟動,並提供雙向非同步通訊的長期連線。它通常設計於網頁和伺服器之間,但也可以用於任何客戶端和伺服器之間的應用,例如在線遊戲、聊天應用或股票交易平台。
利用篡改WebSocket訊息的內容,來實現相關漏洞。
例如,假設聊天應用程式使用WebSockets在瀏覽器和伺服器之間傳送聊天訊息。
當使用者輸入聊天訊息時,會向伺服器傳送以下的WebSocket訊息:
{"message":"Hello"}
訊息內容(再次透過WebSockets)傳輸給另一個聊天使用者,並在使用者的瀏覽器中呈現如下:
<td>Hello</td>
在這種情況下,如果沒有其他輸入處理或防禦,攻擊者可以透過提交以下WebSocket訊息來執行概念實現XSS攻擊:
{"message":"<img src=1 onerror='alert(1)'>"}
某些WebSockets漏洞只能透過操縱WebSocket握手來發現和利用。 這些漏洞往往涉及設計缺陷,例如:
HTTP Header的錯誤信任。
X-Forwarded-For header 來獲取使用者的真實 IP 地址,但攻擊者可以輕易地篡改該 header 以進行欺騙。WebSocket訊息的會話上下文通常由三次交握的會話上下文決定。
WebSocket 伺服器只依賴第一次交握時的 cookie 來進行身份驗證,而沒有對後續的 WebSocket 消息進行重新驗證,那麼一旦交握完成,攻擊者可能就能夠利用那個會話來發送任意的 WebSocket 消息。