Skip to main content
HackTheBox machines – Opensource WriteUp

HackTheBox machines – Opensource WriteUp

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

Opensource 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 Opensource 10.10.11.164 a /etc/hosts como opensource.htb y comenzamos con el escaneo de puertos nmap.

Encontramos tres puertos, el 22 para el que no tenemos credenciales, el 3000 al cual no llegamos y el 80 donde hay un portal web, y que será nuestro próximo paso.

 

Enumeración

Comenzamos revisando el portal web en el puerto 80 y vemos la siguiente ventana

HackTheBox machines – Opensource WriteUp

 

Navegamos un poco por la página y descubrimos dos cosas interesantes, un enlace a la descarga de un fichero .zip y un enlace a la url /uploud

HackTheBox machines – Opensource WriteUp

 

En este portal no vemos mucho más así que vamos a investigar el portal de upcloud que luce así

HackTheBox machines – Opensource WriteUp

 

Hacemos alguna prueba de subir diferentes tipos de ficheros, pero tampoco conseguimos nada interesante así que vamos a burp a ver que podemos obtener.

Tratamos de provocar errores en la aplicación y conseguimos unos datos interesantes al dejar el campo filename vacío

Rompiendo la aplicación con burp

 

 

Si nos fijamos en el error observamos que el portal utiliza el framework Werkzeug Debugger como debug de la aplicación, así que buscamos un poco de información sobre ella y vamos a navegar a la url de la consola de la misma.

Consola del debugger bloqueada

 

Aunque como era de esperar, no iba a ser tan fácil, necesitamos un pin para poder llegar a la consola, pero no disponemos de uno así que buscamos alguna vulnerabilidad y encontramos un script que nos permite obtener dicho pin y que explica en la web de HackTricks.

Revisando el portal necesitamos que esté activado el modo debug así que vamos a buscar en el fichero zip a ver que podemos descubrir.

En el mismo encontramos los siguientes ficheros:

 

Además del código de la aplicación, también está el directorio .git donde podemos ver los cambios realizados sobre el código

 

Revisamos el cambio entre commits y encontramos un dato interesante

 

El hecho de descomentar esa línea habilita la consola, así que vamos a ver si podemos conseguir ese PIN.

La consola muestra un PIN de 9 dígitos, cuyo formato será nnn-nnn-nnn

Consultando los enlaces de la web de Hacktricks que vismo antes es posible obtener dicho PIN siempre y cuando se pueda obtener previamente cierta información del objetivo.

Para ello se necesitan 6 piezas, 3 de ellas son públicas, 1 se filtra al estar en el modo debug, y las otras 2 son privadas y sería necesario obtener por medio de la explotación de otra vulnerabilidad tipo LFI para obtener los valores.

Revisando entonces el código los valores serían:
username -> es el usuario que inició esta instancia de Flask
modname -> siempre es flask.app
– getattr(app, ‘__name__’, getattr (app .__ class__, ‘__name__’)) es siempre Flask
– getattr(mod, ‘__file__’, None) es la ruta absoluta de app.py en el directorio de Flask; esto se filtra cuando causamos un error debido a que la aplicación está en modo debug.
– uuid.getnode() es la dirección MAC del servidor que solicita en forma decimal, se puede obtener del fichero /sys/class/net/{Iface}/address
– get_machine_id() es el valor en /etc/machine-id o /proc/sys/kernel/random/boot_id, también algo de material de /proc/self/cgroup. Esta última parte de la función no se incluyó en los informes para descifrar el PIN.

 

Conocidos todos los datos, el usuario lo sacamos del fichero de configuración de la aplicación:

 

Para los dos últimos valores, la MAC y el id de máquina vamos a revisar el código fuente y encontramos una vulnerabilidad de LFI

Análisis del código de subidas

 

Si analizamos el código anterior reemplaza el valor ../ por un valor vacío, pero que pasaría si probásemos con doble //, es decir, con ..//

Nos vamos a burp y lo probamos a ver si podemos explotar la vulnerabilidad

Explotando LFI

 

Y bingo, ya tenemos la mac mediante la explotación de LFI, ahora sólo nos queda obtener el resto de valores necesarios para generar nuestro PIN.

Con todos los valores obtenidos, cogemos el script de HackTricks y le hacemos algunas modificaciones, en el caso que indica la web se utiliza el cifrado md5, con el cual no pudimos hacer nada ya que sería para una versión más antigua de Werkzeug Debugger, así que modificamos el código para utilizar sha1 en su lugar, y quedaría tal que así

 

Con nuestro exploit terminado, lo ejecutamos

Introducimos el PIN en la consola y ya tenemos acceso

Acceso a la consola conseguido

 

Ahora que ya estamos en la consola, vamos a ejecutar el siguiente payload 

Y automáticamente tendremos acceso a la máquina

Bueno, una vez dentro nos fijamos en la máquina, y somos root, una shell mediocre y pocas cosas que hacer, evidentemente es un contenedor, así que vamos a buscar la forma de salir de él.

 

Recordamos el puerto filtrado anteriormente, el 3000, así que vamos a tratar de llegar al mismo utilizando chisel para hacer un forward del puerto hacia nuestra máquina local.

Nos descargaremos el cliente en nuestra máquina y en el contenedor y ejecutaremos el mismo en ambos lados.

En nuestro kali

Y en la máquina víctima

Y boom, llegamos a un nuevo portal web en el puerto 3000

 

Se trata de gitea, un software opensource para el almacenamiento de repositorios git. Navegamos un poco por el portal, nos creamos una cuenta… pero nada, parece que no es el camino.

Volvemos a revisar el código git que obtuvimos anteriormente y descubrimos una cosa que antes pasamos por alto, hay otro branch.

Así que vamos a cambiar de rama

Y revisamos los cambios entre las ramas

 

En concreto el cambio del fichero settings.json, así que revisamos las modificaciones realizadas

 

Y obtenemos un usuario y una contraseña que vamos a utilizar en el portal web

Accediendo con el usuario dev01

 

Revisamos el repositorio home-backup del usuario y vemos una clave ssh, así que vamos a descargar la misma

Obteniendo la clave ssh del usuario

 

Obteniendo la flag de user

Como ya tenemos la clave ssh del usuario, accedemos utilizando la misma y conseguiremos acceso a la máquina y la flag de user

 

Escalado de privilegios

El siguiente paso será root, revisamos la máquina un poco por encima pero no tenemos permisos de root con este usuario así que vamos a enumerar con linenum y pspy y observamos un proceso cronificado muy interesante

Descubriendo procesos con pspy en Opensource

 

Cada poco tiempo se ejecuta un fichero git-sync con bash cuyo contenido es el siguiente

El script detecta si hay cambios en el git de la home del usuario dev01 y si se da el caso, realiza un commit de los mismos, por lo que es una forma de poder escalar privilegios a root.

Revisamos el contenido del directorio .git del usuario y encontramos un texto interesante en el fichero /home/dev01/.git/hooks/pre-commit.sample

Así que vamos a hacerle caso, generamos un fichero llamado pre-commit en ese mismo directorio con una reverse shell

Y sólo nos queda esperar a que se ejecute de nuevo para conseguir una shell como root

 

Obteniendo la flag de root

Siendo ya root, sólo nos queda ir a la home de dicho usuario y coger 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 *