Aller au contenu principal

CTF « La fuite de l'association Les Amis du Port »

Lundi matin. Un adhérent des Amis du Port vous écrit : « Mon e-mail est apparu sur un forum, avec mon mot de passe. » Le fichier de la fuite circule. À vous de l'analyser, comme le ferait l'équipe de sécurité.

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 fuite des Amis du Port ». L'association « Les Amis du Port », ses adhérents et le fichier sont fictifs.

attention

Ce défi se pratique uniquement sur le fichier fourni, dans votre propre VM. Consulter ou diffuser une vraie base de comptes volée est interdit par la loi.

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 aux mots de passe forts et à la ligne de commande :

  1. générer un mot de passe aléatoire avec python3 -c "import secrets; print(secrets.token_urlsafe(16))" (relancez : la suite change à chaque fois)
  2. calculer le nombre de combinaisons d'un mot de passe de 8 minuscules avec python3 -c "print(26**8)"
  3. refaire le calcul pour 12 caractères avec python3 -c "print(26**12)" et comparer les deux résultats
📌 Réponse attendue

Votre mission​

Vous êtes l'administrateur système de l'association. Le fichier fuite_amis_du_port.csv contient 60 comptes : pseudo, e-mail et mot de passe, en clair (la base de l'ancien site ne les protégeait pas).

Analysez-le comme un attaquant le ferait avec une fuite : quels sont les mots de passe les plus utilisés, et quel est le compte qui s'est protégé correctement ? Trouvez le code qui termine la phrase de passe de la présidente.

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 openssl
mkdir -p ~/ctf-fuite
cd ~/ctf-fuite
CODE=a1b2c3d4
attention

Le script ci-dessous fabrique le fichier de la fuite (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 le fichier produit.

base64 -d <<'EOF' | bash -s -- "$CODE"
Q09ERT0iJDEiCmlmIFsgLXogIiRDT0RFIiBdOyB0aGVuIGVjaG8gIlVzYWdlIDogYmFzaCAtcyAt
LSBWT1RSRV9DT0RFIiA+JjI7IGV4aXQgMTsgZmkKS0VZPSJhMGFhMDk1NTFjYTg1MTRjODE1NiIK
RkxBRz0kKHByaW50ZiAlcyAiJENPREUiIHwgb3BlbnNzbCBkZ3N0IC1zaGEyNTYgLWhtYWMgIiRL
RVkiIC1yIHwgY3V0IC1jMS0xMikKY2F0ID4gZnVpdGVfYW1pc19kdV9wb3J0LmNzdiA8PEZJTgpw
c2V1ZG8sZW1haWwsbW90X2RlX3Bhc3NlCmRhbWllbi5icnVuLGRhbWllbi5icnVuQGV4ZW1wbGUu
ZXhhbXBsZSxhemVydHkxMjMKbWFub24ucm9jaGUsbWFub24ucm9jaGVAZXhlbXBsZS5leGFtcGxl
LEdvZWxhbmQhMjIKa2V2aW4uZnJhbmNvaXMsa2V2aW4uZnJhbmNvaXNAZXhlbXBsZS5leGFtcGxl
LEhvcnRlbnNpYTI5CmNhbWlsbGUuZ2FpbGxhcmQsY2FtaWxsZS5nYWlsbGFyZEBleGVtcGxlLmV4
YW1wbGUsYXplcnR5MTIzCmx1Y2llLmR1cHVpcyxsdWNpZS5kdXB1aXNAZXhlbXBsZS5leGFtcGxl
LHBhc3N3b3JkCmVuem8uYmxhbmNoYXJkLGVuem8uYmxhbmNoYXJkQGV4ZW1wbGUuZXhhbXBsZSxD
cmVwZXMyRnJvbWVudApwYXVsaW5lLnNjaG1pdHQscGF1bGluZS5zY2htaXR0QGV4ZW1wbGUuZXhh
bXBsZSxhemVydHkxMjMKY2xhcmEuZ2F1dGhpZXIsY2xhcmEuZ2F1dGhpZXJAZXhlbXBsZS5leGFt
cGxlLDEyMzQ1NgpsYXVyYS5nYWlsbGFyZCxsYXVyYS5nYWlsbGFyZEBleGVtcGxlLmV4YW1wbGUs
YWxndWVzLWJydW5lcwptYXJpb24uYnJ1bixtYXJpb24uYnJ1bkBleGVtcGxlLmV4YW1wbGUsYXpl
cnR5MTIzCnRoZW8uY2hldmFsaWVyLHRoZW8uY2hldmFsaWVyQGV4ZW1wbGUuZXhhbXBsZSxwYXNz
d29yZApnYWVsLmR1bW9udCxnYWVsLmR1bW9udEBleGVtcGxlLmV4YW1wbGUsMTIzNDU2CmNobG9l
LmJsYW5jaGFyZCxjaGxvZS5ibGFuY2hhcmRAZXhlbXBsZS5leGFtcGxlLGF6ZXJ0eTEyMwplbW1h
LmR1cHVpcyxlbW1hLmR1cHVpc0BleGVtcGxlLmV4YW1wbGUscGFzc3dvcmQKdGhlby5tb3JlYXUs
dGhlby5tb3JlYXVAZXhlbXBsZS5leGFtcGxlLGF6ZXJ0eTEyMwpzYXJhaC5zY2htaXR0LHNhcmFo
LnNjaG1pdHRAZXhlbXBsZS5leGFtcGxlLGF6ZXJ0eTEyMwpsdWNpZS5sZW1haXJlLGx1Y2llLmxl
bWFpcmVAZXhlbXBsZS5leGFtcGxlLEtvdWlnbjJBbWFubgpwcmVzaWRlbnRlLHByZXNpZGVudGVA
YW1pcy1kdS1wb3J0LmV4YW1wbGUsQ2VyaXNpZXItQmFucXVpc2UtVG9ubmVycmUtVmlvbG9uLSR7
RkxBR30KbmluYS5yb3Vzc2VsLG5pbmEucm91c3NlbEBleGVtcGxlLmV4YW1wbGUsUGVubWFyY2gx
CmF4ZWwucm9jaGUsYXhlbC5yb2NoZUBleGVtcGxlLmV4YW1wbGUsYXplcnR5MTIzCmx1Y2FzLmJh
cmJpZXIsbHVjYXMuYmFyYmllckBleGVtcGxlLmV4YW1wbGUsYXplcnR5MTIzCmF1cmVsaWUubWFz
c29uLGF1cmVsaWUubWFzc29uQGV4ZW1wbGUuZXhhbXBsZSxKZWFubmUxOTk5CnNhcmFoLmJveWVy
LHNhcmFoLmJveWVyQGV4ZW1wbGUuZXhhbXBsZSxzYXJkaW5lNDQKbGF1cmEuYmxhbmNoYXJkLGxh
dXJhLmJsYW5jaGFyZEBleGVtcGxlLmV4YW1wbGUsYXplcnR5MTIzCnBhdWwuZ2F1dGhpZXIscGF1
bC5nYXV0aGllckBleGVtcGxlLmV4YW1wbGUsc29sZWlsMjAyNApsdWNpZS5tYXJ0aW5leixsdWNp
ZS5tYXJ0aW5lekBleGVtcGxlLmV4YW1wbGUsUG9ydC1Mb3VpczIyCmp1bGVzLm1hcmllLGp1bGVz
Lm1hcmllQGV4ZW1wbGUuZXhhbXBsZSwxMjM0NTYKYmFwdGlzdGUuam9seSxiYXB0aXN0ZS5qb2x5
QGV4ZW1wbGUuZXhhbXBsZSxiYXRlYXUyMDIwCnBhdWxpbmUubWVyY2llcixwYXVsaW5lLm1lcmNp
ZXJAZXhlbXBsZS5leGFtcGxlLFBpZXJyZS04NQpsb2ljLm1leWVyLGxvaWMubWV5ZXJAZXhlbXBs
ZS5leGFtcGxlLDEyMzQ1NgptYW5vbi5ibGFuYyxtYW5vbi5ibGFuY0BleGVtcGxlLmV4YW1wbGUs
c29sZWlsMjAyNApuYXRoYW4ubWV1bmllcixuYXRoYW4ubWV1bmllckBleGVtcGxlLmV4YW1wbGUs
bW91ZXR0ZV9yaWV1c2UKamFkZS5kZW5pcyxqYWRlLmRlbmlzQGV4ZW1wbGUuZXhhbXBsZSwxMjM0
NTYKdGhlby5naXJhdWQsdGhlby5naXJhdWRAZXhlbXBsZS5leGFtcGxlLG9jZWFuLWJsZXUKbWF0
aGlzLm1lcmNpZXIsbWF0aGlzLm1lcmNpZXJAZXhlbXBsZS5leGFtcGxlLFRlbXBldGUxOTg3CnRy
aXN0YW4ubW9yZWF1LHRyaXN0YW4ubW9yZWF1QGV4ZW1wbGUuZXhhbXBsZSwxMjM0NTYKbm9lLmdh
aWxsYXJkLG5vZS5nYWlsbGFyZEBleGVtcGxlLmV4YW1wbGUsUGhhcmUjT3Vlc3NhbnQKY2FtaWxs
ZS5tYXJpZSxjYW1pbGxlLm1hcmllQGV4ZW1wbGUuZXhhbXBsZSxNYXJpZTE5NzQhCnpvZS5iYXJi
aWVyLHpvZS5iYXJiaWVyQGV4ZW1wbGUuZXhhbXBsZSxpbG92ZWJyZWl6aApuaW5hLm1vcmluLG5p
bmEubW9yaW5AZXhlbXBsZS5leGFtcGxlLHBhc3N3b3JkCnF1ZW50aW4ubWFyY2hhbmQscXVlbnRp
bi5tYXJjaGFuZEBleGVtcGxlLmV4YW1wbGUsYXplcnR5MTIzCmtpbGxpYW4ucm91eCxraWxsaWFu
LnJvdXhAZXhlbXBsZS5leGFtcGxlLHBhc3N3b3JkCm5vZS5iYXJiaWVyLG5vZS5iYXJiaWVyQGV4
ZW1wbGUuZXhhbXBsZSxMb3JpZW50MTk4MgpwYXVsLmRlbmlzLHBhdWwuZGVuaXNAZXhlbXBsZS5l
eGFtcGxlLENhcGl0YWluZTU2CnJvbWFpbi5tYXJpZSxyb21haW4ubWFyaWVAZXhlbXBsZS5leGFt
cGxlLGF6ZXJ0eTEyMwptYWVsbGUudmluY2VudCxtYWVsbGUudmluY2VudEBleGVtcGxlLmV4YW1w
bGUsc29sZWlsMjAyNAplbHNhLm1hdGhpZXUsZWxzYS5tYXRoaWV1QGV4ZW1wbGUuZXhhbXBsZSxw
YXNzd29yZApqdWxpZS5tZXllcixqdWxpZS5tZXllckBleGVtcGxlLmV4YW1wbGUsYXplcnR5MTIz
CmtldmluLm1leWVyLGtldmluLm1leWVyQGV4ZW1wbGUuZXhhbXBsZSxNYXJlZS1CYXNzZTgKYW5h
aXMubGVmZXZyZSxhbmFpcy5sZWZldnJlQGV4ZW1wbGUuZXhhbXBsZSxhemVydHkxMjMKYW50b2lu
ZS5sZWdyYW5kLGFudG9pbmUubGVncmFuZEBleGVtcGxlLmV4YW1wbGUsMTIzNDU2Cm1hbm9uLmR1
dmFsLG1hbm9uLmR1dmFsQGV4ZW1wbGUuZXhhbXBsZSxuYXZpZ2F0aW9uMzUKYWRyaWVuLnJvdXNz
ZWwsYWRyaWVuLnJvdXNzZWxAZXhlbXBsZS5leGFtcGxlLDEyMzQ1NgpsZWEuZ2VyYXJkLGxlYS5n
ZXJhcmRAZXhlbXBsZS5leGFtcGxlLEJlbGxlLUlsZTU2Cm1hcmlvbi5sdWNhcyxtYXJpb24ubHVj
YXNAZXhlbXBsZS5leGFtcGxlLENhYmVzdGFuNzgKdGhlby5tYXJjaGFuZCx0aGVvLm1hcmNoYW5k
QGV4ZW1wbGUuZXhhbXBsZSxWb2lsZSZNZXIKbG9sYS5yb3Vzc2VhdSxsb2xhLnJvdXNzZWF1QGV4
ZW1wbGUuZXhhbXBsZSxzb2xlaWwyMDI0Cm1hZWxsZS5tZXVuaWVyLG1hZWxsZS5tZXVuaWVyQGV4
ZW1wbGUuZXhhbXBsZSxHcmFpbjJTZWwKcGF1bC5yb2NoZSxwYXVsLnJvY2hlQGV4ZW1wbGUuZXhh
bXBsZSxtYXLDqWVfaGF1dGUKbW9yZ2FuZS5mcmFuY29pcyxtb3JnYW5lLmZyYW5jb2lzQGV4ZW1w
bGUuZXhhbXBsZSwxMjM0NTYKRklOCmVjaG8gIkZpY2hpZXIgY3LDqcOpIDogZnVpdGVfYW1pc19k
dV9wb3J0LmNzdiIK
EOF

Vous obtenez le fichier fuite_amis_du_port.csv.

Comment jouer​

  1. Analysez le fichier avec la ligne de commande (head, wc, grep, cut, sort, uniq, awk).
  2. Répondez aux questions de l'activité Joligo « La fuite des Amis du Port » : certaines portent sur le flag, d'autres sur la démarche et les bons réflexes.
  3. Le flag est la fin de la phrase de passe de la présidente, après le dernier tiret : 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 ?

Les raisonnements viennent des séances Une fuite de données et Un mot de passe fort sous Linux. Pour compter les valeurs d'une colonne : cut -d, -f3 fichier | sort | uniq -c | sort -rn | head. Un mauvais flag fait perdre une vie dans Joligo : réfléchissez avant de tenter au hasard, comme pour un vrai mot de passe.