Skip to main content
HackTheBox machines - Oouch

HackTheBox machines – Oouch WriteUp

Oouch es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox.

Oouch 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 Oouch 10.10.10.183 a /etc/hosts como oouch.htb y comenzamos con el escaneo de puertos nmap.

Obtenidos los puertos abiertos comenzamos enumerando los mismos.

 

Enumeración

Empezaremos enumerando el puerto ftp y comprobando si podemos acceder de forma anónima:

Accedemos y descargamos el fichero existente project.txt cuyo contenido es el siguiente:

En el mismo nos menciona dos aplicaciones, una basada en flask en la dirección de consumer y otra en django en la dirección de authorization, así que añadimos dichos subdominios a nuestro fichero de /etc/hosts quedando de la siguiente forma:

Procedemos a acceder al primer portal web, consumer, en el puerto 5000 y obtenemos la siguiente pantalla de login:

 

Observamos que también tenemos una pantalla de registro:

 

Así que nos registramos y accedemos al portal con las credenciales creadas, accediendo al siguiente portal:

 

Navegamos por el pero tampoco podemos descubrir demasiadas cosas al respecto, utilizamos dirb para ver si podemos conseguir más información, directorios o ficheros existentes en el mismo y descubrimos lo siguiente:

 

Tenemos una página de oauth donde podemos conectar con la página de autorización pero no tenemos credenciales a la misma, así que procedemos a acceder al portal en el puerto 8000 a través de la dirección creada para authorization y observamos el siguiente panel web:

 

Al igual que hicimos en el anterior portal, nos registramos y accedemos al mismo, obteniendo el siguiente panel:

Lanzaremos en este caso también dirb para descubrir las rutas existentes en el mismo y obtenemos el siguiente resultado:

Y también el siguiente:

 

Con lo descubierto hasta el momento parece que tenemos que bypassear este método de autorización para conseguir nuestro token, así que buscamos información en google y encontramos el siguiente post donde explica bastante bien como hacer el ataque a oauth2.

Al parecer tenemos que enviar nuestra petición, que será autorizada por nuestro usuario en la web de autorización y después tendremos que hacer uso de la explotación de SSRF para poder bypassear el mecanismo y conseguir acceso con un usuario diferente que nos proporcione más permisos en la aplicación, así que procedemos a realizar el mismo.

Accederemos a la url /oauth, descubierta anteriormente, en el panel de consumer y vemos la siguiente pantalla:

Por el momento no disponemos de acceso para acceder a la sección de login así que pincharemos en la sección de connect e interceptaremos la petición con burpsuite, obteniendo una petición con el siguiente código:

Al hacer esta peticion nos llevará a una ventana para autorizar la petición:

 

Autorizaremos la misma y realizará otra petición donde obtendremos el código del token:

 

Copiaremos el código del token y dropearemos la conexión en burpsuite, debido a que el token es de un sólo uso y si lo enviamos ya no podremos utilizarlo más.

Cogeremos el código de la petición y lo enviaremos a través de la sección de contact que vimos antes en el panel de consumer:

 

Realizado este paso, esperamos unos segundos y enviamos una petición a la url /oauth/login de la web de consumer, autorizamos la misma y automáticamente habremos conseguido saltarnos la restricción y entrar con el usuario qtc:

 

 

 

Con el cual podemos ver varios ficheros en la sección de Documents que son los siguientes:

 

Viendo los documentos, tenemos las claves para permitir el registro de aplicaciones así que será el siguiente paso que tendremos que realizar.

Procedemos a la uri de /oauth/applications/register/ y vemos la siguiente pantalla:

 

Una vez creada, y siguiendo la documentación, enviamos la petición con nuestros parámetros:

Abrimos una escucha al puerto indicado antes de enviarla y obtenemos el siguiente error:

Parece que la misma no ha funcionado, así que al igual que en la anterior ocasión, enviaremos la petición desde la sección de contacto del usuario qtc en la web de consumer y obtendremos el siguiente resultado en la escucha:

Tenemos una cookie de sesión del usuario qtc, así que volvemos al portal de authorization, editaremos las cookies del navegador (en nuestro caso, con firefox, desde el inspector del mismo) y recargaremos la página, obteniendo acceso con el usuario qtc como vemos en la siguiente captura:

 

A continuación, necesitaremos modificar los permisos de nuestra app para obtener las credenciales de cliente en lugar de la autorización y utilizaremos curl para conseguir nuestro token, así que construimos la url y enviamos la petición, consiguiendo el mismo:

Ya tenemos nuestro token, ahora sólo nos queda consultar en la uri de /api/get_user como vimos anteriormente en la sección de comentarios, enviamos la siguiente petición:

Y obtenemos la siguiente respuesta:

Tenemos los datos, pero necesitamos la clave ssh, así que enviamos la misma petición pero en lugar de a get_user a get_ssh y obtenemos en la respuesta la clave ssh del usuario qtc:

 

Obteniendo la flag de user

Obtenida la clave ssh, nos queda guardarla en un fichero, eliminar los saltos de línea y conectarnos con la misma:

Y ya estamos dentro y tenemos la flag de user, ahora a por root.

 

Escalado de privilegios

Para el escalado de privilegios, pasamos como de costumbre varios scripts para enumerar el sistema, analizamos procesos, etc, y encontramos que docker está corriendo en la máquina y varias interfaces de red para docker:

Por lo que obtenemos que hay dos rangos de red configurados para este servicio:

Verificamos en que redes disponemos de contenedores levantados y encontramos tres en total:

Aunque sólo conseguimos poder acceder a uno de ellos, el que dispone de la dirección ip 172.18.0.3:

Revisamos el mismo en profundidad y encontramos un volumen montado en la ruta /code:

En el cual encontramos el código de la aplicación:

Después de un buen rato revisando en profundidad el código encontramos una parte interesante en el fichero routes.py:

Donde se declaran varias variables para obtener objetos del bus y en el cual también tenemos a nuestra disponibilidad la interfaz utilizada.

Probamos entonces a enviar una petición para conseguir una shell al contenedor situado en la ip 172.18.0.1 pero no disponemos de permisos para ello:

Seguimos revisando y encontramos el fichero del socket de uwsgi en la ruta /tmp con www-data como propietario:

Y que existen en la máquina varios procesos para el mismo:

Esta podría ser una posible solución para la esperada escalada de privilegios, así que comprobamos la versión del mismo:

Y buscamos un exploit en google para dicha versión donde encontramos un exploit en python en el siguiente repositorio de github.

Nos descargamos el mismo y lo subimos a la máquina y posteriormente al contenedor al que teníamos acceso, además de esto necesitaremos también netcat ya que el mismo no existe en la máquina así que subiremos también el binario de nc de la máquina oouch al contenedor a través de scp

Ejecutamos el mismo en el contenedor:

Pero parece que algo no ha funcionado bien, no existe el modulo de bytes instalado en el contenedor. Nos toca entonces revisar el exploit y realizar unas modificaciones en el mismo.

Cambiaremos el siguiente código:

Por este otro:

Y volveremos a lanzarlo:

Ahora sí y vemos como nos hemos conectado al usuario www-data en nuestra escucha:

Ejecutaremos ahora otra vez el comando para comunicarnos con el bus, pero en este caso, la shell la enviaremos a nuestra máquina física, en lugar de al contenedor situado en la ruta 172.18.0.1:

Y ahora hemos conseguido ejecutar el mismo sin problemas.

 

Obteniendo la flag de root

Con la comunicación realizada con el dbus, revisamos la escucha que habíamos dejado en nuestra máquina y conseguimos una shell a la máquina oouch con el usuario root:

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 respecto en el siguiente enlace https://www.hackthebox.eu/home/users/profile/103792

 

Deja una respuesta

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