Solution de valdoin pour A l'envers

intro misc algo

25 avril 2025

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}.