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

# Elusión de la autenticación mediante oráculo de cifrado

### Evasión de autenticación mediante un oráculo de cifrado

**Descripción del laboratorio**

Este laboratorio tiene un fallo lógico que expone un \*\*oráculo de cifrado del lado del servidor\*\*. Aprovechando esta debilidad, es posible forjar un valor cifrado válido para eludir la autenticación, acceder al panel de administración y eliminar usuario **carlos**.

Identificador proporcionado:

* Usuario: `wiener`
* Contraseña: `peter`

**Observación inicial**

En la página de inicio de sesión, la **Mantener la sesión iniciada** opción está disponible.

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

Cuando se usa, se genera una cookie cifrada en **Base64** y se almacena del lado del cliente.

<figure><img src="/files/9326f35997d2fd5311d218658e4da87c796c5782" alt=""><figcaption></figcaption></figure>

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

# El valor decodificado es texto cifrado binario, no texto legible.
```

### Identificación del oráculo de cifrado

Cuando se envía un comentario válido, no se observa ninguna respuesta específica.

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

Sin embargo, si un comentario provoca un error de la aplicación (p. ej., una dirección de correo electrónico no válida), el servidor:

* devuelve un mensaje de error mostrado en la pantalla;

{% code overflow="wrap" %}

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

{% endcode %}

* genera una nueva cookie `notificación`\*\*, cifrada.

El contenido mostrado es, por ejemplo:

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

Esto muestra que:

* el servidor \*\*descifra el contenido de la `notificación` cookie;

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

Por lo tanto, el servidor actúa como un **oráculo de cifrado y descifrado**.

* el texto descifrado se **reinyecta en la respuesta HTML**.

<figure><img src="/files/80132c123fb1b68e2c8a7604637804c832e00700" alt=""><figcaption></figcaption></figure>

### Correlación con la cookie

Inyectando el valor cifrado de la cookie \*\*

El formato observado es:

<figure><img src="/files/7631a483432ddf5cc7cbe3d2f72fafd6d5b99ccb" alt=""><figcaption></figcaption></figure>

Esto corresponde claramente a:

* un nombre de usuario;
* una marca de tiempo.

#### Falsificación de una identidad de administrador

El objetivo es hacer que el servidor cifre la siguiente cadena:

```bash
administrator:1766913113564
```

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

Para ello, este valor se inyecta en el campo vulnerable (comentario/correo electrónico no válido), provocando:

* mostrar el mensaje de error que contiene esta cadena;

<figure><img src="/files/0f0df04fead9db1e53d6d9c747c84cbeca055c38" alt=""><figcaption></figcaption></figure>

la generación de una nueva `notificación` cookie, incluyendo el texto inyectado.

{% code overflow="wrap" %}

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

{% endcode %}

### Identificación del algoritmo de cifrado

Al truncar arbitrariamente el valor cifrado, el servidor devuelve el siguiente error

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

`La longitud de entrada debe ser múltiplo de 16 al descifrar con un cifrado con relleno`

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

Esto indica claramente el uso de **AES con relleno**, operando en bloques de **16 bytes**.

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

#### Manipulación de bloques cifrados

El problema encontrado es la presencia de caracteres de relleno no válidos al final del mensaje. / Para remediarlo, la cadena inyectada va precedida de caracteres de relleno para alinear correctamente los bloques:

```
xxxxxxxxxadministrator:1766913113564
```

<figure><img src="/files/16620d54d6e2e8f62644544cbcd62b3a676806c1" alt=""><figcaption></figcaption></figure>

Entonces se genera una nueva cookie cifrada.

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

### Cortar y recomponer la cookie

Al eliminar los primeros **dos bloques cifrados** (correspondientes al relleno), solo los bloques que contienen:

<figure><img src="/files/22f53ac6703a400e0c5d403f0c5a0bd2d232b542" alt=""><figcaption></figcaption></figure>

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

Este valor cifrado final es aceptado por el servidor.

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

<figure><img src="/files/11b2fbf06e4d09aa6ecc7e3ea5320e5f87b69ccd" alt=""><figcaption></figcaption></figure>

#### Eludiendo la autenticación

Pasos finales:

1. Elimina la cookie de sesión existente.
2. Reemplaza el valor de la cookie \*\*
3. Actualiza la página.

<figure><img src="/files/9e8201ff10f9aa37d5328524a0afaeeca8149e21" 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/es/web/business-logic/bypassing-authentication-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.
