AbuseHumanDB — HackTheBox Write-Up

Luciano Anezin
3 min readNov 27, 2021

--

AbuseHumanDB — Hack The Box

En el primer post de este blog vamos a examinar un challenge de Hack The Box llamado “AbuseHumanDB” y como efectuar un Blind XS Leak+ CORS bypass.

Durante el challenge vamos a tener disponible el código, la intención es hacer Code Review para lograr la explotación.

Análisis

En primer lugar podemos ver que en el archivo “database.js” se inserta el flag, pero a diferencia del resto, con approved = 0

Dentro de la página, en public entries, podemos ver todas las entradas con approved = 1. En la home principal es posible subir una URL para que posteriormente sea aprobada por medio de un puppeteer, este va a ser el encargado de acceder a nuestra URL maliciosa.

Sí queremos buscar el flag (HTB{flag}) en el endpoint de /api/entries/search, no vamos a obtenerningún resultado, ya que sólo va a traer los approved = 0 desde la IP local 127.0.0.1:1337.

En esta parte es donde entra la fuerza bruta basada en errores, sí tratamos de hacer una busqueda de “Back” vamos a obtener un código 200 porque esa entrada existe, en caso contrario devuelve 404.

¿Que sucede al tratar de hacer simplemente un fetch mediante javascript? Nos va a dar un error de “blocked by CORS policy”, por lo que esa query debe venir desde dentro del servicio y aquí es donde entra en juego el puppeteer, este va a ser el encargado de ejecutar nuestro js malicioso localmente.

Explotación

Vamos a hacer bruteforce en base a los códigos de error de la página, sabiendo que:

script.onload = 200 -> Vamos por buen camino

script.onerror = 404 -> Descartamos ese caracter

Para hostear localmente nuestro script levantamos un servidor nginx en nuestra computadora para escribir nuestro index.html

Y para que sea visible públicamente podemos ejecutar un servicio de ngrok que va a publicar lo que tengamos en nuestro localhost. En los access.log de error de ngrok también vamos a ir recibiendo el flag por partes mediante un error 404 gracias al fetch de la línea 25.

Al subir la URL dentro de puppeteer se va a ejecutar nuestro exploit y recibiremos el flag.

>>>print(“h4ppy_h4ck1ng”)

>>>exit()

--

--

Luciano Anezin

Application Security | Red Team | OSWE | Technology enthusiast | GitHub @Luchoane