Télécharger
Téléchargez le fichier YAML fourni dans le challenge puis enregistrez-le dans un nouveau dossier.
$ docker compose up -d
Chaque mission met à disposition un serveur TCP exécuté dans un conteneur Docker sur votre propre ordinateur. Votre objectif est de développer un script Python capable de communiquer avec ce serveur afin de récupérer un flag.
Téléchargez le fichier YAML fourni dans le challenge puis enregistrez-le dans un nouveau dossier.
Ouvrez un terminal dans ce dossier puis démarrez le conteneur avec Docker Compose.
Complétez votre client Python pour vous connecter au serveur local et répondre à ses demandes.
Lorsque le programme reçoit un flag, copiez-le dans la zone de validation de CTFd.
CTFd Téléchargement du fichier compose.yml
│
▼
DOCKER Création du conteneur sur le PC de l’élève
│ port publié sur localhost
▼
PYTHON Connexion vers localhost:PORT
│ échanges TCP
▼
FLAG{mission_reussie}
Docker permet de lancer sur votre ordinateur le serveur nécessaire au challenge sans avoir à installer ou à configurer manuellement son environnement.
Chaque mission possède son propre conteneur, son propre programme serveur et éventuellement son propre numéro de port.
Créez un dossier spécifique pour la mission. Évitez de mélanger les fichiers de plusieurs challenges.
PYTHON_00/
compose.yml
client.py
Téléchargez le fichier YAML proposé dans la fenêtre du challenge puis placez-le dans ce dossier.
compose.yml,
compose.yaml ou docker-compose.yml.
Ne modifiez pas son contenu sauf indication contraire.
Ouvrez un terminal directement dans le dossier qui contient le fichier YAML.
cd chemin/vers/PYTHON_00
Se déplacer dans le dossier de la mission.
dir
Vérifier sous Windows que le fichier YAML est présent.
ls
Vérifier sous Linux que le fichier YAML est présent.
docker --version
Vérifier que Docker est installé et accessible.
docker compose up -d
Cette commande télécharge l’image nécessaire si elle n’est pas déjà présente, puis démarre le conteneur du challenge en arrière-plan.
docker compose up -d
Démarrer le challenge.
docker compose ps
Vérifier que le conteneur est actif.
docker compose logs
Afficher les messages produits par le conteneur.
docker compose restart
Redémarrer le challenge en cas de besoin.
Docker Desktop doit être démarré avant d’utiliser la commande
docker compose up -d.
Le numéro de port est indiqué dans la consigne du challenge ou dans le fichier YAML.
ports:
- "30000:5000"
Dans cet exemple :
30000 Port utilisé par le script de l’élève.
5000 Port utilisé à l’intérieur du conteneur.
localhost:30000.
import socket
SERVEUR = "localhost"
PORT = 30000
client = socket.socket(
socket.AF_INET,
socket.SOCK_STREAM
)
client.connect((SERVEUR, PORT))
while True:
message = client.recv(1024).decode().strip()
if not message:
break
print("Serveur :", message)
reponse = input("Réponse : ")
client.sendall(reponse.encode())
client.close()
Le serveur TCP fonctionne dans un conteneur Docker lancé sur votre
propre ordinateur. L’adresse localhost désigne donc
votre machine.
Il ne faut pas mettre l’adresse du site CTFd dans la variable
SERVEUR.
python client.py
Selon l’installation de Python, la commande peut également être :
python3 client.py
Le programme doit afficher le premier message envoyé par le serveur. Vous pouvez ensuite adapter le script pour calculer et envoyer automatiquement les réponses.
Lorsque toutes les réponses sont correctes, le serveur envoie un flag. Copiez-le entièrement dans la zone de validation du challenge.
docker compose down
Cette commande arrête et supprime le conteneur créé pour la mission. Le fichier YAML et votre script Python restent présents dans votre dossier.
docker compose stop
Arrêter le conteneur sans le supprimer.
docker compose start
Redémarrer un conteneur précédemment arrêté.
docker compose down
Arrêter et supprimer le conteneur.
docker compose down -v
Réinitialiser complètement la mission et ses données.
Vérifiez que Docker Desktop est installé, démarré et que le terminal a été ouvert après son installation.
Vérifiez que le terminal est bien positionné dans le dossier contenant le fichier téléchargé.
Vérifiez que le conteneur fonctionne avec
docker compose ps et que le numéro de port du
script correspond à celui du challenge.
Un ancien challenge fonctionne peut-être encore. Arrêtez-le
avec docker compose down avant de relancer la
nouvelle mission.
Utilisez Ctrl + C pour l’interrompre puis affichez
précisément les données reçues avec
print(repr(message)).
01 Conserver un dossier différent par mission.
02 Utiliser ses propres scripts Python.
03 Ne pas transmettre directement les flags.
04 Ne pas modifier les fichiers Docker sans consigne.
05 Arrêter le conteneur après la mission.
06 Être capable d’expliquer son programme.