Mr Robot CTF

¡Hola!

En este writeup vamos a resolver la máquina Mr Robot CTF de TryHackMe, una máquina de nivel de dificultad medio. La podéis encontrar en el siguiente enlace:

Reconocimiento

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

Y para empezar lanzamos nmap para detectar puertos abiertos y la versión y servicios que corren sobre ellos. Además, vamos a exportar la captura de nmap para poder consultarla más adelante si hiciera falta:

Nos encontramos con los siguientes resultados:

Tenemos http y https activos en el servidor, si echamos un vistazo a ambas versiones de la web nos encontramos con el mismo contenido. Se trata de una web en la que podemos interactuar con un menú pero que si echamos un vistazo a su código fuente se trata de puro código javascript que reproduce diferentes contenidos multimedia según la opción que elijamos:

Lanzamos el script http-enum de nmap para intentar descubrir rutas alternativas/ocultas:

Y obtenemos interesantes resultados:

Parece bastante obvio que nos encontramos ante un Wordpress. Si visualizamos el archivo robots.txt descubrimos un archivo .dic. Si descargamos este archivo en nuestra máquina y echamos un vistazo a su contenido nos encontramos lo que podría ser un diccionario de 858160 palabras:

Como se trata de un diccionario que no conocemos y con el objetivo de poder utilizarlo para hacer fuerza bruta más adelante vamos a optimizarlo eliminando posibles entradas duplicadas con el siguiente comando:

¡Con este simple comando habremos reducido el diccionario a solo 11451 líneas!

Además del diccionario también nos encontramos un arhivo .txt que contiene la primera flag:

Vamos a por el panel de inicio de sesión de Wordpress que se encuentra bajo la ruta /wp-login. Como Wordpress nos reporta a través de un mensaje de error en caso que el usuario no exista en la base de datos vamos a aprovecharnos de este mensaje para, atendiendo a la longitud del mensaje de respuesta, enumerar usuarios válidos usando el diccionario que descubrimos anteriormente y la herramienta Intruder de Burp Suite.

Primero interceptamos al petición con el proxy de Burp Suite:

Madamos esta petición al Intruder y definimos el campo sobre el que ejecutar nuestro ataque:

Nos dirigimos a la pestaña Payloads y cargamos nuestro diccionario optimizado:

Finalmente pulsamos sobre Start Attack.

Este proceso puede tardar una eternidad si tenemos la versión gratuita de Burp Suite y desde mi humilde opinión en CTFs no tiene sentido incluir este tipo de procesos así que te adelanto que el usuario válido es el nombre del protagonista de la serie: Elliot, no seré yo quien te juzgue si lo usas sin esperar a que termine el ataque de Burp Suite 😉

Una vez tengamos un usuario válido la forma más rápida de descubrir la contraseña de usuario es utilizando la herramienta wpscan con el siguiente comando:

Y finalmente obtenemos credenciales válidas de inicio de sesión:

Explotación

Ya podemos acceder al panel de control de Wordpress así que ahora nuestro objetivo es acceder al propio servidor. Para ello vamos a cambiar el comportamiento de la web al mostrar el error '404 - Página no encontrada' haciendo que se ejecute nuestro código malicioso cuando el sistema ejecute el archivo .php que muestra dicho mensaje.

Nos dirigimos a Appearance/Editor/:

Y haciendo click sobre 404 Template se nos mostrará el contenido del código:

Sustuímos el código original por el código de nuestra webshell y hacemos click sobre Update file:

Esto va a hacer que cada vez que la web intente acceder a un recurso que no existe se ejecute nuestro código malicioso y nos envíe una reverse shell a nuestra IP de atacante.

Ponemos netcat en escucha:

Y accedemos a una dirección URL que no exista, por ejemplo:

¡Y ya tenemos shell en nuestro equipo de atacante!

Si exploramos un poco el sistema podemos encontrar bajo el directorio de usuario /home/robot/ dos archivos interesantes, el primero es la segunda flag y el segundo parece contener unas credenciales codificadas en MD5:

Para decodificar el hash que corresponde a la contraseña vamos a crear un archivo en nuestra máquina que contenga la cadena completa:

Y utilizamos la herramienta hashcat junto a un diccionario para decodificarla:

Si intentamos iniciar sesión como el usuario robot desde la shell que tenemos actualmente se nos mostrará el mensaje de error: "su: must be run from a terminal" así que vamos a lanzar una terminal con Python para poder ejecutar el comando su:

Ahora sí, iniciamos sesión con el usuario robot y la contraseña que acabamos de decodificar.

Escalada de privilegios

Ya que hemos iniciado sesión con este usuario podemos realizar un tratamiento de la TTY para lanzar una shell completamente interactiva y poder movernos con soltura por el sistema, en el siguiente enlace encontrarás como hacerlo:

Tratamiento de la TTY

Lanzamos el siguiente comando para obtener una lista de los binarios con permisos suid:

Llama la atención especialmente el binario nmap ya que no es típico que este binario posea este tipo de permisos.

Una siemple búsqueda en Google nos lleva a este artículo, el cual nos da los comandos a ejecutar para realizar la escalada de privilegios aprovechándonos de este fallo de seguridad:

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