Deuxième challenge d'introduction à la programmation, bonne chance !
Connexion: nc intro.ctfrei.fr 5001
Ce challenge tourne sur un docker et n'est pas disponible
Solution
Comme les questions sont toujours les mêmes, il suffit de prévoir les réponses à envoyer en fonction de la question. Pour connaître la question, on va simplement détecter un mot unique dans celle-ci.
from pwn import remote, context
context.log_level = 'error'
# A chaque mot identifiants une question, on associe la bonne réponse
QUESTIONS_ANSWERS = [
(b'Trump', b'Homme'),
(b'capitale', b'Paris'),
(b'racine', b'2'),
(b'librairie', b'pwntools'),
(b'challenge', b'Oblivios'),
(b'somme', b'4')
]
# Connexion
client = remote('intro.ctfrei.fr', 5001)
# Réception de la première ligne inutile
client.recvline()
for i in range(6):
# Réception de la question
data = client.recvline()
# Pour chaque couple question/réponse
for question, answer in QUESTIONS_ANSWERS:
# Si le mot identifiant la question est dans ce qu'on a reçu
if question in data:
# Envoi de la réponse associée
client.sendline(answer)
break
# On recoit 2 lignes, le flag est dans la seconde
print(client.recvlines(2)[1].decode())
# CTFREI{b4s1c_pwnt00l5_pr0gramm1ng