<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) no github.
Conexões WebSocket são iniciadas sobre **HTTP** e são tipicamente **de longa duração**. Mensagens podem ser enviadas em **qualquer direção a qualquer momento** e não são de natureza transacional. A conexão normalmente permanece aberta e ociosa até que o cliente ou o servidor esteja pronto para enviar uma mensagem.\
WebSockets são particularmente úteis em situações onde **baixa latência ou mensagens iniciadas pelo servidor** são necessárias, como feeds em tempo real de dados financeiros.
(Aqui você encontrará um resumo, mas um **guia mais detalhado sobre como uma conexão WebSocket** é criada pode ser encontrado [**aqui**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc)).\
Conexões WebSocket são normalmente criadas usando JavaScript do lado do cliente como o seguinte:
O protocolo **`wss`** estabelece um WebSocket sobre uma conexão **TLS** criptografada, enquanto o protocolo **`ws`** utiliza uma conexão **não criptografada**.
Para estabelecer a conexão, o navegador e o servidor realizam um aperto de mão WebSocket sobre HTTP. O navegador emite uma solicitação de aperto de mão WebSocket como a seguinte:
* Os cabeçalhos **`Connection`** e **`Upgrade`** na solicitação e na resposta **indicam** que se trata de um **handshake WebSocket**.
* O cabeçalho de solicitação **`Sec-WebSocket-Version`** especifica a **versão do protocolo WebSocket** que o cliente deseja usar. Normalmente é `13`.
* O cabeçalho de solicitação **`Sec-WebSocket-Key`** contém um valor aleatório codificado em Base64, que deve ser gerado aleatoriamente em cada solicitação de handshake.
* O cabeçalho de resposta **`Sec-WebSocket-Accept`** contém um hash do valor submetido no cabeçalho de solicitação `Sec-WebSocket-Key`, concatenado com uma string específica definida na especificação do protocolo. Isso é feito para prevenir respostas enganosas resultantes de servidores mal configurados ou proxies de cache.
O cabeçalho **`Sec-WebSocket-Key`** contém um **valor aleatório** para prevenir erros de proxies de cache, e **não é utilizado para fins de autenticação ou gerenciamento de sessão** (_Não é um token CSRF_).
Se você descobrir que clientes estão conectados a um **websocket HTTP** da sua rede local atual, você poderia tentar um [Ataque de ARP Spoofing](../generic-methodologies-and-resources/pentesting-network/#arp-spoofing) para realizar um ataque MitM entre o cliente e o servidor.\
Uma vez que o cliente está tentando se conectar, você pode então usar:
Você pode usar a **ferramenta** [**https://github.com/PalindromeLabs/STEWS**](https://github.com/PalindromeLabs/STEWS) **para descobrir, identificar e procurar por vulnerabilidades conhecidas** em websockets de forma automática.
* **Burp Suite** suporta comunicação MitM de websockets de maneira muito semelhante à que faz para comunicação HTTP regular.
* A extensão [**socketsleuth**](https://github.com/snyk/socketsleuth) do **Burp Suite** permitirá que você gerencie melhor as comunicações de Websocket no Burp, obtendo o **histórico**, configurando **regras de interceptação**, usando regras de **correspondência e substituição**, utilizando **Intruder** e **AutoRepeater.**
* [**WSSiP**](https://github.com/nccgroup/wssip): Abreviação de "**WebSocket/Socket.io Proxy**", esta ferramenta, escrita em Node.js, fornece uma interface para **capturar, interceptar, enviar mensagens personalizadas** e visualizar todas as comunicações WebSocket e Socket.IO entre o cliente e o servidor.
* [**wsrepl**](https://github.com/doyensec/wsrepl) é um **REPL interativo de websocket** projetado especificamente para pentesting. Ele fornece uma interface para observar **mensagens websocket recebidas e enviar novas**, com uma estrutura fácil de usar para **automatizar** essa comunicação.
* [**https://websocketking.com/**](https://websocketking.com/) é um **site para se comunicar** com outros sites usando **websockets**.
* [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) entre outros tipos de comunicações/protocolos, fornece um **site para se comunicar** com outros sites usando **websockets**.
Em [**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) você tem um código para lançar um site usando websockets e em [**este post**](https://security.humanativaspa.it/extending-burp-suite-for-fun-and-profit-the-montoya-way-part-3/) você pode encontrar uma explicação.
Ocorre quando a **solicitação de aperto de mão WebSocket** depende exclusivamente de **cookies HTTP** para o gerenciamento de sessão e **não contém tokens CSRF** ou outros valores imprevisíveis.\
Um atacante pode criar uma **página web maliciosa** em seu próprio domínio que **estabelece uma conexão WebSocket entre sites** com a aplicação vulnerável. A aplicação tratará a conexão no **contexto da sessão do usuário vítima** com a aplicação.
Observe que ao **estabelecer** uma conexão **websocket**, o **cookie** é **enviado** para o servidor. O **servidor** pode estar usando-o para **relacionar** cada **usuário específico** com sua **sessão websocket com base no cookie enviado**.
Então, se por **exemplo** o **servidor websocket****enviar de volta o histórico da conversa** de um usuário se uma mensagem com "**PRONTO**" for enviada, então um **XSS simples** estabelecendo a conexão (o **cookie** será **enviado automaticamente** para autorizar o usuário vítima) **enviando** "**PRONTO**" poderá **recuperar** o histórico da **conversa**.
Neste post do blog [https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/) o atacante conseguiu **executar Javascript arbitrário em um subdomínio** do domínio onde a comunicação via websocket estava ocorrendo. Como era um **subdomínio**, o **cookie** estava sendo **enviado**, e porque o **Websocket não verificava a Origem corretamente**, foi possível se comunicar com ele e **roubar tokens dele**.
Copie a aplicação web que você deseja se passar (os arquivos .html por exemplo) e dentro do script onde a comunicação via websocket está ocorrendo, adicione este código:
Agora faça o download do arquivo `wsHook.js` de [https://github.com/skepticfx/wshook](https://github.com/skepticfx/wshook) e **salve-o dentro da pasta com os arquivos web**.\
Expondo a aplicação web e fazendo um usuário se conectar a ela, você será capaz de roubar as mensagens enviadas e recebidas via websocket:
Como os Web Sockets são um mecanismo para **enviar dados para o lado do servidor e do cliente**, dependendo de como o servidor e o cliente manipulam as informações, **Web Sockets podem ser usados para explorar várias outras vulnerabilidades como XSS, SQLi ou qualquer outra vuln comum da web usando entrada de um usuário de um websocket.**
Esta vulnerabilidade poderia permitir que você **burlasse as restrições de proxies reversos** fazendo-os acreditar que uma **comunicação websocket foi estabelecida** (mesmo que não seja verdade). Isso poderia permitir que um atacante **acessasse endpoints ocultos**. Para mais informações, consulte a seguinte página:
<summary><strong>Aprenda AWS hacking do zero ao herói com</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**merchandising oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas dicas de hacking enviando PRs para os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).