Skip to main content
HackTheBox machines – Feline WriteUp

HackTheBox machines – Feline WriteUp

Feline es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox basada en Linux

Feline es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad Difícil.

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 Feline 10.10.10.205 a /etc/hosts como feline.htb y comenzamos con el escaneo de puertos nmap.

Después de un primer escaneo con nmap, no hay muchos puertos disponibles por lo que comenzaremos por el portal web existente en el puerto 8080.

 

Enumeracion

Accedemos a través del navegador al puerto 8080 y encontramos el siguiente portal:

Accediendo a VirusBucket

 

Donde vemos un portal de análisis de ficheros en busca de malware, como podría ser por ejemplo el conocido virustotal. Revisamos el portal y sólo encontramos un enlace funcional en /service el cual nos muestra una página con un formulario para la carga de ficheros:

Accediendo a VirusBucket

 

Hacemos una serie de pruebas y parece que sube el fichero, pero no conocemos donde puede estar así que lanzamos gobuster y wfuzz con la intención de encontrar la misma o alguna ruta alternativa que nos sea de utilidad pero no conseguimos nada relevante. Pasamos entonces a realizar la carga de ficheros interceptando la petición con Burp Suite a ver si muestra algún error o algún dato que sea de interés y verificamos que la subida se realiza:

Analizando subida de ficheros con Burp Suite

 

Hacemos entonces una segunda prueba, borrando el nombre del fichero y nos muestra un error y la ruta de la carpeta de uploads:

Analizando subida de ficheros con Burp Suite

 

Y el error completo sería el siguiente:

Así que con el error en mano vamos a buscar en google información al respecto con el fin de encontrar alguna vulnerabilidad y descubrimos la posibilidad de aprovechar un error en la deserialización para realizar un RCE y que está documentado con el CVE-2020-9484 y podemos ver una POC del mismo en el siguiente enlace:

https://www.redtimmy.com/apache-tomcat-rce-by-deserialization-cve-2020-9484-write-up-and-exploit/

Así que trataremos de explotar la misma para conseguir una shell en la máquina. Para ello tendremos una serie de requisitos:

  • No debe de ser necesaria la autenticación para la carga del fichero
  • Se necesita tener control sobre la ubicación y el nombre del fichero o, en su defecto, conocer los mismos
  • La función exec() de Java Run será la encargada de desearilizar la información de la cookie JSESSIONID

Completados los requisitos se deberán seguir unos pasos para conseguir explotarla:

  1. Se deberá crear un objeto serializado Java Runtime Environment y guardarlo en la variable varname.session
  2. Una vez guardado se subirá al servidor
  3. El último paso será modificar el valor de la variable JSESSIONID a un valor del estilo “../../malicious.session”

Debido a que JSESSIONID es analizado por la función java.lang.Runtime necesitamos configurar una carga útil en bash o shell ya que al tratarse de un entorno de ejecución si utilizamos nc, socat se romperá dentro del entorno.

Así que hacemos una serie de pruebas para verificarlo con burp y generaremos un script para hacer más sencilla la explotación, que en nuestro caso el código será el siguiente:

 

Ejecutamos dicho script y conseguiremos una shell con el usuario tomcat en nuestra escucha:

 

 

Obteniendo la flag de user

Revisamos los permisos del usuario y la flag se encuentra en la home del usuario tomcat, por lo que vamos a la misma y conseguimos la flag de user:

Y ya tenemos hecho el 50% de esta máquina así que seguimos para root.

 

Escalado de privilegios

Procedemos a enumerar el sistema con este usuario y descubrimos dos puertos interesantes, el 4505 y 4506:

Buscando los mismos en google encontramos dos vulnerabiliddes muy interesantes para llevar a cabo el ataque, CVE-2020-11651 y CVE-2020-11652 y un enlace mostrando la explicación de las mismas:

https://gist.github.com/SwitHak/8e7fa45b5656c691ddf13c8c47e8fda6

Además buscando también en exploit-db encontramos un exploit público para realizar el ataque:

https://www.exploit-db.com/exploits/48421

Aunque aquí tenemos un problema y es que necesitamos que esté instalado el módulo salt en la máquina, pero no está instalado en la máquina feline:

Para realizar entonces la ejecución de nuestro exploit necesitaremos redireccionar un puerto de nuestro servidor para poder ejecutar el mismo desde nuestra máquina, donde disponemos del módulo salt, o podemos instalarlo si no lo tenemos. Para realizar esto utilizaremos la tool chisel disponible en github.

Así que lanzamos chisel en modo server en nuestra máquina:

 

Y posteriormente lo descargamos en la máquina víctima y lo ejecutamos como cliente:

 

Como último paso ejecutaremos el exploit:

 

Y conseguiremos acceso a un contenedor en nuestra escucha:

Esta máquina en la que estamos ahora es un contenedor, así que necesitaremos encontrar la forma de poder crear nuestro contenedor o de escalar al usuario root de la máquina host. Revisamos el historial de comandos del usuario y encontramos uno interesante:

 

Vemos un comando con curl donde está exponiendo el socket de docker así que vamos a lanzar ese mismo comando para verificar que tenemos acceso a dicho socket y que podemos ver información relevante a la instalación de docker en el host:

 

Y conseguimos ejecutarlo y además, obtener información como son las imágenes existentes descargadas así que vamos a buscar alguna forma de poder abusar del socket para realizar nuestro escalado.

Para realizar esta tarea hay varias opciones disponibles, algunas de ellas recogidas en el post Abusing docker api socket.

Así que vamos a utilizar una de ellas para conseguir escalar privilegios.

En nuestro caso hemos hecho un script para automatizar la tarea pero vamos a verlo paso a paso el proceso del ataque.

En primer lugar generaremos nuestro payload y crearemos dos variables en la máquina para dicho fin:

 

Posteriormente crearemos un contenedor, cuyo contenido será el payload que acabamos de generar:

 

Una vez creado, arrancamos el contenedor:

 

Y conseguimos en nuestra escucha acceso como root a nuestro contenedor, pero teniendo acceso al disco / del host:

 

 

Obteniendo la flag de root

Ahora que ya estamos con root y acceso a la raíz del host, accedemos a la home del usuario y obtenemos nuestra flag:

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

 

Deja una respuesta

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