Skip to main content
HackTheBox machines – Secret WriteUp

HackTheBox machines – Secret WriteUp

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

Secret es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad Fá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 Secret 10.10.11.120 a /etc/hosts como secret.htb y comenzamos con el escaneo de puertos nmap.

Revisando los puertos descubiertos en el escaneo vamos a comenzar revisando el portal existente en el puerto 80

 

Enumeración

Accedemos a través del navegador a la url secret.htb y encontramos el siguiente portal

 

 

 

A simple vista revisamos el código fuente, el portal en general y las secciones disponibles y descubrimos dos cosas interesantes.

En primer lugar un texto donde indica que se utilizan tokens jwt

 

Y una sección en la que permite descargar el código fuente de la aplicación

 

Revisamos el fichero .zip descargado y dentro encontramos un fichero .env con los siguientes datos

Y un directorio .git del cual vamos a ver el histórico de cambios a ver si podemos ver algo interesante y vemos los siguientes commits

En los cuales vemos uno muy interesante, que hace referencia al secret del Token del fichero .env

Así que visto el commit vamos a obtener los cambios que se realizaron en el mismo y obtenemos el valor de la variable TOKEN_SECRET

 

Llegados a este punto no hay mucho más que descubrir así que enumeramos los posibles directorios existentes con gobuster

Obtenemos dos uris que serán vitales llegados a este punto, /api que ya vimos el enlace en el botón de Live Demo y la uri /docs con la documentación de la api utilizada por el portal

 

Revisamos la documentación, aunque tampoco hay mucho que mirar hasta aquí, tenemos la posibilidad de crear un usuario, acceder con el mismo y revisar la parte privada del portal, así que vamos a ello.

Comenzaremos creando nuestro usuario utilizando curl

Y posteriormente nos loguearemos para obtener nuestro token jwt

Verificaremos el mismo a través del portal jwt.io

 

Y observamos los datos de nuestro usuario, así que vamos a acceder a la zona privada para verificar nuestro rol

Llegados a este punto, necesitamos obtener una forma de poder escalar privilegios, es decir, conseguir por medio del token jwt escalar privilegios y acceder con el usuario theadmin visto en la documentación de la api.

Debido a que no hay más uris disponibles por el momento vamos a enumerar de nuevo con gobuster, pero en este caso, vamos a excluir aquellas uri que nos den un código 200 ya que queremos obtener las uris para las cuales sea necesario haber accedido previamente

 

Y obtenemos la uri de /logs pero no tenemos permisos para poder ver el contenido de la misma.

Utilizaremos entonces el token_secret obtenido anteriormente del fichero zip descargado y para ello modificaremos nuestro token cambiando el nombre del usuario por theadmin y utilizaremos el secret para firmar el mismo

 

Verificamos el rol que tenemos con nuestro token modificado y vemos que ya somos admin

Ahora que ya hemos conseguido obtener permisos de admin en la api, vamos a la url de logs la cual nos devuelve lo siguiente

Parece que espera un valor, así que vamos a tratar de pasarlo en la url por medio de un parámetro llamado file

Y completa el mismo, y es posible que nos permita lanzar comandos, así que lanzamos una inyección utilizando el carácter ; como separador y boom! funciona!

Visto que es posible realizar un RCE, vamos a aprovechar el mismo para ejecutar una rev shell en el servidor y conseguir acceso.

Codificamos nuestra rev shell y la enviamos como parámetro codificado

Y obtenemos acceso con el usuario dasith

 

Obteniendo la flag de user

Ahora que ya estamos dentro vamos a la home del usuario y obtenemos la primera flag

 

Escalado de privilegios

Llegados a este punto vamos a buscar alguna posibilidad para escalar privilegios a root y después de un rato enumerando, encontramos un proceso interesante con permisos de suid

El fichero /opt/count parece interesante, y observamos que además del ejecutable disponemos del fichero code.c con el código del mismo

Y el contenido del fichero code.c es el siguiente

 

Si analizamos el mismo, el ejecutable, revisará la ruta que se le indique y mostrará el total de ficheros, líneas y palabras de cada uno, así que hacemos una simple prueba para ver su funcionamiento

 

Vale, parece que aqui no hay muchas opciones de explotar, así que vamos a realizar una prueba de romper el proceso, mediante el envío de señales, para obtener el dump en /var/crash y poder analizarlo. 

Con esta explicación tendríamos, entre otras, que enviar al proceso una señal SIGSEGV (segmentation violation) o SIGBUS (bus error) para forzar la rotura del mismo. 

Así que lanzamos el programa pero no confirmamos el guardado

 

Ahora, abrimos una segunda shell enviando otra petición con curl y nuestro payload y mataremos el proceso con una de estas señales

 

Y observaremos como se ha generado el fichero en la ruta /var/crash

Ahora para poder ver el contenido completo y analizarlo extraeremos el mismo con apport-unpack 

 

Revisamos el contenido del fichero CoreDump generado y obtendremos en el el contenido del fichero /root/.ssh/id_rsa y con ello la key ssh de root

 

Obteniendo la flag de root

Ahora que ya tenemos la clave ssh, accedemos con root y conseguimos 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 *