
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 port2000
- 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 variabledata
- 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îneWell done, continue!
de la réponse contenue dans la variabledata
- 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}
