🟢GoodGames
Write-up de la máquina GoodGames de HackTheBox #writeup #walkthrough
Last updated
Write-up de la máquina GoodGames de HackTheBox #writeup #walkthrough
Last updated
GoodGames en un CTF de dificultad fácil que podemos encontrar en la plataforma Hack The Box. Tiene vulnerabilidades web básicas. Primero, hay una inyección de SQL que permite tanto omitir el inicio de sesión como una inyección de unión para volcar datos. La página del administrador muestra un nuevo host virtual que, después de autenticarse con credenciales de la base de datos, tiene una vulnerabilidad de SSTI en el nombre del perfil, lo que permite la ejecución codificada y un shell en un contenedor docker. Desde ese contenedor, encontraré la misma contraseña reutilizada por un usuario en el host y SSH para obtener acceso. En el host, abusaré del directorio de inicio que está montado en el contenedor y la forma en que Linux hace los permisos y la propiedad de los archivos para obtener un shell como root en el host.
Comenzamos realizando un escaneo rápido de los puertos que tiene abierto la máquina objetivo.
Unicamente tenemos un puerto abierto. Vamos a realizar un escaneo más profundo.
Tenemos un puerto 80 donde se está ejecutando un servidor Apache. Este escaneo también nos devuelve un nombre de dominio. Vamos a registrarlo en nuestro archivo /etc/hosts.
Vamos a acceder al sitio web para ver su contenido y si contiene información que nos permita avanzar en la resolución de la máquina.
Es un sitio web sobre videojuegos. La mayoría de los enlaces en la página solo apuntan a la misma página, pero hay enlaces a "Blog" ( /blog
) y "Store" ( /coming-soon
). También existe un formulario de inicio de sesión.
Vamos a intentar utilziar dicho Panel de Administrador para iniciar sesión en el sistema. Para ello, introduciremos unas credenciales al azar y capturaremos la petición con Burp Suite.
Capturamos la petición y obtenemos la siguiente respuesta.
El siguiente paso será guardar está petición en un archivo para poder utilizarlo con SQLMap. El archivo es login.txt.
El formulario de inicio de sesión es vulnerable a Blind SQLi.
Tenemos dos bases de datos
Obtenemos tres tablas como resultado. La que parece más interesante es user. Vamos a ver su contenido.
Vamos a crear un archivo con el hash del password de admin para ver si podemos descifrarla.
Ahora con Name That Hash vamos a determinar que tipo de hash es.
Por norma general, el tipo de hash es el primero que indica en la lista Most Likely. En caso de error, habría que probar con los tipo de hash que nos indica después.
El siguiente paso será descifrar el hash con la utilidad hashcat.
Obtenemos que la contraseña del usuario admin es superadministrator. Vamos a probar si podemos iniciar sesión con estas credenciales.
Anteriormente, hemos aprovechado la presencia de una vulnerabilidad SQLi en el formulario de inicio de sesión para encontrar las credenciales de un usuario administrador. Pero esto lo hemos hecho de manera automatizada. Ahora vamos a realizar la mimsa operación pero de forma manual.
Primero vamos a enviar una petición para bypasear el formulario de login.
Ahora vamos a seguir extrayendo datos modificando la petición anterior. Vamos a extraer el número de columnas de la base de datos. Después de realizar una serie de pruebas, vemos que la cuarta columna refleja información. Pues vamos a utilizarla para extraer información de interés.
El siguiente paso, vamos a enumerar el nombre de las bases de datos.
El siguiente paso será enumerar las tablas que pertenecen a la base de datos main.
Tenemos tres tablas dentro de la base de datos main. La que más nos interesa para la información que estamos buscando es user.
El siguiente paso será enumerar el contenido de la tabla user.
La tabla user tiene tres columnas: email, password, name. El siguiente paso será extraer la información contenida en esas columnas.
Y finalmente, obtenemos las credenciales del usuario admin pero de manual, mediante peticiones UNION SELECT.
En la parte 1 del acceso al Panel de Administrador, desciframos la contraseña con Name That Hash más Hascat. En la parte 2, vamos a hacerlo con John The Ripper.
Ya volveriamos a tener la contraseña de admin (superadministrator) en texto plano.
Una vez introducidas las credenciales en el formulario de inicio de sesión, llegamos al perfil del usuario administrador. Vamos a inspeccionar este panel para buscar posibles puntos vulnerables.
Después de inspeccionar la web del perfil, encontramos est símbolo de settings que nos redirecciona a otra URL con distinto dominio. Lo primero será registra este nuevo dominio en el archivo /etc/hosts.
Una vez registrado el dominio, vamos a acceder desde el perfil de administrador.
Parece que ahora si hemos encontrado el Panel de Administrador del sitio web. Vamos a inspeccionar el sitio en busca de información o puntos vulnerables interesantes.
Si analizamos los resultados de la extensión de navegador Wappalyzer, vemos que en el servidor objetivo se está ejecutando Python. Dado que se está ejecutando Python, una falla común que podemos encontrar es SSTI. Para verificar esto, vamos a utilizar el payload común {{ 7 * 7 }}.
El payload se ejecuta en el campo Full Name. Vamos a enviar otro payload común coún para ver que usuario somos en el sistema.
Podemos realizar ejecución de comandos, y además, tenemos privilegios root.
Vamos a ejecutar el siguiente comando para entablar shell reversa con la máquina objetivo.
También debemos iniciar un oyente en la máquina atacante en el puerto 4444.
Una vez establecida la shell reversa, lo primero que vamos a hacer es cambiar a una shell interactiva.
Lo primero que vemos es que somos Root y que el nombre de host es extraño. Además, la IP no es la inicial 10.10.11.130. ¿Estaremos en un Docker?
Vemos un .dockerenv
en el directorio raíz y nuestra dirección IP es 172.19.0.2.
Es probable que la máquina host tenga una interfaz de red con dirección IP 172.19.0.1
Vamos a realizar un escaneo de puertos desde el contenedor usando un binario ejecutable de NMAP. Vamos a cargarlo en la máquina objetivo mediante un servidor HTTP con Python.
Y lo cargamos en la máquina víctima de la siguiente manera.
Una vez cargado en la máquina víctima, vamos a realizar un escaneo de puertos.
Este Docker tiene abiertos los puertos 22 y 80. Vamos a ver que usuarios están disponibles en la máquina objetivo, y con la contraseña encontrada anteriormente, poder salir del Docker.
El siguiente paso será probar la conexión mediante SSH (desde la terminal Docker) con el usuario encontrado y la contraseña "superadministrador".
Ahora ya podemos encontrar la flag user.txt
Después de revisar la máquina, no encontramos ninguna forma de ganar privilegios. Recordemos que el usuario augustus estaba montado en el Docker y que allí tenemos privilegios. Vamos a intentar utilizar esto para elevar privilegios.
Vamos a copiar el archivo /bin/bash al directorio de augustus.
Ahora volvemos al Docker para cambiar los privilegios de este archivo.
Ahora volvemos a la terminal del usuario augustus, ejecutamos el archivo modificado y vemos si elevamos privilegios. Tenemos privilegios de usuario root y además, encontramos la flag que nos faltaba.
Y ya tendriamos acabado el CTF GoodGames.