> For the complete documentation index, see [llms.txt](https://brias.gitbook.io/brias/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://brias.gitbook.io/brias/dockerlabs/dificultad-facil/pequenas-mentirosas.md).

# Pequeñas-Mentirosas

#### **Despliegue de la Máquina:**

**1. Descarga:**

Accedemos a la web oficial de [DockerLabs](https://dockerlabs.es/), buscamos la máquina **Pequeñas-Mentirosas** y pulsamos en el botón de descarga. Esto nos redirige a un enlace de Mega, desde donde descargamos un archivo comprimido que contiene tanto la imagen de la máquina como el script necesario para su ejecución.

**2. Descompresión:**

Extraemos los archivos del comprimido utilizando `7z`:

```bash
7z x pequenas-mentirosas.zip
```

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

**3. Ejecución:**

Ejecutamos el script de despliegue para levantar la máquina en Docker:

```bash
bash auto_deploy.sh pequenas-mentirosas.tar
```

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

**Resultado:** La máquina se despliega correctamente con la IP `172.17.0.2`.

***

#### **Reconocimiento:**

**1. Verificación de Conectividad:**

Verificamos que la máquina esté activa usando `ping`:

```bash
ping -c 1 172.17.0.2
```

El valor `TTL=64` indica que el sistema operativo es **Linux**.

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

**2. Escaneo de Puertos:**

Realizamos un escaneo de puertos con `nmap` para identificar puertos abiertos:

```bash
nmap -p- -sS --open --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG allPorts
```

**Explicación de los parámetros:**

* `-p-`: Escanea todos los puertos (del 1 al 65535).
* `-sS`: Escaneo SYN (rápido y sigiloso).
* `--open`: Muestra solo puertos abiertos.
* `--min-rate 5000`: Acelera el escaneo enviando al menos 5000 paquetes por segundo.
* `-vvv`: Salida muy detallada.
* `-n`: Evita la resolución DNS.
* `-Pn`: Trata el host como activo (evita el `ping` previo).
* `-oG allPorts`: Guarda los resultados en formato Grepable.

**Resultados:**

* **Puerto 22:** `SSH`.
* **Puerto 80:** `HTTP`.

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

**3. Escaneo Detallado:**

Obtenemos información detallada de los servicios en los puertos abiertos:

```bash
nmap -p22,80 -sCV 172.17.0.2 -oN targeted
```

**Explicación de los parámetros:**

* `-p22,80`: Indica a `nmap` que debe escanear únicamente los puertos **22** y **80**.
* `-sCV`: Detecta qué versiones de servicios están corriendo en los puertos abiertos (`-sV`), y ejecuta una serie de scripts de reconocimiento predefinidos (`-sC`) para obtener más detalles automáticamente.
* `-oN targeted`: Guarda los resultados en un archivo llamado `targeted`, utilizando el formato de salida estándar (igual al que se muestra en la terminal).

**Resultados:**

* **Puerto 22:** OpenSSH 9.2p1.
* **Puerto 80:** Apache httpd 2.4.62.

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

**4. Inspección del Servicio Web:**

Accedemos al servicio web desde el navegador: `http://172.17.0.2/`.

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

**Observación:** La página muestra un posible nombre de usuario (`a`), que podría ser relevante para el acceso SSH.

***

#### **Explotación:**

**1. Fuerza Bruta al Servicio SSH:**

Usamos `hydra` para encontrar la contraseña del usuario `a`:

```bash
hydra -l a -P /usr/share/wordlists/rockyou.txt 172.17.0.2 ssh -t 4
```

**Explicación de los parámetros:**

* `-l a`: Especifica el nombre de usuario.
* `-P /usr/share/wordlists/rockyou.txt`: Usa el diccionario `rockyou.txt` para probar contraseñas.
* `-t 4`: Limita el número de tareas concurrentes a 4 para evitar saturación.

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

Como podemos comprobar, hemos obtenido las credenciales del usuario.

**2. Acceso al Sistema:**

Nos conectamos por SSH con las credenciales obtenidas:

```bash
ssh a@172.17.0.2
```

<figure><img src="/files/2rHa81EP504DlIKMHeZD" alt=""><figcaption></figcaption></figure>

**3. Reconocimiento Interno:**

Listamos los directorios en `/home`:

```bash
ls
```

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

**Resultado:** Existen dos carpetas: `a` (del usuario actual) y `spencer` (posiblemente de otro usuario).

**4. Fuerza Bruta para el Usuario Spencer:**

Repetimos el proceso para el usuario `spencer`:

```bash
hydra -l spencer -P /usr/share/wordlists/rockyou.txt 172.17.0.2 ssh -t 4
```

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

Como podemos comprobar, hemos obtenido las credenciales del usuario.

**5. Acceso al Sistema con el Usuario Spencer:**

Nos conectamos por SSH con las credenciales obtenidas:

```bash
ssh spencer@172.17.0.2
```

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

***

#### **Escalada de Privilegios:**

**1. Verificación de Permisos de Sudo:**

Ejecutamos el comando `sudo -l` para comprobar los privilegios que tenemos con dicho usuario.

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

**Resultado:** El usuario `spencer` puede ejecutar `/usr/bin/python3` como `root` sin proporcionar contraseña:

```bash
(ALL) NOPASSWD: /usr/bin/python3
```

**2. Explotación con Python:**

Consultamos [GTFOBins](https://gtfobins.github.io/gtfobins/python/) para escalar privilegios:

```bash
sudo python3 -c 'import os; os.system("/bin/sh")'
```

**Explicación:**

* `sudo python3`: Ejecuta Python con privilegios de `root`.
* `import os; os.system("/bin/sh")`: Importa el módulo `os` y lanza una shell (`/bin/sh`) con permisos de `root`.

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

**Resultado:** Obtenemos una shell como `root`.
