Skip to main content

HackTheBox machines – Broscience WriteUp

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

Broscience 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 Broscience 10.10.11.195 a /etc/hosts como broscience.htb y comenzamos con el escaneo de puertos nmap.

Una vez completado el escaneo de puertos procedemos a revisar en detalle cada uno de ellos.

 

Enumeración

En el escaneo vimos 3 puertos abiertos y un nombre de host, broscience.htb, así que procedemos a acceder a dicho dominio por el puerto 80 y este nos reenvía al puerto 443 mostrando la siguiente página

HackTheBox machines – Broscience WriteUp

 

No vemos gran cosa por el momento así que procedemos a enumerar ficheros y directorios, en nuestro caso con feroxbuster

 

Encontramos un directorio con nombre includes muy interesante

HackTheBox machines – Broscience WriteUp

Nos enumera los ficheros existentes en el mismo así que revisamos cada uno y vemos en el fichero img.php que muestra un error de que falta un parámetro con nombre path

Descubriendo parámetros

Si tratamos de hacer un LFI nos bloquea debido a que detecta un ataque

Ataque detectado al intentar lfi

Hacemos varias pruebas para intentar saltar la restricción y conseguimos pasarla encodeando el valor que le pasamos dos veces, consiguiendo con ello leer el fichero /etc/passwd

 

Explotando LFI con burp

 

Descubierto esto y para evitar estar haciéndolo manualmente he hecho el siguiente script en python para su automatización

 

Así que lo lanzamos para verificar que funciona tal y como esperamos

 

Visto que funciona nos descargamos los ficheros que vimos anteriormente dentro del directorio includes y observamos varias cosas interesantes.

En primer lugar obtenemos unas credenciales de base de datos en el fichero db_connect.php

 

Además de eso en el fichero utils.php observamos una función para generar un código de activación

 

Así que nos descargamos el fichero de la página de registro que vimos anteriormente en la enumeración de directorios para observar su contenido

Y encontramos la url necesaria para la activación de la cuenta

 

Visto esto nos vamos a la página de registro para crear nuestro usuario, en nuestro caso interceptamos la petición con burp para obtener la fecha de la petición (esto ya se expicará más adelante)

Registro de cuenta

 

Y ya tenemos nuestro usuario creado, ahora hará falta activarlo. Para ello generaremos un fichero php con el código que vimos anteriormente pero con alguna modificación, en el caso de la fecha, en lugar de utilizar la función time, usaremos la función strotime junto con la fecha obtenida en la petición realizada para registrar el usuario, quedaría entonces el código así:

Generado el script ejecutamos para obtener nuestro token de activación

Y accedemos a la url que vimos antes para activar la cuenta

Bypass de la activación de la cuenta

Y una vez activada, nos logueamos con la misma

Login correcto

Hasta aquí poco más que hacer, así que volvemos a revisar el código y encontramos dos partes muy interesantes en el fichero utils.php

En primer lugar la función get_theme, que si revisamos el código serializa la cookie para cargar las preferencias del usuario en la misma

Por otro lado descubrimos dos clases destinadas a la subida de ficheros para la personalización del avatar del usuario

Con todo esto es posible generar una cookie con una reverse shell y modificarla en la sesión actual del navegador para conseguir ejecutarla y acceder al sistema.

Dicho esto, construimos nuestro script php con el código que acabamos de ver quedando así

Y lo ejecutamos para obtener nuestra cookie

El siguiente paso será generar un fichero php con nuestra reverse shell

Y modificar la cookie en el navegador para conseguir subir el fichero

Edición de cookies al vuelo

Y si revisamos nuestra escucha en python vemos que ha funcionado

Ya sólo queda acceder a nuestro fichero por ejemplo con curl

Y obtendremos acceso con el usuario www-data

 

Escalado al usuario bill

Una vez dentro con el usuario www-data, vamos a obtener una shell un poco mejor

Utilizaremos entonces las credenciales de postgres que vimos en el fichero db_connect.php y descubrimos en la base de datos las credenciales de varios usuarios

 

Para poder crackear las mismas necesitaremos generar un diccionario al cual le insertemos el salt en cada línea ya que este es utilizado por la aplicación

Y una vez creado el diccionario utilizamos john para romperlas y obtenes en plano las credenciales de tres usuarios

 

Revisando en el fichero passwd existe el usuario bill así que quitamos el salt a la password obtenida y accederemos por ssh con las credenciales obtenidas.

 

Obteniendo la flag de user

Con las credenciales del usuario bill accedemos por ssh y cogemos la primera flag

 

Escalado de privilegios

Para el escalado a root enumeramos y revisamos a fondo la página y encontramos un proceso interesante con pspy

Descubriendo procesos para el escalado

En el mismo se ejecuta el script renew_cert.sh con un parámetro, si revisamos el script el contenido es el siguiente

 

El script lee el certificado y lo renueva en caso de ser necesario así que vamos a generar un certificado nuevo en la ruta que vimos en el proceso, y en el mismo, vamos a incluir un comando en el Common Name con el fin de dar permisos de suid al binario de bash, así que generamos nuestro certificado

Esperamos a que se ejecute de nuevo y veremos como ha funcionado y el binario de bash tiene ahora el bit de suid

 

Obteniendo la flag de root

Con el permiso de suid en el binario de bash escalamos a root y vamos a por la 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 *