Game of Luck

Catégorie: Crypto Difficulté: - Flag: CTFREI{r4nd0m_1s_n0t_th4t_r4nd0m_r1gh7?}

Challenge

Description


Veux-tu tenter ta chance sur ce challenge ?

Si tu arrives à avoir 10 fois d'affilée le bon nombre aléatoire, je te donne mon flag !

Connexion: nc intro.ctfrei.fr 7500

Solution

Les nombres à trouver sont générés via la librairie random de Python. L'objectif est d'en trouver 10 en 690 tentatives. Puisqu'ils font 32bits, c'est improbable de réussir aléatoirement, il faut donc prédire les nombres.

Selon l'implémentation de l'aléatoire, il est possible de faire cela et un outil comme RandCrack permet justement cela pour la librairie random de Python. Pour cela, il lui faut 624 nombres dans un premier temps, après cela, il sera capable de prédire la suite.

from pwn import *
from randcrack import RandCrack
from tqdm import tqdm

context.log_level = 'error'

rc = RandCrack()

client = remote('intro.ctfrei.fr', 7500)
client.recvline()

for _ in tqdm(range(624)):
  client.sendlineafter(b'guess: ', b'0')
  n = int(client.recvline().split(b' ')[-1])
  rc.submit(n)

for _ in range(10):
  client.sendlineafter(b'guess: ', str(rc.predict_getrandbits(32)).encode())

print(client.recvall(1).decode())
# 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 624/624 [00:24<00:00, 25.19it/s]
# Bien joué, tu as trouvé le bon nombre !
# Bien joué ! Tu as remporté le flag suivant: CTFREI{r4nd0m_1s_n0t_th4t_r4nd0m_r1gh7?}

Dernière mise à jour

Cet article vous a-t-il été utile ?