<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
Les connexions WebSocket sont initiées via **HTTP** et sont généralement **à longue durée de vie**. Les messages peuvent être envoyés dans **les deux sens à tout moment** et ne sont pas de nature transactionnelle. La connexion restera normalement ouverte et inactive jusqu'à ce que le client ou le serveur soit prêt à envoyer un message.\
Les WebSockets sont particulièrement utiles dans des situations où des messages à **faible latence ou initiés par le serveur** sont nécessaires, comme des flux en temps réel de données financières.
(Vous trouverez ici un résumé, mais un **guide plus détaillé sur la création d'une connexion WebSocket** est disponible [**ici**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc)).\
Les connexions WebSocket sont normalement créées à l'aide de JavaScript côté client comme suit :
Le protocole **`wss`** établit un WebSocket sur une connexion **TLS** chiffrée, tandis que le protocole **`ws`** utilise une connexion **non chiffrée**.
Pour établir la connexion, le navigateur et le serveur effectuent une poignée de main WebSocket sur HTTP. Le navigateur envoie une demande de poignée de main WebSocket comme suit :
* L'en-tête de requête **`Sec-WebSocket-Version`** spécifie la **version du protocole WebSocket** que le client souhaite utiliser. Il s'agit généralement de `13`.
* L'en-tête de requête **`Sec-WebSocket-Key`** contient une **valeur aléatoire** encodée en Base64, qui devrait être générée aléatoirement dans chaque requête de poignée de main.
* L'en-tête de réponse **`Sec-WebSocket-Accept`** contient un hachage de la valeur soumise dans l'en-tête de requête `Sec-WebSocket-Key`, concaténée avec une chaîne spécifique définie dans la spécification du protocole. Ceci est fait pour prévenir les réponses trompeuses résultant de serveurs mal configurés ou de proxies de mise en cache.
L'en-tête **`Sec-WebSocket-Key`** contient une **valeur aléatoire** pour prévenir les erreurs de proxies de mise en cache, et **n'est pas utilisé à des fins d'authentification ou de gestion de session** (_Ce n'est pas un jeton CSRF_).
Si vous découvrez que des clients sont connectés à un **websocket HTTP** depuis votre réseau local actuel, vous pourriez tenter une [Attaque par Usurpation ARP](../generic-methodologies-and-resources/pentesting-network/#arp-spoofing) pour réaliser une attaque MitM entre le client et le serveur.\
Une fois que le client essaie de se connecter, vous pouvez alors utiliser :
* **Burp Suite** prend en charge la communication MitM websockets de manière très similaire à celle utilisée pour la communication HTTP régulière.
* L'**extension Burp Suite** [**socketsleuth**](https://github.com/snyk/socketsleuth) vous permettra de mieux gérer les communications Websocket dans Burp en obtenant l'**historique**, en définissant des **règles d'interception**, en utilisant des règles de **correspondance et remplacement**, en utilisant **Intruder** et **AutoRepeater**.
* [**WSSiP**](https://github.com/nccgroup/wssip) : Abréviation de "**WebSocket/Socket.io Proxy**", cet outil, écrit en Node.js, fournit une interface utilisateur pour **capturer, intercepter, envoyer des messages personnalisés** et voir toutes les communications WebSocket et Socket.IO entre le client et le serveur.
* [**wsrepl**](https://github.com/doyensec/wsrepl) est un **REPL websocket interactif** conçu spécifiquement pour le pentesting. Il fournit une interface pour observer les **messages websocket entrants et en envoyer de nouveaux**, avec un cadre facile à utiliser pour **automatiser** cette communication.
* [**https://websocketking.com/**](https://websocketking.com/) est un **site web pour communiquer** avec d'autres sites en utilisant des **websockets**.
* [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) parmi d'autres types de communications/protocoles, il fournit un **site web pour communiquer** avec d'autres sites en utilisant des **websockets**.
Dans [**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) vous avez un code pour lancer un site web utilisant des websockets et dans [**ce post**](https://security.humanativaspa.it/extending-burp-suite-for-fun-and-profit-the-montoya-way-part-3/) vous pouvez trouver une explication.
Il survient lorsque la **requête de poignée de main WebSocket** repose uniquement sur des **cookies HTTP** pour la gestion de session et **ne contient aucun jeton CSRF** ou autres valeurs imprévisibles.\
Un attaquant peut créer une **page web malveillante** sur son propre domaine qui **établit une connexion WebSocket inter-sites** avec l'application vulnérable. L'application traitera la connexion dans le **contexte de la session de l'utilisateur victime** avec l'application.
Notez que lors de l'**établissement** d'une connexion **websocket**, le **cookie** est **envoyé** au serveur. Le **serveur** pourrait l'utiliser pour **relier** chaque **utilisateur spécifique** à sa **session websocket basée sur le cookie envoyé**.
Ensuite, si par **exemple** le **serveur websocket****renvoie l'historique de la conversation** d'un utilisateur si un message avec "**READY**" est envoyé, alors un **simple XSS** établissant la connexion (le **cookie** sera **envoyé automatiquement** pour autoriser l'utilisateur victime) **envoyant** "**READY**" pourra **récupérer** l'historique de la **conversation**.
Dans cet article de blog [https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/), l'attaquant a réussi à **exécuter du Javascript arbitraire dans un sous-domaine** du domaine où se déroulait la communication par web socket. Comme il s'agissait d'un **sous-domaine**, le **cookie** était **envoyé**, et parce que le **Websocket ne vérifiait pas correctement l'Origine**, il était possible de communiquer avec lui et **de voler des jetons**.
Copiez l'application web que vous souhaitez usurper (les fichiers .html par exemple) et dans le script où se déroule la communication websocket, ajoutez ce code :
Maintenant, téléchargez le fichier `wsHook.js` depuis [https://github.com/skepticfx/wshook](https://github.com/skepticfx/wshook) et **enregistrez-le dans le dossier contenant les fichiers web**.\
En exposant l'application web et en faisant en sorte qu'un utilisateur s'y connecte, vous pourrez voler les messages envoyés et reçus via websocket :
Les Conditions de course dans les WebSockets sont également possibles, [consultez ces informations pour en savoir plus](race-condition.md#rc-in-websockets).
Comme les Web Sockets sont un mécanisme pour **envoyer des données au serveur et au client**, selon la manière dont le serveur et le client gèrent les informations, **les Web Sockets peuvent être utilisés pour exploiter plusieurs autres vulnérabilités comme XSS, SQLi ou toute autre vulnérabilité web commune en utilisant l'entrée d'un utilisateur à partir d'un websocket.**
Cette vulnérabilité pourrait vous permettre de **contourner les restrictions des reverse proxies** en leur faisant croire qu'une **communication websocket a été établie** (même si ce n'est pas vrai). Cela pourrait permettre à un attaquant d'**accéder à des points de terminaison cachés**. Pour plus d'informations, consultez la page suivante :
<summary><strong>Apprenez le hacking AWS du débutant à l'expert avec</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-moi** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).