Máquina Mailforge (Vulnyx)

Comenzamos con averiguar la dirección IP de la Máquina Victima, para ello primeramente utilizaremos la herramienta netdiscover, para ello ejecutamos el siguiente comando:

$ netdiscover -i eth1 -r 10.0.2.0/24

  • Kali (Máquina Atacante): 10.0.2.4
  • Máquina Victima: 10.0.2.84
Comprobamos si tenemos conexión con la Máquina Victima, para ello ejecutamos el siguiente comando:

$ ping -c 1 10.0.2.84


Como se puede comprobar por el TTL nos enfrentamos a una Máquina Linux.

A continuación, realizamos con la herramienta nmap un reconocimiento de los servicios, para ello ejecutamos el siguiente comando:

$ nmap -Pn -p- 10.0.2.84 -sVC


Como podemos comprobar la Máquina Victima tiene abiertos los puertos 22, 80 y 5000. Tambien nos muestra el dominio mailforge.nyx, lo agregamos al archivo /etc/hosts, para ello ejecutamos el siguiente comando:

$ nano /etc/host


Comprobamos que es lo que corre en el dominio.


Comprobamos que es lo que corre en el puerto 5000.


Encontramos una aplicación para subir y previsualizar archivos .eml, presentando un riesgo potencial de Server-Side Template Injection (SSTI). Por lo tanto, probamos esta vulnerabilidad creandonos un archivo .eml con el siguiente payload en el nombre del archivo:

$ touch {{7*7}}.eml

Lo subimos y lo previsualizamos en la opción de Preview.


Observamos en el título de la pestaña del navegador se muestra el resultado de la operación matemática, confirmando así dicha vulnerabilidad.

A continuación, creamos otro archivo .eml con un payload mas avanzado en el campo Subject para identificar el motor de plantillas que usa, para ello ejecutamos el siguiente comando:

$ nano correo.eml


Lo subimos y lo previsualizamos.


Tras varias pruebas comprobamos que se trata del motor de plantillas Flask/Jinja2.

A continuación, modificamos el archivo para utilizar el siguiente payload el cual se aprovecha del contexto interno de Flask/Jinja2 para acceder al módulo os.


Lo subimos y lo previsualizamos.


Con esto confirmamos la ejecución de comandos vía SSTI.

Volvermos a modificar el archivo para utilizar el siguiente payload con la siguiente reverse shell: 


En nuestra terminal de nuestra Máquina Atacante y con la ayuda de la herramienta de netcat(nc) nos ponemos a la escucha por el puerto 443 por donde vamos a recibir la conexión, para ello ejecutamos el siguiente comando:

$ nc -lvnp 443

Lo subimos y lo previsualizamos.


Y obtenemos una shell como mailforge.

A continuación, hacemos un tratamiento de la TTY para obtener una shell interactiva y así evitar problemas, para ello ejecutamos los siguientes comandos.

$ python -c 'import pty; pty.spawn("/bin/bash")'
   Ctrl + Z
$ stty raw -echo;fg
$ reset xterm
$ export TERM=xterm

Enumeramos los permisos sudo, para ello ejecutamos el siguiente comando:

$ sudo -l


Nos encontramos con el script cleaner.sh que lo podemos ejecutar como el usuario root, revisamos los permisos de este script para ello ejecutamos el siguiente comando:

$ ls -la /usr/local/bin/cleaner.sh


El archivo es completamente escribible por cualquier usuario, por lo tanto, lo modificamos para ello ejecutamos el siguiente comando:

$ nano /usr/local/bin/cleaner.sh


Lo ejecutamos de la siguiente manera:

$ sudo -u root /usr/local/bin/cleaner.sh


¡¡¡Ya somos root!!!.

También pudiendo leer las flags de user y root.