Mr Robot CTF
Última actualización
Última actualización
¡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:
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:
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.
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:
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í!