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

# Contorno de Autenticação via Oracle de Criptografia

### Contorno de Autenticação via Oracle de Criptografia

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

Este laboratório tem uma falha lógica que expõe um \*\*oracle de criptografia no lado do servidor\*\*. Ao explorar essa fraqueza, é possível forjar um valor criptografado válido para contornar a autenticação, acessar o painel de administração e excluir o usuário **carlos**.

Identificador fornecido:

* Usuário: `wiener`
* Senha: `peter`

**Observação inicial**

Na página de login, a **Manter-me conectado** opção está disponível.

<figure><img src="/files/68e77e2cc7c35e8a93d179809559f71b799b0157" alt=""><figcaption></figcaption></figure>

Quando usada, um cookie criptografado em **Base64** é gerado e armazenado no lado do cliente.

<figure><img src="/files/5b1e9721d5e01a3b2a09697b6264883a078f84e2" alt=""><figcaption></figcaption></figure>

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

# O valor decodificado é um texto cifrado binário, não um texto legível.
```

### Identificação do Oracle de Criptografia

Quando um comentário válido é enviado, nenhuma resposta específica é observada.

<figure><img src="/files/5b04b180ce01290e45884eb7bd0b087bed1a9783" alt=""><figcaption></figcaption></figure>

No entanto, se um comentário causar um erro na aplicação (por exemplo, um endereço de e-mail inválido), o servidor:

* retorna uma mensagem de erro exibida na tela;

{% code overflow="wrap" %}

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

{% endcode %}

* gera um novo cookie `notificação`\*\*, criptografado.

O conteúdo exibido é, por exemplo:

<figure><img src="/files/158cfe0e61ae6903ac8d7c1f0e5d821328375400" alt=""><figcaption></figcaption></figure>

Isso mostra que:

* o servidor \*\*descriptografa o conteúdo do `notificação` cookie;

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

O servidor, portanto, atua como um **oracle de criptografia e descriptografia**.

* o texto decifrado é **reinjetado na resposta HTML**.

<figure><img src="/files/611254b7845f0dea2e350b43ecad5af5b6557166" alt=""><figcaption></figcaption></figure>

### Correlação com o Cookie

Ao injetar o valor criptografado do cookie \*\*

O formato observado é:

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

Isso claramente corresponde a:

* um nome de usuário;
* um carimbo de data e hora.

#### Falsificação de uma Identidade de Administrador

O objetivo é fazer com que o servidor criptografe a seguinte string:

```bash
administrator:1766913113564
```

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

Para isso, esse valor é injetado no campo vulnerável (comentário/e-mail inválido), causando:

* a exibição da mensagem de erro contendo essa string;

<figure><img src="/files/92f8ae7eb69dca17902a277e30ddfc7fe3247db9" alt=""><figcaption></figcaption></figure>

a geração de um novo `notificação` cookie, incluindo o texto injetado.

{% code overflow="wrap" %}

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

{% endcode %}

### Identificação do Algoritmo de Criptografia

Ao truncar arbitrariamente o valor criptografado, o servidor retorna o seguinte erro

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

`O comprimento da entrada deve ser múltiplo de 16 ao descriptografar com cifra preenchida`

<figure><img src="/files/139617adbc0550decad9c626bc5b4b149dc44773" alt=""><figcaption></figcaption></figure>

Isso indica claramente o uso de **AES com preenchimento**, operando em blocos de **16 bytes**.

<figure><img src="/files/69c5fd2c93855b82bd1151e59bd571daa87ee0e4" alt=""><figcaption></figcaption></figure>

#### Manipulação de Blocos de Cifra

O problema encontrado é a presença de caracteres de preenchimento inválidos no final da mensagem. / Para resolver isso, a cadeia injetada é precedida por caracteres de preenchimento para alinhar corretamente os blocos:

```
xxxxxxxxxadministrator:1766913113564
```

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

Em seguida, um novo cookie criptografado é gerado.

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

### Cortando e Recompondo o Cookie

Ao excluir os primeiros **dois blocos criptografados** (correspondentes ao preenchimento), apenas os blocos contendo:

<figure><img src="/files/806bf73da042a4edfd1de3bc3c758e9248946346" alt=""><figcaption></figcaption></figure>

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

Esse valor criptografado final é aceito pelo servidor.

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

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

#### Contornando a Autenticação

Etapas finais:

1. Exclua o cookie de sessão existente.
2. Substitua o valor do cookie \*\*
3. Atualize a página.

<figure><img src="/files/7092fdb06a80fd4ac8ca0ff1bc3801c11ee1d374" 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/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.
