Accès par NAT
Cette carte permet à la VM Debian d’accéder à Internet et de télécharger les images Docker depuis le registre GitHub.
PS> python client.py → VM Debian → Docker
Cette méthode permet d’exécuter les conteneurs Docker dans une machine virtuelle Debian, tout en développant et en lançant les scripts Python directement sous Windows.
WINDOWS Écriture et exécution du script client.py
│ connexion TCP
▼
VIRTUALBOX VM Debian accessible par son adresse IP
│ port Docker publié
▼
DOCKER Serveur TCP du challenge
│ réponses correctes
▼
FLAG{mission_reussie}
localhost. Le serveur Docker
fonctionne dans la VM Debian : il faut utiliser l’adresse IP de
cette VM.
Cette carte permet à la VM Debian d’accéder à Internet et de télécharger les images Docker depuis le registre GitHub.
Cette carte crée un réseau privé entre Windows et la VM Debian. Le script Python Windows peut ainsi joindre les conteneurs.
Le programme Python reste sous Windows et utilise l’adresse IP de la carte réseau privée de Debian.
Les fichiers Compose sont exécutés dans Debian. Chaque mission démarre son propre serveur TCP dans un conteneur.
La machine virtuelle Debian doit être arrêtée avant de modifier sa configuration réseau.
Configuration → Réseau → Carte 1
Activez la carte et sélectionnez le mode Accès par NAT.
Configuration → Réseau → Carte 2
Activez la carte et sélectionnez Réseau privé hôte.
La VM peut être préparée à l’avance avec Docker, SSH et les deux cartes réseau déjà configurées. Tous les élèves peuvent utiliser la même adresse IP privée, car chaque réseau VirtualBox reste local au poste Windows.
Lancez VirtualBox, démarrez la VM Debian puis ouvrez une session avec les identifiants fournis.
Vérifiez que Docker est disponible :
docker --version
docker compose version
Vérifiez également que Debian accède à Internet :
ping -c 4 github.com
Dans le terminal Debian, exécutez :
ip -br address
Plusieurs interfaces peuvent apparaître. Recherchez celle qui correspond au réseau privé hôte VirtualBox.
lo UNKNOWN 127.0.0.1/8
enp0s3 UP 10.0.2.15/24
enp0s8 UP 192.168.56.10/24
10.0.2.15 correspond à la carte NAT.
192.168.56.10 correspond au réseau privé entre
Windows et Debian. C’est cette adresse qu’il faudra utiliser
dans le script Python.
Ouvrez PowerShell sous Windows puis testez la communication avec l’adresse IP de la VM :
ping 192.168.56.10
Remplacez cette adresse par celle réellement affichée dans Debian.
Depuis Windows, ouvrez le challenge dans CTFd puis téléchargez le fichier :
compose.yml
Créez un dossier différent pour chaque mission.
C:\CTF\PYTHON_00\
compose.yml
Le fichier téléchargé sous Windows doit être accessible depuis la VM Debian. Plusieurs méthodes sont possibles.
C’est la méthode la plus simple lorsque la VM a été préparée avec les additions invité VirtualBox.
Le fichier est envoyé depuis PowerShell vers Debian grâce au serveur SSH de la VM.
Une interface graphique permet de transférer les fichiers par glisser-déposer entre Windows et Debian.
Il est également possible d’ouvrir CTFd depuis un navigateur installé dans la VM Debian.
Dans VirtualBox, ouvrez la configuration de la VM puis ajoutez un dossier partagé.
Chemin du dossier
Sélectionnez par exemple le dossier Windows
C:\CTF.
Nom du dossier
Utilisez un nom simple comme CTF.
Montage automatique
Activez cette option afin que Debian monte automatiquement le dossier au démarrage.
Configuration permanente
Activez cette option pour conserver le partage après le redémarrage de la VM.
Dans Debian, le dossier partagé peut apparaître à cet emplacement :
/media/sf_CTF
Copiez ensuite le fichier Compose dans le dossier de travail :
mkdir -p ~/ctf/python00
cp /media/sf_CTF/PYTHON_00/compose.yml ~/ctf/python00/
vboxsf. Cette configuration peut
être réalisée à l’avance dans la VM distribuée par l’enseignant.
Depuis PowerShell, créez d’abord le dossier distant :
ssh eleve@192.168.56.10 "mkdir -p ~/ctf/python00"
Envoyez ensuite le fichier :
scp .\compose.yml eleve@192.168.56.10:/home/eleve/ctf/python00/
eleve par le nom d’utilisateur Debian et
192.168.56.10 par l’adresse IP réelle de la VM.
Dans la VM Debian, placez-vous dans le dossier qui contient le fichier YAML :
cd ~/ctf/python00
ls
Le fichier compose.yml doit apparaître.
Démarrez ensuite le challenge :
docker compose up -d
Vérifiez son état :
docker compose ps
Docker télécharge automatiquement l’image du challenge depuis le registre GitHub. Le premier lancement peut donc être plus long que les suivants.
Le numéro du port est indiqué dans la description de la mission.
Il est également visible dans le fichier compose.yml.
ports:
- "10000:10000"
10000 Port accessible sur la VM Debian.
10000 Port utilisé à l’intérieur du conteneur.
Dans cet exemple, le serveur est accessible depuis Windows avec :
Adresse : 192.168.56.10
Port : 10000
Protocole : TCP
Dans PowerShell, utilisez la commande suivante :
Test-NetConnection 192.168.56.10 -Port 10000
Le résultat attendu est :
TcpTestSucceeded : True
False, vérifiez l’adresse IP,
le numéro de port et l’état du conteneur avec
docker compose ps.
Le script est créé et exécuté directement sous Windows.
import socket
SERVEUR = "192.168.56.10"
PORT = 10000
client = socket.socket(
socket.AF_INET,
socket.SOCK_STREAM
)
client.connect((SERVEUR, PORT))
message = client.recv(1024).decode().strip()
print("Serveur :", message)
reponse = input("Réponse : ")
client.sendall(reponse.encode())
resultat = client.recv(1024).decode().strip()
print("Serveur :", resultat)
client.close()
Remplacez 192.168.56.10 par l’adresse IP de votre
VM Debian.
Le port change selon la mission.
Ouvrez PowerShell dans le dossier qui contient votre script :
cd C:\CTF\PYTHON_00
python client.py
Selon l’installation de Python, la commande peut également être :
py client.py
Le script Windows communique maintenant avec le serveur Docker exécuté dans la VM Debian.
Lorsque toutes les réponses sont correctes, le serveur transmet le flag. Copiez-le entièrement dans la zone de validation CTFd.
Dans Debian, depuis le dossier de la mission :
docker compose down
Cette commande arrête et supprime le conteneur. Le fichier
compose.yml et le script Python restent conservés.
docker compose up -d
Démarrer le challenge.
docker compose ps
Vérifier l’état du conteneur.
docker compose logs
Afficher les messages du serveur.
docker compose restart
Redémarrer le challenge.
docker compose down
Arrêter et supprimer le conteneur.
ip -br address
Afficher les adresses IP de Debian.
Test-NetConnection
Tester le port depuis Windows.
Ctrl + C
Interrompre un script Python bloqué.
Vérifiez la deuxième carte réseau VirtualBox, son mode
« Réseau privé hôte » et l’adresse affichée par
ip -br address.
Vérifiez que la première carte réseau est activée en mode NAT.
Testez ensuite avec ping -c 4 github.com.
Vérifiez que Docker est installé et que votre utilisateur
possède les droits nécessaires. Essayez temporairement
sudo docker compose ps.
Vérifiez les additions invité VirtualBox et l’appartenance de
l’utilisateur Debian au groupe vboxsf.
Vérifiez que le conteneur est actif avec
docker compose ps, puis testez le port depuis
PowerShell avec Test-NetConnection.
Un ancien challenge est probablement encore actif. Affichez
les conteneurs avec docker ps puis arrêtez celui
qui utilise le port.
Interrompez-le avec Ctrl + C puis affichez
précisément les données reçues avec
print(repr(message)).
Utilisez localhost comme adresse du serveur.
Utilisez l’adresse IP privée de Debian, par exemple
192.168.56.10.
Le port change selon le challenge et reste indiqué dans sa description.
Le flag obtenu est toujours validé sur la plateforme CTFd.
01 Utiliser un dossier différent par mission.
02 Vérifier l’adresse IP avant de lancer le script.
03 Ne pas transmettre les flags aux autres élèves.
04 Arrêter le conteneur après la mission.
05 Conserver ses scripts Python.
06 Être capable d’expliquer son programme.