Table des matières
Objectif du challenge
Dans ce challenge, on intéragit avec un serveur qui nous envoie un message en morse, qu’on doit décoder puis encoder notre réponse FLAG
qui nous permet d’obtenir le flag de ce challenge.
Résolution du challenge
Pour ce faire, j’ai écrit un script Python qui va interagir directement avec le serveur :
import socket
HOST = 'localhost'
PORT = 4000
# dictionnaire de correspondance lettre -> code morse
MORSE_DICT = {
'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..',
'E': '.', 'F': '..-.', 'G': '--.', 'H': '....',
'I': '..', 'J': '.---', 'K': '-.-', 'L': '.-..',
'M': '--', 'N': '-.', 'O': '---', 'P': '.--.',
'Q': '--.-', 'R': '.-.', 'S': '...', 'T': '-',
'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-',
'Y': '-.--', 'Z': '--..',
'0': '-----', '1': '.----', '2': '..---', '3': '...--',
'4': '....-', '5': '.....', '6': '-....', '7': '--...',
'8': '---..', '9': '----.'
}
# inversion du dictionnaire qui nous servira pour la fonction d'encodage
morse_to_letter = {value: key for key, value in MORSE_DICT.items()}
def text_2_morse(text):
return ' '.join(MORSE_DICT.get(c.upper(), '?') for c in text)
def morse_2_text(morse):
letters = morse.strip().split()
return ''.join(morse_to_letter.get(code, '?') for code in letters)
with socket.create_connection((HOST, PORT)) as sock:
while True :
data = sock.recv(1024) # lecture des données envoyées par le serveur
message = data.decode().strip()
if 'fcsc' in message.lower():
print("Solution :", message)
break # on ferme la connexion quand le serveur nous a envoyé le flag
print("Message reçu :", message)
print("Traduction :", morse_2_text(message))
reply = input("Veuillez entrer votre réponse:")
encoded_reply = text_2_morse(reply)
print("Réponse encodée :", encoded_reply )
sock.sendall((encoded_reply + '\n').encode()) # envoi de la réponse suivie d'un retour à la ligne pour valider l'entrée côté serveur
Résultat
Message reçu : --.- ..- . ...- --- ..- .-.. . --.. ...- --- ..- ...
>>>
Traduction : QUEVOULEZVOUS?
Veuillez entrer votre réponse:FLAG
Réponse encodée : ..-. .-.. .- --.
Solution : Bien joué, le flag est :
FCSC{de8b4af784cd394ecc305979ffa124a112a18046037b42c94e4e85216180847e}
La solution est donc FCSC{de8b4af784cd394ecc305979ffa124a112a18046037b42c94e4e85216180847e}
.