Skip to main content
HackTheBox machines – Timing WriteUp

HackTheBox machines – Timing WriteUp

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

Timing es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad Media.

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 Timing 10.10.11.135 a /etc/hosts como timing.htb y comenzamos con el escaneo de puertos nmap.

Encontramos un puerto 22 para el cual no disponemos de credenciales y un portal web en el puerto 80 así que vamos a este segundo.

 

Enumeración

Revisamos el portal web existente y vemos la siguiente página de login

 

No parece que haya mucho más al respecto, y después de algún intento fallido de sqli procedemos a enumerar los directorios y ficheros existentes con gobuster

 

Encontramos varias páginas asi que vamos a tratar de revisar aquellas que no nos redireccionan a la pantalla de login.

Revisamos la página con la uri /images la cual nos devuelve un error 403

Revisamos también la página de image.php y esta nos devuelve una página en blanco, lo que nos da que pensar, hacemos alguna prueba de lfi por parámetro pero parece que no damos con la tecla así que vamos a tratar de averiguar que parámetros tiene con wfuzz

 

Y obtenemos el parámetro img, así que vamos a tratar de obtener el fichero /etc/passwd y nos da un mensaje que nos confirma que aqui hay algo

Pero parece que esta no es la forma de conseguirlo, así que vamos a utilizar los filtros de php para codificar y decodificar en base64 y así verificar si realmente hay posibilidad de hacer un lfi.

Así que lanzamos el siguiente payload

Y ahora sí que conseguimos el fichero passwd y con ello el listado de usuarios del equipo

 

Así que visto que es posible realizar el LFI vamos a tratar de obtener los ficheros php que vimos anteriormente, empezaremos descargando el fichero de login

Y vemos que hace un include a un fichero de base de datos

Descargamos el mismo y vemos unas credenciales de MySQL

Probamos las mismas pero parece que no valen para el usuario aaron, pero después de dar alguna vueltecita probamos el acceso y conseguimos acceder al portal con las siguientes credenciales

Y viendo la siguiente pantalla

 

Hemos conseguido acceder al portal pero nuestro id de usuario es el 2 y necesitaríamos acceder con el rol con id 1, en otras palabras, el usuario admin de la aplicación, así que continuaremos nuestra investigación.

 

Descargaremos el fichero de upload.php y en el mismo vemos un fichero nuevo

Descargamos el nuevo fichero y observamos que apunta a otro fichero

Así que descargamos el fichero auth_check.php, pero en este parece que no vemos nada así que seguimos.

Accedemos en el portal a la página de Edit profile que luce el siguiente aspecto

 

Así que vamos a analizar el fichero de profile.php que vimos anteriormente y observamos que apunta a un fichero js situado en js/profile.js que nos da más pistas

Vemos otro fichero más, profile_update.php, nos descargamos el mismo y en este vemos un trozo en concreto que nos da una pista más

Existe un parámetro más que no habíamos visto, role, así que vamos a interceptar la petición de edición del perfil con burp suite para añadir el parámetro

 

Recargamos la página y vemos como ahora hay un elemento extra en el menú llamado Admin panel

 

Y si accedemos a dicho panel vemos una página de subida de ficheros

 

Descargamos y revisamos el código del fichero php de upload y vemos varias cosas interesantes.

En primer lugar vemos el directorio donde se guardan los ficheros

Vemos también el método de renombrado que aplica al subir un fichero

Y vemos que como única comprobación que realiza es que el fichero sea jpg

Visto el código el proceso quedaría de la siguiente forma:

  1. Comprueba si el fichero es jpg o no
  2. Crea un nombre de archivo con un hash md5 que se compone de los siguientes elementos
    1. La cadena ‘$file_hash’
    2. El timestamp actual
    3. El carácter _
    4. El nombre del fichero

 

Dicho esto generaremos un fichero jpg con el siguiente contenido

Y para la subida del fichero, en nuestro caso, hemos hecho un script que automatice todo el proceso

 

En el mismo script nos encargamos de abrir la sesión, escalar al usuario administrador, subir el fichero y encontrar el mismo.

Cabe destacar que para poder hacer funcionar el proceso correctamente y conseguir calcular el hash correcto hay que revisar el tiempo de la máquina, el cual está en UTC y está adelantado unos 4 minutos aproximadamente, así que es necesario modificar el tiempo de nuestra máquina para no volvernos locos.

Para ello cambiamos la timezone si estamos en una diferente

Y ajustamos la hora exacta a la del servidor de la máquina Timing

Una vez hecho esto, ejecutamos el script y conseguimos una shell con el usuario www-data

Desde aqui no tenemos una shell apropiada para hacer una enumeración extensa, así que buscamos un poco por la máquina y encontramos un backup en la ruta /opt

Lo copiamos a la ruta del servidor web para poder descargarlo y vemos el siguiente contenido en el mismo

En el mismo hay un directorio .git así que entramos y revisamos los últimos cambios aplicados

Y vemos un commit muy interesante donde indica que se ha actualizado el fichero db_conn

Así que vamos a ver el contenido de dicho commit y vemos que las credenciales del fichero son diferentes

 

Obteniendo la flag de user

Así que utilizamos las credenciales obtenidas del commit para acceder con el usuario aaron y conseguir la flag

 

Escalado de privilegios

Ahora que ya estamos dentro, revisamos los permisos del usuario

Y observamos que tiene permisos de root para ejecutar el fichero netutils, cuyo contenido es el siguiente

Ejecuta un fichero .jar, que vamos a probar a ver que hace y nos muestra el siguiente menú

Vamos a realizar una prueba de su funcionamiento. Creamos un fichero test en nuestra máquina y levantamos un servidor web con python y probamos

Y vemos que ha subido el fichero a la home del usuario aaron

Visto el comportamiento de la aplicación y, como se ejecuta como root, vamos a tratar de utilizar el mismo para modificar el contenido del fichero authorized_keys de root para poder acceder con el mismo.

Generaremos una clave ssh que utilizaremos para el acceso

Copiaremos el fichero root.pub a keys y crearemos un enlace simbólico en la home de aaron llamado keys y que apunte al fichero authorized_keys de root

Levantaremos otro servidor web con python y ejecutaremos el fichero netutils para subir nuestra clave

 

Obteniendo la flag de root

Con nuestra clave subida al fichero authorized_keys de root, nos queda acceder con dicho usuario 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.