Table des matières
Objectif du challenge
Le serveur envoie via un socket réseau une série de chaînes de caractères qu’il faut renvoyer inversées.
L’enjeu est temporel : la connexion est automatiquement fermée au bout de 60 secondes, ce qui rend une approche manuelle trop lente.
Résolution du challenge
Pour tenir dans le temps imparti automatisons le processus avec un script Python qui utilise directement le module socket pour établir une connexion TCP, lire les messages, les traiter, et renvoyer les réponses au conteneur.
import socket
import time
HOST = 'localhost'
PORT = 4000
with socket.create_connection((HOST, PORT)) as sock:
while True:
time.sleep(0.5) # évite que le script ne réagisse plus vite que le serveur n’émet, ce qui peut provoquer des lectures incomplètes ou des réponses vides non sollicitées, peu élégant mais sympa visuellement dans le terminal
data = sock.recv(1024) # lecture des données envoyées par le serveur
if not data:
break
lines = data.decode().splitlines() # on peut recevoir plusieurs lignes d'un coup, donc on les découpe
for message in lines:
message = message.strip()
print("Reçu :", message)
# le serveur envoie parfois un message d'information ("Well done, continue !")
# qu'on doit ignorer pour ne traiter que les chaînes à inverser
if "well done" in message.lower():
print("Info : message ignoré ->", message)
continue
reversed_message = message[::-1] # on inverse la chaine
reversed_message = reversed_message[:-4] # on enlève les caractères parasites ">"
print("Envoyé :", reversed_message)
sock.sendall((reversed_message + '\n').encode()) # envoi de la réponse suivie d'un retour à la ligne pour valider l'entrée côté serveur
Résultat
└─$ python ./reverse_string_socket.py
Reçu : >>> ANSSI
Envoyé : ISSNA
Reçu : Well done, continue!
Info : message ignoré -> Well done, continue!
Reçu : >>> Agence
Envoyé : ecnegA
Reçu : Well done, continue!
Info : message ignoré -> Well done, continue!
Reçu : >>> nationale
Envoyé : elanoitan
Reçu : Well done, continue!
Info : message ignoré -> Well done, continue!
Reçu : >>> Oui
Envoyé : iuO
Reçu : Well done, continue!
Info : message ignoré -> Well done, continue!
Reçu : >>> Bonjour
Envoyé : ruojnoB
Reçu : Well done, continue!
Info : message ignoré -> Well done, continue!
Reçu : >>> France
Envoyé : ecnarF
...
Reçu : >>> ZPAHgzyL1d7txnlvLp9gXm8HSemm74lL
Envoyé : Ll47mmeSH8mXg9pLvlnxt7d1LyzgHAPZ
Reçu : Well done, continue!
Info : message ignoré -> Well done, continue!
Reçu : Congratulations!! Here is your flag:
Envoyé : :galf ruoy si ereH !!snoitalutar
Reçu : FCSC{7b20416c4f019ea4486e1e5c13d2d1667eebac732268b46268a9b64035ab294d}
La solution est donc FCSC{7b20416c4f019ea4486e1e5c13d2d1667eebac732268b46268a9b64035ab294d}
.