Skip to main content
HackTheBox machines - Fatty WriteUp

HackTheBox machines – Fatty WriteUp

Fatty es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox.

Fatty es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad Insane.

En este caso se trata de una máquina basada en el Sistema Operativo Linux.

 

Escaneo de puertos

Como de costumbre, agregamos la IP de la máquina Fatty 10.10.10.174 a /etc/hosts como fatty.htb y comenzamos con el escaneo de puertos nmap.

No detectamos muchos puertos así que comenzaremos analizando el ftp.

 

Enumeración

Accedemos por ftp al sistema con el usuario anonymous y encontramos tres ficheros de texto y un fichero .jar que procedemos a descargar:

Y observamos el contenido de los tres ficheros de texto.

note.txt

 

note2.txt

 

note3.txt

Y encontramos unas credenciales en el fichero note3.txt:

Procedemos a ejecutar el fichero .jar que descargamos:

Y obtenemos una gui, en la cual nos devuelve un error al intentar acceder con las credenciales obtenidas:

HackTheBox machines - Fatty WriteUp

 

Es un error de conexión así que parece que no llegamos a la máquina destino, procederemos entonces a analizar el contenido del fichero .jar y para ello utilizaremos la herramienta jd-gui y encontramos unos datos de conexión en el fichero beans.xml

analizando fatty-client.jar con jd-gui

Donde observamos lo siguiente:

Así que siguiendo estos datos de conexión y los datos del fichero note.txt visto anteriormente, necesitaremos acceder a través del puerto local 8000 al puerto 1337 del servidor, por lo que utilizaremos simpleproxy para redireccionar este trafico:

Y posteriormente volveremos a probar la conexión, consiguiendo en este caso loguearnos con las credenciales del fichero note3.txt:

HackTheBox machines - Fatty WriteUp

 

Una vez dentro de la aplicación observamos varias opciones dentro del mismo como por ejemplo la opción de whoami:

HackTheBox machines - Fatty WriteUp

O la obtención de un listado de ficheros en varios directorios, así como el contenido de los mismos.

Probaremos a ver si la misma es vulnerable a LFI aunque al intentarlo nos devuelve un error de que no encuentra el fichero:

HackTheBox machines - Fatty WriteUp

 

Pero al menos ya sabemos que la ruta donde se encuentran los ficheros es /opt/fatty.

Analizamos de nuevo el contenido mediante jd-gui, y encontramos la función utilizada para listar los directorios, así que, en nuestro caso, utilizaremos eclipse junto con el plugin jd-eclipse para poder debuguear el mismo y cambiar algunas variables en tiempo de ejecución.

Encontramos entonces la función vulnerable para el listado de directorios:

Por lo que establecemos un breakpoint sobre la misma y en el momento de listar el directorio cambiamos el valor de la variable “folder” por “..”

ejecución de fatty-client.jar con eclipse

 

consiguiendo listar el contenido de la ruta /opt/fatty:

Obteniendo el contenido de /opt/fatty

 

Encontramos varias rutas interesantes pero destacamos otro fichero jar llamado fatty-server.jar, así que editaremos el código de la aplicación para poder descargar el mismo y analizarlo.

No voy a poner las modificaciones realizadas en este post, pero sí el método para decompilar y compilar de nuevo nuestro jar. Cabe destacar que el fichero jar está compilado con java8 por lo que deberemos de utilizar la misma versión para compilarlo nuevamente.

Para decompilar el jar podemos utilizar:

Realizaremos las modificaciones oportunas sobre los ficheros y compilaremos de nuevo nuestro fichero .java con:

Y construiremos nuestro fichero .jar:

En este punto, será necesario eliminar las firmas de ficheros, para ello eliminaremos los ficheros con extensión SF y RSA con el siguiente comando:

Y ejecutaremos nuestro jar para descargar el fichero fatty-server.jar.

Analizando el contenido de este segundo jar, encontramos una vulnerabilidad de inyección SQL en la siguiente función:

Por lo que podremos utilizar la misma para conseguir escalar en la aplicación con privilegios de admin.

Después de revisar a fondo los ficheros.jar, los logs obteniedos de la modificación previa en el cliente y de hacer muchas pruebas de inyección SQL logramos obtener una consulta satisfactoria:

Que ejecutada, daría lugar a la siguiente consulta en el servidor:

Pero además de esto, necesitaremos editar el valor del hash en la función:

Con el valor de nuestro “pass_hash” para evitar que la aplicación genere un nuevo hash por sí misma.

Una vez editado y enviado consegiumos acceder a la aplicación con el usuario admin:

Acceso como admin en fatty-client.jar

 

Y vemos como tenemos disponibles el resto de funciones que antes teníamos deshabilitadas.

Continuamos revisando el código y las opciones disponibles y observamos que la opción de cambio de password no está implementada en el cliente por lo que comenzamos a investigar acerca de la misma.

Y encontramos la siguiente vulnerabilidad en la función:

Y cuyo código es:

Con la vulnerabilidad de deserialización descubierta encontramos el siguiente post en google:

What Do WebLogic, WebSphere, JBoss, Jenkins, OpenNMS, and Your Application Have in Common? This Vulnerability.

Donde explica en detalle esta vulnerabilidad.

Para ello necesitaremos que exista la librería de commons-collections así que revisamos si la misma existe en el fichero fatty-server.jar:

La tenemos así que revisamos la función de changePW y vemos que no está completamente implementada por lo que necesitaremos editar el código para poder utilizar la misma y compilar de nuevo el fichero jar para poder hacer uso de ella, así que llamaremos a la función, en nuestro caso desde la función de contact para forzar su ejecución.

Necesitaremos generar nuestro payload, por lo que utilizaremos la herramienta ysoserial indicada en el post donde explicaba como realizar el ataque de deserialización.

Completado este paso nos queda enviarlo al servidor para obtener la shell en nuestra escucha.

 

Obteniendo la flag de user

Una vez enviado nuestro payload, obtenemos acceso en nuestra escucha:

Y conseguimos la flag de user.

 

Escalado de privilegios

La shell obtenida en el último paso es bastante limitada, así que utilizaremos mkfifo con nc para conseguir una shell más completa:

Y obtenemos la shell en nuestra escucha:

Analizamos la máquina sobre la cual tenemos shell y observamos que estamos dentro de un contenedor de docker:

Enumeramos el sistema con LinEnum pero tampoco obtenemos mucha información y utilizamos pspy64 para obtener los procesos del sistema y obtenemos uno interesante:

Fatty analizando procesos con pspy

Cada pocos minutos se ejecuta el comando:

Que copia el fichero logs.tar del contenedor al host en una ruta desconocida (no hemos podido encontrar la misma), pero podría ser un medio para conseguir el escalado a root.

Crearemos un enlace a /root/.ssh/authorized_keys como logs.tar con la idea de que el sistema al obtener el fichero lo descomprima, creando así nuestro enlace:

Esperaremos a que se ejecute de nuevo el comando y cree nuestro enlace y, una vez creado cambiaremos el contenido del fichero /opt/fatty/tar/logs.tar con nuestra clave pública creada previamente para esta máquina con la idea de que en la próxima ejecución, al haberse creado el enlace a /root/.ssh/authorized_keys, se incluya nuestra clave en el mismo.

 

Obteniendo la flag de root

Esperamos a que se realice la ejecución y ya sólo nos queda acceder por ssh a la máquina como root con la clave añadida:

Y ya tenemos nuestra flag de root para completar esta máquina y conseguir nuestros puntos.

 

Si eres usuario de HackTheBox y te gustó mi writeup, por favor, dame respeto en el siguiente enlace https://www.hackthebox.eu/home/users/profile/103792

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *