Let's meet

Flag: HACKDAY{BL1ND_SSRF_W1TH_F1LT3R_BYP4SS_R0CKS_!!!}

Challenge

file-download
2KB
circle-info

Description


During a routine inventory of old development servers, the IT team stumbled upon a forgotten directory: project-legacy.

It’s a prototype for an internal scheduling tool whose development was halted in 2000's, but it was never officially decommissioned. The services are still running in a closed loop, and no one has bothered to patch the vulnerabilities since.

You have been tasked to audit this relic to evaluate the chance of deploying again this project, but this time in production.

https://xmywauknwa.hackday.frarrow-up-right

circle-exclamation

Solution

Quand on book une réunion, une requête POST est faite et elle sauvegardé dans une base de données pour la réutiliser si on supprime par erreurs la réunion.

POST /book HTTP/2
Host: xmywauknwa.hackday.fr
Cookie: session_token=<JWT_TOKEN>
Content-Length: 43
Content-Type: application/x-www-form-urlencoded
Referer: https://xmywauknwa.hackday.fr/book?d=1&m=JAN

name=test&month=JAN&day=1&details=&members=

Sauf qu'en bidouillant un peu les entêtes, on découvre qu'en modifiant le Referer ça modifie la réunion lors du rebook.

En fait, c'est l'URL dans le Referer qui est appelé lors du rebooking. On peut donc l'utiliser pour faire une requête sur l'API admin interne comme décris dans note.txt :

Sauf qu'après plusieurs test, on se rend compte qu'il faut absolument d=&m= dans l'url pour que le serveur puisse les parser et rebook la réunion tout en appelant l'url.

On va donc juste les ajouter à la fin derrière une ancre # :

Maintenant on trigger une alerte SSRF : on est sur la bonne voie. Il faut simplement bypass la vérification de 127.0.0.1 avec un alias du localhost gentiment donné par un LLM.

Puis en rebookant :

Mis à jour