HA Jocker CTF - TryHackMe

SUMMARY

Debemos encontrar 1 bandera. Primero, a partir de un escaneo de puertos pude saber que había un servidor web que alojaba un sitio web con contenido estático y que admitía conexiones desde el puerto 80 Además, había otro sitio web que admitía conexiones desde el puerto 8080 pero su directorio raíz estaba protegido por un mecanismo de autenticación. Luego, realice fuerza bruta de directorios en el directorio raíz del primer sitio web, logrando encontrar un username valido para ser usado en un ataque de fuerza bruta contra el login. Luego, pude saber que el segundo sitio web estaba siendo gestionado con el CMS Joomla. Luego, con la fuerza bruta de directorios realizada por “ Nikto” , logre encontrar un archivo Zip que contenía un archivo SQL con diversas instrucciones SQL donde una de ella contenía las credenciales del usuario admin, pero su contraseña estaba en forma de hash, que logre crackearlo fácilmente, logrando acceder al portal de gestión del CMS. Luego, en el portal de gestión del CMS, logre modificar el código fuente de un template utilizado por el sitio web, para ejecutar una reverse Shell. En la escalada de privilegio vertical, aproveche que el usuario “www-data” pertenecía al grupo “ lxd” para ejecutar un contenedor Linux donde montaría todo el sistema de archivos del sistema anfitrión en uno de sus directorios. Además, ejecute una Shell con los privilegios de root en el contenedor con el fin de poder asignarle el bit SUID al binario de “ Bash”, y lograr ejecutar una Shell Bash con los privilegios de root en el sistema anfitrión.

FASE RECONOCIMIENTO

En este caso debemos acceder al sistema destino y obtener las banderas. Primero, empezaremos utilizando el comando openvpn y el archivo de configuración OpenVPN con el fin de establecer una conexión VPN y poder acceder a los laboratorios donde están las máquinas virtuales. Además, la plataforma de Tryhackme nos muestra la dirección IP de la máquina jokervm.

FASE ESCANEO Y ENUMERACION

Ahora pasaremos a la fase de Escaneo y Enumeración con el fin de poder escanear los puertos del sistema destino. Además, obtendremos los servicios que se han levantado en los puertos abiertos, las versiones de los servicios.

Los resultados que obtenemos son:

  • Un programa servidor SSH que se ejecuta en el puerto 22.
  • Un programa servidor HTTP que se ejecuta en el puerto 80 y 8080. Ademas, en el puerto 80, podemos observar la etiqueta “title” de una pagina web, por lo que podemos deducir que hay un sitio o aplicacion web alojado en el servidor web. Pero en el puerto 8080, recibimos el codigo de estado 401, por lo que el directorio raiz del sitio o aplicación web esta protegido por un metodo de autenticacion. Esto ultimo lo podemos verificar cuando intentamos acceder al sitio o aplicación web a travez del navegador web. Ademas, probe credenciales por defecto como “admin:password” pero no tuve suerte.

Ahora accederemos al sitio o aplicación web a traves de mi navegador web.

Podemos observar que el sitio web solo presenta contenido estatico ya no presenta ninguna funcionalidad ni contenido dinamico. Ahora, realizaremos fuerza bruta de directorios para encontrar recursos escondidos en el directorio raiz del sitio web.

Podemos observar que nos encontramos con un archivo de texto con el nombre “secret”, que contiene los mensajes de una conversacion entre “Batman” y “Joker”, ambos pueden ser posibles usernames validos para iniicar sesion en el sistema destino o para acceder al directorio raiz de la aplicación web que se ejecuta en el puerto 8080. Ahora realizaremos un ataque de fuerza bruta sobre el login que protege al directorio raiz de la aplicación web que se ejecuta en el puerto 8080

Podemos observar que se logro encontrar unas credenciales para autenticarnos en el login que protege al directorio raiz del sitio web que fue creado y esta siendo gestionado por el CMS Joomla. Ahora probaremos las credenciales “joker:hannah” y otras credenciales por defecto como “admin:password” en el login para acceder al portal de gestion del CMS.

Podemos observar que no tuvimos suerte. Ahora buscaremos la version del CMS Joomla instalado en el servidor web con el fin de encontrar exploits publicos asociados a su version.

Podemos observar que logre encontrar un exploit que documentaba la vulnerabilidad SQLi en el parametro GET “list[fulolorderin]” pero no tuve éxito al intentar explotarlo. Ahora realizaremos fuerza bruta de directorios en el directorio raiz del sitio web en busca de recursos escondidos.

Podemos observar que solo logramos encontrar recursos que forman parte por defecto de la estructura de directorio del CMS Joomla. Ahora, probaremos suerte con el descubrimiento de archivos y directorios confidenciales realizado por “nikto” ya que en si la herramienta no te solicita que le ingreses un parametro con las extensiones que pueda tener el recurso escondido que queremos encontrar. Debido a que no tenemos conocimiento de que tipo de archivo pueda haber, es que optamos por esta herramienta.

Podemos observar que se logro encontrar un archivo zip que tiene compromido un directorio llamado “site” con todos los archivos y subdirectorios que vienen por defecto en el CMS Joomla, y contiene otro directorio llamado “db” que contiene una archivo SQL con posibles instrucciones SQL para crear una base de datos que contengan informacion sobre los usuarios que pueden acceder al portal de gestion del CMS. Ademas, si intentamos descromprimirlo, nos solicitara una passphrase o contraseña que viene a ser “hannah”. Ademas, no tuve la necesidad de utilizar Jhon The Ripper para encontrar el valor ya que solo reutilize la contraseña que encontramos anteriormente.

Podemos observar una instrucción SQL que agregara un nuevo registro a la tabla “cc1gr_users” y que contiene las credenciales del usuario “admin” con un hash de contraseña .

FASE GANAR ACCESO O EXPLOTACION O HACKING

Ahora crackearemos este hash con John The Ripper e ingresaremos al portal de gestion del CMS.

Podemos observar que se logro crackear el hash de la contraseña del usuario “admin”. Ademas, logramos acceder al portal de gestion del CMS. Ahora modificaremos el codigo fuente de alguno de los archivos de algun template utilizado por el sitio web con el fin de generar una reverse shell.

De esta manera logramos acceder al sistema destino. Ahora realiaremos un tratamiento de nuestra reverse shell para que sea mas estable e interactiva.

FASE ESCALADA DE PRIVILEGIOS

Ahora buscaremos vectores de escalada de privilegios de manera manual con el fin de ser un usuario con mayor privilegios en el sitema destino.

Podemos observar que el usuario “www-data” pertnece al grupo “lxd” por lo que puede gestionar contenedores Linux. Ademas, este privilegio viene a ser un vector de escalada de privilegio bastante conocido ya que consiste en crear un contenedor Linux donde montaremos todo el sistema de archivos del sistema anfitrion pero tendremos el privilegio de root por lo que podremos manipular, observar cualquier archivo sin restricciones. Para ello aprovecharemos que se tiene descarga una imagen con el alias “myalpine”. Para la creacion o inicializacion del contenedor Linux necesitamos una imagen.

Ahora montaremos el sistema de archivos del sistema anfitrion en el directorio “mnt” de nuestro contenedor con el fin de ejecutarlo y tener una shell con privilegios de root para poder interactuar con todo los archivos.

Podemos observar que logramos ejecutar el contenedor donde tenemos una shell con los privilegios de root para poder navegar por el sistema de archivos del sistema anfitrion sin ningun problema.Ademas, logramos encontrar la ultima bandera, pero si queremos realizar la escalada de privilegio en el mismo sistema anfitrion, solo debemos aprovechar que somos el usuario root dentro del contenedor para asignarle el bit SUID al archivo binario bash, y luego en el sistema anfitrion, ejecutar una shell Bash con los privilegios de root.