<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT**](https://opensea.io/collection/the-peass-family) esclusivi
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo Telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai repository** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github.
Le connessioni WebSocket vengono stabilite tramite un iniziale **handshake HTTP** e sono progettate per essere **a lunga durata**, consentendo la messaggistica bidirezionale in qualsiasi momento senza la necessità di un sistema transazionale. Ciò rende i WebSockets particolarmente vantaggiosi per le applicazioni che richiedono **bassa latenza o comunicazione iniziativa dal server**, come i flussi di dati finanziari in tempo reale.
Una spiegazione dettagliata sull'instaurazione delle connessioni WebSocket può essere consultata [**qui**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc). In sintesi, le connessioni WebSocket vengono di solito avviate tramite JavaScript lato client come mostrato di seguito:
Durante l'instaurazione della connessione, viene eseguito un handshake tra il browser e il server tramite HTTP. Il processo di handshake prevede che il browser invii una richiesta e il server risponda, come illustrato negli esempi seguenti:
- Gli header `Connection` e `Upgrade` segnalano l'inizio di una WebSocket handshake.
- L'header `Sec-WebSocket-Version` indica la versione desiderata del protocollo WebSocket, di solito `13`.
- Un valore casuale codificato in Base64 viene inviato nell'header `Sec-WebSocket-Key`, garantendo che ogni handshake sia unico, il che aiuta a prevenire problemi con i proxy di caching. Questo valore non serve per l'autenticazione, ma per confermare che la risposta non sia generata da un server o una cache configurati in modo errato.
- L'header `Sec-WebSocket-Accept` nella risposta del server è un hash del `Sec-WebSocket-Key`, che verifica l'intenzione del server di aprire una connessione WebSocket.
Queste caratteristiche garantiscono che il processo di handshake sia sicuro e affidabile, aprendo la strada a una comunicazione in tempo reale efficiente.
Se scopri che i client sono connessi a un **websocket HTTP** dalla tua rete locale attuale, puoi provare un [Attacco di Spoofing ARP](../generic-methodologies-and-resources/pentesting-network/#arp-spoofing) per eseguire un attacco MitM tra il client e il server.\
Una volta che il client sta cercando di connettersi a te, puoi utilizzare:
Puoi utilizzare lo **strumento** [**https://github.com/PalindromeLabs/STEWS**](https://github.com/PalindromeLabs/STEWS) **per scoprire, identificare e cercare automaticamente****vulnerabilità** note nei websockets.
* **Burp Suite** supporta la comunicazione MitM dei websockets in modo molto simile a quanto fa per la comunicazione HTTP regolare.
* L'estensione [**socketsleuth**](https://github.com/snyk/socketsleuth) di Burp Suite ti permetterà di gestire meglio le comunicazioni Websocket in Burp, ottenendo la **cronologia**, impostando **regole di intercettazione**, utilizzando regole di **match e replace**, utilizzando **Intruder** e **AutoRepeater**.
* [**WSSiP**](https://github.com/nccgroup/wssip)**:** Acronimo di "**WebSocket/Socket.io Proxy**", questo strumento, scritto in Node.js, fornisce un'interfaccia utente per **catturare, intercettare, inviare messaggi personalizzati** e visualizzare tutte le comunicazioni WebSocket e Socket.IO tra il client e il server.
* [**wsrepl**](https://github.com/doyensec/wsrepl) è un **REPL interattivo per websocket** progettato specificamente per il penetration testing. Fornisce un'interfaccia per osservare **i messaggi websocket in arrivo e inviarne di nuovi**, con un framework facile da usare per **automatizzare** questa comunicazione.
* [**https://websocketking.com/**](https://websocketking.com/) è un **sito web per comunicare** con altri siti web utilizzando **websockets**.
* [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) tra gli altri tipi di comunicazioni/protocolli, fornisce un **sito web per comunicare** con altri siti web utilizzando **websockets**.
In [**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) trovi un codice per avviare un sito web utilizzando i websockets e in [**questo post**](https://security.humanativaspa.it/extending-burp-suite-for-fun-and-profit-the-montoya-way-part-3/) puoi trovare una spiegazione.
**Cross-site WebSocket hijacking**, noto anche come **cross-origin WebSocket hijacking**, viene identificato come un caso specifico di **[Cross-Site Request Forgery (CSRF)](csrf-cross-site-request-forgery.md)** che colpisce gli handshake dei WebSocket. Questa vulnerabilità si verifica quando gli handshake dei WebSocket vengono autenticati esclusivamente tramite **cookie HTTP** senza **token CSRF** o misure di sicurezza simili.
Gli attaccanti possono sfruttare ciò ospitando una **pagina web malevola** che avvia una connessione WebSocket cross-site verso un'applicazione vulnerabile. Di conseguenza, questa connessione viene considerata parte della sessione della vittima con l'applicazione, sfruttando la mancanza di protezione CSRF nel meccanismo di gestione della sessione.
Si noti che quando si **stabilisce** una connessione **websocket**, il **cookie** viene **inviato** al server. Il **server** potrebbe utilizzarlo per **associare** ogni **utente specifico** alla sua **sessione websocket basata sul cookie inviato**.
Quindi, ad esempio, se il **server websocket** invia indietro la cronologia della conversazione di un utente se viene inviato un messaggio con "**READY**", allora un **semplice XSS** che stabilisce la connessione (il **cookie** verrà **inviato automaticamente** per autorizzare l'utente vittima) **invio** di "**READY**" sarà in grado di **recuperare** la cronologia della **conversazione**.
In questo post del blog [https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/), l'attaccante è riuscito a **eseguire codice Javascript arbitrario in un sottodominio** del dominio in cui avveniva la comunicazione tramite websocket. Poiché si trattava di un **sottodominio**, il **cookie** veniva **inviato**, e poiché il **Websocket non controllava correttamente l'origine**, era possibile comunicare con esso e **rubare token da esso**.
Copia l'applicazione web che desideri impersonare (ad esempio i file .html) e all'interno dello script in cui avviene la comunicazione tramite websocket, aggiungi questo codice:
Ora scarica il file `wsHook.js` da [https://github.com/skepticfx/wshook](https://github.com/skepticfx/wshook) e **salvalo all'interno della cartella con i file web**.\
Esponendo l'applicazione web e facendo connettere un utente ad essa, sarai in grado di rubare i messaggi inviati e ricevuti tramite websocket:
Poiché i WebSockets sono un meccanismo per **inviare dati al lato server e al lato client**, a seconda di come il server e il client gestiscono le informazioni, **i WebSockets possono essere utilizzati per sfruttare diverse altre vulnerabilità come XSS, SQLi o qualsiasi altra vulnerabilità web comune utilizzando l'input di un utente proveniente da un WebSocket**.
Questa vulnerabilità potrebbe consentirti di **eludere le restrizioni dei proxy inversi** facendo loro credere che sia stata stabilita una **comunicazione WebSocket** (anche se non è vero). Ciò potrebbe consentire a un attaccante di **accedere a endpoint nascosti**. Per ulteriori informazioni, consulta la seguente pagina:
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF**, controlla i [**PACCHETTI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo Telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai repository GitHub di** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).