Aller au contenu principal

CTF « La porte oubliée »

Dimanche soir. L'association Les Jardins du Port héberge son site sur un petit serveur. Le bénévole qui l'avait installé est parti, sans documentation. Avant de le rattacher au réseau de l'association, vous faites l'inventaire de ce qui répond sur ce serveur.

info

Ce défi est un CTF (Capture The Flag) : il n'y a pas d'étapes guidées. Vous cherchez, vous trouvez un flag (un mot caché), puis vous le saisissez dans l'application Joligo, dans l'activité « La porte oubliée ». L'association, son serveur et les fichiers sont fictifs. Les services tournent uniquement sur votre propre machine.

attention

Ne balayez jamais les ports d'une machine qui ne vous appartient pas, sans autorisation écrite : c'est interdit par la loi. Ici, tout reste sur 127.0.0.1, votre propre VM.

Petite vérification​

Avant de commencer, vérifiez si vous savez encore réaliser ces 3 actions très simples, sur la séance précédente consacrée au balayage de ports :

  1. dans ~/tp-scan, relancer un petit serveur avec python3 -m http.server 8080 --bind 127.0.0.1 --directory site &
  2. balayer la plage avec nmap -p 8070-8100 127.0.0.1
  3. arrêter le serveur avec pkill -f "http.server 8080", puis relancer le balayage
📌 Réponse attendue

Votre mission​

Vous êtes l'administrateur système. Le script de la section suivante reconstitue le serveur de l'association : trois petits services web écoutent sur la boucle locale, entre les ports 8170 et 8200. Deux sont connus (le site public et la gestion) ; le troisième a été oublié.

Faites l'inventaire comme un attaquant le ferait : balayez la plage, identifiez les services, et lisez ce que l'oublié laisse voir. Trouvez le code de sauvegarde qui s'y trouve.

Le matériel​

Chaque participant reçoit un flag personnel : inutile de comparer avec vos voisins, le vôtre ne marcherait pas chez eux. Dans l'application Joligo, ouvrez l'onglet Profil et relevez votre code personnel (8 caractères, carte « Mon code personnel (défis CTF) »).

Dans votre VM Debian (remplacez a1b2c3d4 par votre code) :

sudo apt install nmap curl openssl
mkdir -p ~/ctf-ports
cd ~/ctf-ports
CODE=a1b2c3d4
attention

Le script ci-dessous fabrique le serveur de l'association (trois services web locaux) (c'est le travail du « méchant » de l'histoire). Ne le décodez pas pour le lire : ce serait lire la solution avant d'avoir cherché. Analysez ce qui répond sur les ports.

base64 -d <<'EOF' | bash -s -- "$CODE"
Q09ERT0iJDEiCmlmIFsgLXogIiRDT0RFIiBdOyB0aGVuIGVjaG8gIlVzYWdlIDogYmFzaCAtcyAt
LSBWT1RSRV9DT0RFIiA+JjI7IGV4aXQgMTsgZmkKS0VZPSJhMDcxYzNlOWVhNzc1MWJkOWM0MiIK
RkxBRz0kKHByaW50ZiAlcyAiJENPREUiIHwgb3BlbnNzbCBkZ3N0IC1zaGEyNTYgLWhtYWMgIiRL
RVkiIC1yIHwgY3V0IC1jMS0xMikKZm9yIHBvcnQgaW4gODE4MCA4MTgxIDgxOTU7IGRvCiAgaWYg
KGV4ZWMgMzw+L2Rldi90Y3AvMTI3LjAuMC4xLyRwb3J0KSAyPi9kZXYvbnVsbDsgdGhlbgogICAg
ZWNobyAiTGUgcG9ydCAkcG9ydCBlc3QgZMOpasOgIHV0aWxpc8OpIHN1ciBjZXR0ZSBtYWNoaW5l
IDogYXJyw6p0ZXogbGUgc2VydmljZSBxdWkgbCdvY2N1cGUgcHVpcyByZWNvbW1lbmNlei4iID4m
MgogICAgZXhpdCAxCiAgZmkKZG9uZQpta2RpciAtcCBzZXJ2ZXVyL3ZpdHJpbmUgc2VydmV1ci9n
ZXN0aW9uIHNlcnZldXIvc2F1dmVnYXJkZQplY2hvICJWaXRyaW5lIGRlIGwnYXNzb2NpYXRpb24g
TGVzIEphcmRpbnMgZHUgUG9ydCIgPiBzZXJ2ZXVyL3ZpdHJpbmUvaW5kZXguaHRtbAplY2hvICJJ
bnRlcmZhY2UgZGUgZ2VzdGlvbiA6IHJlc2VydmVlIGEgbCdlcXVpcGUiID4gc2VydmV1ci9nZXN0
aW9uL2luZGV4Lmh0bWwKcHJpbnRmICdTYXV2ZWdhcmRlIGRlIHRlc3Qgb3VibGllZSBzdXIgbGUg
c2VydmV1clxuQ29kZSBkZSBzYXV2ZWdhcmRlIDogJXNcbicgIiRGTEFHIiA+IHNlcnZldXIvc2F1
dmVnYXJkZS9ub3Rlc19zYXV2ZWdhcmRlLnR4dApub2h1cCBweXRob24zIC1tIGh0dHAuc2VydmVy
IDgxODAgLS1iaW5kIDEyNy4wLjAuMSAtLWRpcmVjdG9yeSBzZXJ2ZXVyL3ZpdHJpbmUgPiAvZGV2
L251bGwgMj4mMSA8IC9kZXYvbnVsbCAmCm5vaHVwIHB5dGhvbjMgLW0gaHR0cC5zZXJ2ZXIgODE4
MSAtLWJpbmQgMTI3LjAuMC4xIC0tZGlyZWN0b3J5IHNlcnZldXIvZ2VzdGlvbiA+IC9kZXYvbnVs
bCAyPiYxIDwgL2Rldi9udWxsICYKbm9odXAgcHl0aG9uMyAtbSBodHRwLnNlcnZlciA4MTk1IC0t
YmluZCAxMjcuMC4wLjEgLS1kaXJlY3Rvcnkgc2VydmV1ci9zYXV2ZWdhcmRlID4gL2Rldi9udWxs
IDI+JjEgPCAvZGV2L251bGwgJgpwcmludGYgJ3BraWxsIC1mICJodHRwLnNlcnZlciA4MTgwIlxu
cGtpbGwgLWYgImh0dHAuc2VydmVyIDgxODEiXG5wa2lsbCAtZiAiaHR0cC5zZXJ2ZXIgODE5NSJc
bicgPiBhcnJldC5zaApzbGVlcCAxCmVjaG8gIlNlcnZldXIgZMOpbWFycsOpICh0cm9pcyBzZXJ2
aWNlcyBzdXIgMTI3LjAuMC4xKS4gUG91ciB0b3V0IGFycsOqdGVyIDogYmFzaCBhcnJldC5zaCIK
EOF

Le script démarre trois services en arrière-plan sur 127.0.0.1. Quand vous avez terminé, arrêtez-les avec bash arret.sh.

Comment jouer​

  1. Balayez la plage 8170-8200 avec nmap, puis interrogez chaque port ouvert avec curl -s. N'ouvrez que votre propre 127.0.0.1.
  2. Répondez aux questions de l'activité Joligo « La porte oubliée » : certaines portent sur le flag, d'autres sur la démarche et les bons réflexes.
  3. Le flag est le code de sauvegarde que contient le service oublié : il contient 12 caractères (lettres a à f et chiffres). Dans Joligo, vous saisirez seulement ces 12 caractères.
Besoin d'un coup de pouce ?

Cette démarche a été vue dans la séance Scan de ports ; le pare-feu qui permettrait de fermer ce qui n'a pas à répondre est vu dans la séance Pare-feu Linux. nmap -sV donne le type de service derrière chaque port ; curl -s http://127.0.0.1:PORT/ lit la page d'accueil. Un mauvais flag fait perdre une vie dans Joligo : réfléchissez avant de tenter au hasard, comme pour un vrai mot de passe.