* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
As conexões WebSocket são iniciadas por meio do **HTTP** e geralmente são **de longa duração**. As mensagens podem ser enviadas em **ambas as direções a qualquer momento** e não são transacionais por natureza. A conexão normalmente permanecerá aberta e ociosa até que o cliente ou o servidor esteja pronto para enviar uma mensagem.\
Os WebSockets são particularmente úteis em situações em que são necessárias **mensagens de baixa latência ou iniciadas pelo servidor**, como feeds em tempo real de dados financeiros.
(Aqui você encontrará um resumo, mas um **guia mais detalhado sobre como uma conexão de web socket** é criada pode ser encontrado [**aqui**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc)).\
As 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`** usa uma conexão **não criptografada**.
Para estabelecer a conexão, o navegador e o servidor realizam um handshake WebSocket sobre HTTP. O navegador emite uma solicitação de handshake WebSocket como a seguinte:
* Os cabeçalhos **`Connection`** e **`Upgrade`** na solicitação e resposta **indicam** que este é um **handshake WebSocket**.
* O cabeçalho de solicitação **`Sec-WebSocket-Version`** especifica a **versão do protocolo WebSocket** que o cliente deseja usar. Isso é tipicamente `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 enviado no cabeçalho de solicitação `Sec-WebSocket-Key`, concatenado com uma string específica definida na especificação do protocolo. Isso é feito para evitar respostas enganosas resultantes de servidores mal configurados ou proxies de cache.
O cabeçalho **`Sec-WebSocket-Key`** contém um **valor aleatório** para evitar erros de proxies de cache e **não é usado para fins de autenticação ou manipulação de sessão** (_Não é um token CSRF_).
Se você descobrir que os clientes estão conectados a um **websocket HTTP** a partir da sua rede local atual, você pode tentar um [Ataque de Spoofing ARP](../generic-methodologies-and-resources/pentesting-network/#arp-spoofing) para realizar um ataque MitM entre o cliente e o servidor.\
Assim que o cliente tentar se conectar, você pode 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 automaticamente.
Isso ocorre quando a solicitação de **handshake de WebSocket** depende exclusivamente de **cookies HTTP** para o tratamento de sessões e **não contém nenhum token CSRF** ou outros valores imprevisíveis.\
Um atacante pode criar uma **página da web maliciosa** em seu próprio domínio que **estabelece uma conexão de WebSocket entre sites** com o aplicativo vulnerável. O aplicativo lidará com a conexão no **contexto da sessão do usuário vítima** com o aplicativo.
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 de 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 "**READY**" for enviada, então um **simples XSS** estabelecendo a conexão (o **cookie** será **enviado automaticamente** para autorizar o usuário vítima) **enviando** "**READY**" será capaz de **recuperar** o histórico da **conversa**:
Neste post de 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 do websocket estava ocorrendo. Como era um **subdomínio**, o **cookie** estava sendo **enviado**, e como o **Websocket não verificava a Origem corretamente**, era 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 do websocket está ocorrendo, adicione este código:
Agora baixe o arquivo `wsHook.js` em [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, **os Web Sockets podem ser usados para explorar várias outras vulnerabilidades, como XSS, SQLi ou qualquer outra vulnerabilidade comum da web usando a entrada de um usuário de um websocket.**
Essa vulnerabilidade pode permitir que você **bypass as restrições dos proxies reversos** fazendo-os acreditar que uma **comunicação websocket foi estabelecida** (mesmo que não seja verdade). Isso pode permitir que um atacante **acesse endpoints ocultos**. Para mais informações, consulte a seguinte página:
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).