您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“WebSockets安全漏洞的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“WebSockets安全漏洞的示例分析”這篇文章吧。
WebSockets廣泛用于現代Web應用程序中。它們通過HTTP發起,并通過雙向雙向通信提供長期連接。
WebSocket用于各種目的,包括執行用戶操作和傳輸敏感信息。幾乎與常規HTTP一起出現的任何Web安全漏洞也可能與WebSockets通信有關。
Web瀏覽器和網站之間的大多數通信使用HTTP。使用HTTP,客戶端發送請求,服務器返回響應。通常,響應立即發生,并且事務完成。即使網絡連接保持打開狀態,這也將用于請求和響應的單獨事務。
一些現代網站使用WebSockets。WebSocket連接是通過HTTP發起的,通常是長期存在的。消息可以隨時向任一方向發送,并且本質上不是事務性的。在客戶端或服務器準備發送消息之前,連接通常將保持打開和空閑狀態。
WebSocket在需要低延遲或服務器啟動消息的情況下(例如財務數據的實時提要)特別有用。
WebSocket連接通常是使用客戶端JavaScript創建的,如下所示:
var ws = new WebSocket("wss://normal-website.com/chat");
注意
該
wss
協議建立在一個加密的TLS連接的WebSocket,而ws
協議使用未加密的連接。
為了建立連接,瀏覽器和服務器通過HTTP執行WebSocket握手。瀏覽器發出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消息。
注意
WebSocket握手消息的幾個功能值得注意:
請求和響應中 的
Connection
和Upgrade
標頭表示這是WebSocket握手。請求頭的
Sec-WebSocket-Version
指定WebSocket協議版本的客戶端希望使用。通常是這樣13
。請求頭的
Sec-WebSocket-Key
包含Base64編碼的隨機值,這應該在每個握手請求是隨機產生的。響應頭的
Sec-WebSocket-Accept
包含在提交的值的散列Sec-WebSocket-Key
請求頭,具有在協議規范中定義的特定的字符串串聯。這樣做是為了防止由于服務器配置錯誤或代 理緩存錯誤而引起的誤導響應。
建立WebSocket連接后,客戶端或服務器可以在任一方向上異步發送消息。
可以使用客戶端JavaScript從瀏覽器發送一條簡單消息,如下所示:
ws.send("Peter Wiener");
原則上,WebSocket消息可以包含任何內容或數據格式。在現代應用程序中,JSON通常用于在WebSocket消息中發送結構化數據。
例如,使用WebSockets的聊天機器人應用程序可能會發送如下消息:
{"user":"Hal Pline","content":"I wanted to be a Playstation growing up, not a device to answer your inane questions"}
原則上,實際上與WebSockets有關的任何Web安全漏洞都可能出現:
傳輸到服務器的用戶提供的輸入可能會以不安全的方式進行處理,從而導致漏洞,例如SQL注入或XML外部實體注入。
通過WebSockets達到的某些盲目漏洞可能僅使用帶外(OAST)技術才能檢測到。
如果攻擊者控制的數據通過WebSockets傳輸到其他應用程序用戶,則可能導致XSS或其他客戶端漏洞。
可以通過篡改WebSocket消息的內容來發現和利用影響WebSocket的大多數基于輸入的漏洞。
例如,假設聊天應用程序使用WebSockets在瀏覽器和服務器之間發送聊天消息。用戶鍵入聊天消息時,將向服務器發送如下所示的WebSocket消息:
{"message":"Hello Carlos"}
消息的內容(再次通過WebSockets)傳輸到另一個聊天用戶,并在用戶的瀏覽器中呈現,如下所示:
<td>Hello Carlos</td>
在這種情況下,只要沒有其他輸入處理或防御措施在起作用,攻擊者就可以通過提交以下WebSocket消息來執行概念驗證XSS攻擊:
{"message":"<img src=1 onerror='alert(1)'>"}
靶場url:https://portswigger.net/web-security/websockets/lab-manipulating-messages-to-exploit-vulnerabilities
復現詳情:
首頁存在實時聊天功能,對話框直接插入xss,抓包修改:
修改為:
可以看到payload已成功插入:
成功彈窗:
只能通過操縱WebSocket握手來發現和利用某些WebSocket漏洞。這些漏洞往往涉及設計缺陷,例如:
在HTTP標頭中放錯位置的信任以執行安全性決策,例如X-Forwarded-For
標頭。
會話處理機制存在缺陷,因為處理WebSocket消息的會話上下文通常由握手消息的會話上下文確定。
應用程序使用的自定義HTTP標頭引入的攻擊面。
靶機url:https://portswigger.net/web-security/websockets/lab-manipulating-handshake-to-exploit-vulnerabilities
復現詳情:
同理,直接在實時聊天的對話框中插入xss,觀察到攻擊已被阻止,并且WebSocket連接已終止。重新加載后,觀察到連接嘗試失敗,因為IP地址已被禁止。
重新請求并抓包,修改請求頭,添加xff:
可以重新連接WebSocket,并嘗試有效的xss:
成功彈窗:
當攻擊者從攻擊者控制的網站建立跨域WebSocket連接時,會出現一些WebSockets安全漏洞。這稱為跨站點WebSocket劫持攻擊,它涉及利用WebSocket握手上的跨站點請求偽造(CSRF)漏洞。攻擊通常會產生嚴重的影響,使攻擊者可以代表受害者用戶執行特權操作或捕獲受害者用戶可以訪問的敏感數據。
跨站點WebSocket劫持(也稱為跨域WebSocket劫持)涉及WebSocket握手上的跨站點請求偽造(CSRF)漏洞。當WebSocket握手請求僅依靠HTTP cookie進行會話處理并且不包含任何CSRF令牌或其他不可預測的值時,就會出現這種情況。
攻擊者可以在自己的域上創建惡意網頁,從而建立與易受攻擊的應用程序的跨站點WebSocket連接。該應用程序將在受害用戶與該應用程序的會話的上下文中處理連接。
然后,攻擊者的頁面可以通過連接向服務器發送任意消息,并讀取從服務器接收回的消息內容。這意味著,與常規CSRF不同,攻擊者可以與受感染的應用程序進行雙向交互。
成功的跨站點WebSocket劫持攻擊通常會使攻擊者能夠:
執行偽裝成受害者用戶的未授權操作。與常規CSRF一樣,攻擊者可以將任意消息發送到服務器端應用程序。如果應用程序使用客戶端生成的WebSocket消息執行任何敏感操作,則攻擊者可以跨域生成合適的消息并觸發這些操作。
檢索用戶可以訪問的敏感數據。與常規CSRF不同,跨站點WebSocket劫持使攻擊者可以通過劫持的WebSocket與易受攻擊的應用程序進行雙向交互。如果應用程序使用服務器生成的WebSocket消息將任何敏感數據返回給用戶,則攻擊者可以攔截這些消息并捕獲受害用戶的數據。
由于跨站點WebSocket劫持攻擊本質上是WebSocket握手上的CSRF漏洞,因此執行攻擊的第一步是檢查應用程序執行的WebSocket握手,并確定是否針對CSRF進行了保護。
就CSRF攻擊的正常情況而言,您通常需要查找僅依賴HTTP cookie進行會話處理并且在請求參數中不使用任何令牌或其他不可預測值的握手消息。
例如,以下WebSocket握手請求可能容易受到CSRF的攻擊,因為唯一的會話令牌是在cookie中傳輸的:
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
注意
該
Sec-WebSocket-Key
頭包含一個隨機值,以防止緩存代理的錯誤,而不是用于身份驗證或會話處理的目的。
如果WebSocket握手請求容易受到CSRF的攻擊,則攻擊者的網頁可以執行跨站點請求以在易受攻擊的站點上打開WebSocket。攻擊的下一步將完全取決于應用程序的邏輯以及它如何使用WebSockets。攻擊可能涉及:
發送WebSocket消息以代表受害者用戶執行未經授權的操作。
發送WebSocket消息以檢索敏感數據。
有時,只是等待包含敏感數據的傳入消息到達。
為了將WebSocket引起的安全漏洞的風險降至最低,請使用以下準則:
使用wss://
協議(基于TLS的WebSockets)。
硬編碼WebSockets終結點的URL,當然不要將用戶可控制的數據合并到此URL中。
保護WebSocket握手消息免受CSRF的攻擊,以避免跨站點WebSocket劫持漏洞。
雙向將通過WebSocket接收的數據視為不可信。在服務器和客戶端上安全地處理數據,以防止基于輸入的漏洞,例如SQL注入和跨站點腳本。
以上是“WebSockets安全漏洞的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。