> 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/business-logic/authentication-bypass-via-encryption-oracle.md).

# Обход аутентификации через шифровальную оракула

### Обход аутентификации через оракул шифрования

**Описание лабораторной работы**

В этой лабораторной работе есть логическая уязвимость, раскрывающая \*\*серверный оракул шифрования\*\*. Используя эту слабость, можно подделать корректное зашифрованное значение, чтобы обойти аутентификацию, получить доступ к панели администратора и удалить пользователя **carlos**.

Предоставленный идентификатор:

* Пользователь: `wiener`
* Пароль: `peter`

**Первое наблюдение**

На странице входа, **Оставаться в системе** доступна опция.

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

При использовании создается cookie, зашифрованный в **Base64** и сохраняется на стороне клиента.

<figure><img src="/files/17ab8cd78825ddbe61693eb558d086b7382cc6ff" alt=""><figcaption></figcaption></figure>

```bash
echo '0HE6oMYJL//S1fLwttqR7WMF3EX4KJmvfFRI53qpVnk=' | base64 -d

# Расшифрованное значение — двоичный шифротекст, а не читаемый текст.
```

### Выявление оракула шифрования

При отправке корректного комментария никакого особого ответа не наблюдается.

<figure><img src="/files/1b688059e130b0271f9ddd6794a3308230640fb0" alt=""><figcaption></figcaption></figure>

Однако если комментарий вызывает ошибку приложения (например, неверный адрес электронной почты), сервер:

* возвращает сообщение об ошибке, отображаемое на экране;

{% code overflow="wrap" %}

```bash
csrf=cFMQUjAyzETtEr8TLsoir7V5p4C3m4ZG&postId=4&comment=test&name=test&email=test&website=https://localhost
```

{% endcode %}

* создает новый cookie `уведомление`\*\*, зашифрован.

Отображаемое содержимое, например:

<figure><img src="/files/578d3f2c90dfe1676aa46a59b096754b031bc1dc" alt=""><figcaption></figcaption></figure>

Это показывает, что:

* сервер \*\*расшифровывает содержимое `уведомление` cookie;

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

Таким образом, сервер действует как **оракул шифрования и дешифрования**.

* расшифрованный текст **вставляется обратно в HTML-ответ**.

<figure><img src="/files/365e72aaf09140fbac8ca67bdcc1fba9f850b7ed" alt=""><figcaption></figcaption></figure>

### Связь с cookie

Вставляя зашифрованное значение cookie \*\*

Наблюдаемый формат:

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

Это явно соответствует:

* имени пользователя;
* временной метке.

#### Подделка личности администратора

Цель — заставить сервер зашифровать следующую строку:

```bash
administrator:1766913113564
```

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

Для этого это значение внедряется в уязвимое поле (неверный комментарий/электронная почта), вызывая:

* отображение сообщения об ошибке, содержащего эту строку;

<figure><img src="/files/3840d7ec8dc629343b6e15cb0af9218c28028eec" alt=""><figcaption></figcaption></figure>

генерацию нового `уведомление` cookie, включающего внедренный текст.

{% code overflow="wrap" %}

```bash
Set-Cookie: notification=VQbs3ex4CbvKjTm0LM5wuZa79pnAzKI9MEsa1O0MbX%2fJpfl9baj6yL3ryxh4u6nyiWHVwxP7%2fVDPyft%2f1qAbbQ%3d%3d; HttpOnly
```

{% endcode %}

### Определение алгоритма шифрования

При произвольном усечении зашифрованного значения сервер возвращает следующую ошибку

```bash
PTBLGtTtDG1/yaX5fW2o%2bsi968sYeLup8olh1cMT%2b/1Qz8n7f9agG20%3d
```

`Длина входных данных должна быть кратна 16 при расшифровке с паддинговым шифром`

<figure><img src="/files/3098b4c97a6909854a7fa51e79046d6dc7bfc6e1" alt=""><figcaption></figcaption></figure>

Это явно указывает на использование **AES с заполнением**, работающий в блоках по **16 байт**.

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

#### Манипулирование блоком шифра

Проблема заключается в наличии недопустимых символов заполнения в конце сообщения. / Чтобы исправить это, к внедряемой цепочке добавляются заполняющие символы для правильного выравнивания блоков:

```
xxxxxxxxxadministrator:1766913113564
```

<figure><img src="/files/195c6adcdea67cdbbc87e0b3235edb2493537259" alt=""><figcaption></figcaption></figure>

Затем генерируется новый зашифрованный cookie.

VQbs3ex4CbvKjTm0LM5wuZJqwlVboMZ2IzNuiTfVH6iHj9RZUT59d5kGoS64tVE5wWiEfmp6VbJG%2bb%2fNW5%2bblA%3d%3d

### Обрезка и пересборка cookie

Удалив первые **два зашифрованных блока** (соответствующие заполнению), остаются только блоки, содержащие:

<figure><img src="/files/904afe2afaaf482c15948048f55a2c7753885118" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/43b4dd62649efc2aea284d8f0a2787de5a3052b7" alt=""><figcaption></figcaption></figure>

Это окончательное зашифрованное значение принимается сервером.

```
h4/UWVE%2bfXeZBqEuuLVROcFohH5qelWyRvm/zVufm5Q%3d
```

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

#### Обход аутентификации

Заключительные шаги:

1. Удалите существующий cookie сеанса.
2. Замените значение cookie \*\*
3. Обновите страницу.

<figure><img src="/files/02c9cdabfb67a910a2e8f68bcb49fb2af3748829" 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/business-logic/authentication-bypass-via-encryption-oracle.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.
