Your region's finest

Flag: HACKDAY{Th4t_s_S0m3_g000000000000d_qu4lity!}

Challenge

file-archive
2KB
circle-info

Description


You’ve been informed that a website might be serving as a front for a large criminal network. Part of their revenue supposedly comes from selling cookies that can make you float like an airship… A rather tempting proposition. Their slogan, it seems, is: "Always wondered how to get the coolest and the highest quality products in your region ? Search no more, this new website allows you to do so !"

Attachment : app.py , sha256 : 415a046c5c03ac1ff0646cae082503af9d6bf52b7ff6db00ff0009ab7f0b0bae

challenges.hackday.fr:58990

circle-exclamation

Solution

La première étape consiste à trouver la JWT_SECRET_KEY. Pour cela, on peut voir dans le app.py qu'elle est récupérée à partir de la librairie random. Celle-ci utilise une seed, créée à partir de l'heure de démarrage du serveur ainsi que son PID. Pour cela, il faut remarquer :

  • le chemin /healthz on peut déduire l'heure de démarrage

  • Le prix des items sur le site sont obtenus avec random

JWT Secret

On peut donc brute force le PID et vérifier notre résultat avec le prix des items. Si l'on trouve les mêmes prix, c'est qu'on avait la bonne seed et donc qu'on a généré le même secret.

Injection SQL

On peut maintenant forger des JWT. Il faut s'en servir pour injecter dans la query SQL à la ligne 115. Ici, j'ai déjà créé un compte pour obtenir un JWT, il contient ceci :

Il faut donc mettre notre injection dans le champ favorite_product et se rendre sur /favorite_product_info pour la déclencher.

Mis à jour