À l'envers

alenvers

Dans ce challenge d'introduction, nous devons nous connecter à un serveur et lui répondre rapidement avant que la connexion se coupe, ce qu'il nous dit mais en inversant totalement la chaîne de caractères

Scripting

Nous allons créer un script qui va retourner les chaînes de caractères que le serveur nous donne.

import socket

class Netcat:
    """ Python 'netcat like' module """

    def __init__(self, ip, port):
        self.buff = ""
        self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.socket.connect((ip, port))

    def read(self, length=1024):
        """ Read 1024 bytes off the socket """

        return self.socket.recv(length)

    def read_until(self, data):
        """ Read data into the buffer until we have data """

        while not data in self.buff:
            self.buff += self.socket.recv(1024)

        pos = self.buff.find(data)
        rval = self.buff[:pos + len(data)]
        self.buff = self.buff[pos + len(data):]

        return rval

    def write(self, data):
        self.socket.sendall(data)

    def close(self):
        self.socket.close()

nc = Netcat('challenges.france-cybersecurity-challenge.fr', 2000)

# On récupère le contenu du buffer
data = nc.read().decode()
print(data)
while "FCSC" not in data:
    data = data.strip().replace(">>> ","")
    data = data[::-1]
    print(data)
    nc.write((data+"\n").encode())
    data = nc.read().decode().strip()
    # Si data est vide et tant qu'il l'est, on récupère le contenu du buffer
    while data == "":
        data = nc.read().decode().strip()
        print(data)
    print(data)
    if "Bye" in data:
        print(data)
        break
    if "Well done" in data:
        data = data.strip().replace("Well done, continue!", "")
        # Si data est vide et tant qu'il l'est, on récupère le contenu du buffer
        while data == "":
            data = nc.read().decode().strip()
            print(data)

Dans ce script, nous avons une classe Netcat pour pouvoir se connecter via un sockets sur le serveur.

Note : cette classe n'est pas de moi, merci github

Explications

  • On se connecte au serveur challenges.france-cybersecurity-challenge.fr sur le port 2000
  • On initalise les transactions en lisant le socket pour récupérer la réponse du serveur
  • Tant que nous n'avons pas trouver le motif FCSC
  • On supprime la chaîne >>> de la réponse contenue dans la variable data
  • On inverse la chaîne de caractères
  • On envoie cette chaîne concaténée au caractère \n
  • Tant que la variable data est vide, on lit le socket et on affiche son contenu
  • Si Bye est dans la réponse, on arrête la boucle pour terminer l'execution du script
  • Si Well done est dans la réponse, on supprime la chaîne Well done, continue! de la réponse contenue dans la variable data
  • Tant que la variable data est vide, on lit le socket et on affiche son contenu

L'exécution du script nous donne donc :

┌──(kali㉿tyrell)-[~/FCSC/FCSC2022/Challenges/intro/alenvers]
└─$ python3 inverse.py
>>> ANSSI

ISSNA
Well done, continue!
>>> Agence
ecnegA
Well done, continue!
>>> nationale
elanoitan
Well done, continue!
>>> Oui
iuO
Well done, continue!
>>> Bonjour
ruojnoB
Well done, continue!
>>> France
ecnarF
Well done, continue!
>>> baguette
etteugab
Well done, continue!
>>> cassoulet
teluossac
Well done, continue!
>>> AQWDumQm
mQmuDWQA
Well done, continue!
>>> 0jZnjgaO
OagjnZj0
Well done, continue!
>>> wiOMUYzD
DzYUMOiw
Well done, continue!
>>> FhyS4McN
NcM4SyhF
Well done, continue!
>>> 7Ov6csYm
mYsc6vO7
Well done, continue!
>>> VYx6I9EC
CE9I6xYV
Well done, continue!
>>> SwLQ6iEp
pEi6QLwS
Well done, continue!
>>> fz2kkcJw
wJckk2zf
Well done, continue!
>>> ZADWjC8iJkJ5Rz1LDv8wxNje8Z39teu3
3uet93Z8ejNxw8vDL1zR5JkJi8CjWDAZ
Well done, continue!
>>> GXO6cc89s2N1Gg8gSrchzEQWhp28hMu8
8uMh82phWQEzhcrSg8gG1N2s98cc6OXG
Well done, continue!
>>> sniklGeUo9dAw6HUBmmJdk8LhPrB2eJR
RJe2BrPhL8kdJmmBUH6wAd9oUeGlkins
Well done, continue!
>>> BvZxrePGhNOe8Z2HdFqsl5oPZMRoNAiL
LiANoRMZPo5lsqFdH2Z8eONhGPerxZvB
Well done, continue!
>>> eYr3zoPYhRiDtqWfsWlEapSsNYRPc1BW
WB1cPRYNsSpaElWsfWqtDiRhYPoz3rYe
Well done, continue!
>>> fQYtoewGawArHWGaTkXsatQsc8Q4zGIq
qIGz4Q8csQtasXkTaGWHrAwaGweotYQf
Well done, continue!
>>> V1U66ZpG4Yrsvi0J0DHiD41VzS3T9gxf
fxg9T3SzV14DiHD0J0ivsrY4GpZ66U1V
Well done, continue!
>>> Hbo82WPxIRrfLrBswSgSPbTJCgiybhVg
gVhbyigCJTbPSgSwsBrLfrRIxPW28obH
Well done, continue!
Congratulations!! Here is your flag:
:galf ruoy si ereH !!snoitalutargnoC
FCSC{7b20416c4f019ea4486e1e5c13d2d1667eebac732268b46268a9b64035ab294d}

Flag :

FCSC{7b20416c4f019ea4486e1e5c13d2d1667eebac732268b46268a9b64035ab294d}
cat