Fetch the Flag CTF 2022 : solution de Potty Training
12 novembre 2022
0 minutes de lectureMerci d’avoir joué à Fetch avec nous ! Félicitations aux milliers de joueurs qui nous ont rejoints pour Fetch the Flag CTF. Et un immense merci aux Snykers qui ont créé, testé et documenté les défis !
Cet article a été rédigé par l’ambassadeur Snyk Mohammad-Ali A’râbi (@MohammadAliEN). Inscrivez-vous pour devenir ambassadeur Snyk dès aujourd’hui et bénéficiez d’un accès privilégié à Snyk, notamment aux CTF avant leur lancement.
Le défi (avec un peu de contexte historique)
Si vous avez participé au Fetch the Flag CTF 2022 de Snyk, vous connaissez le défi Potty Training. C’était un défi rapide et simple que j’ai trouvé très intéressant. C’était aussi le premier flag que j’aie jamais trouvé ou capturé lors d’une compétition de sécurité !
Le défi ne contenait donc qu’un seul fichier PNG nommé potty.png. Quand il s’agit d’une image, il y a probablement quelque chose de caché dedans. Dissimulés dans des pages, les messages secrets sont une pratique si ancienne qu’elle porte un nom grec : la stéganographie, qui signifie « dissimulation de messages ». C’est sans doute la plus ancienne méthode d’envoi de messages secrets, bien avant l’invention de la cryptographie.
En 480 av. J.-C., Démarate, un Grec exilé de sa patrie, vivait dans la ville perse de Suse (aussi appelée Chouch). Il vit le roi perse Xerxès rassembler une armée pour lancer une attaque surprise contre la Grèce. Il rédigea alors un message, le dissimula dans une bûche et chargea un messager de le porter à Sparte. Les Spartiates mirent un certain temps à trouver la bonne bibliothèque Python pour extraire le message caché, mais finirent par y arriver. Bon, cette partie n’est pas vraie. Les Spartiates n’utilisaient pas Python : ils ont découvert le message en essayant différentes choses et en mettant à contribution les idées de chacun.
Bon, assez parlé d’histoire. Ce que je veux dire, c’est que « stéganographie » est le mot du jour.
La solution
Quand j’ai commencé le défi, je n’ai pas tout de suite pensé à la stéganographie et j’ai examiné le fichier avec des éditeurs de texte comme Vim. Comme prévu, ce n’était que du charabia. Le deuxième obstacle consistait à trouver la bonne bibliothèque pour extraire le message dissimulé. Je comptais utiliser Python de toute façon ; en associant les termes « stéganographie » et « Python » dans ma recherche Google, je suis tombé sur ce paquet Python très pratique appelé stegano.
En consultant sa description, j’ai découvert qu’après l’installation du paquet, on pouvait aussi l’utiliser en ligne de commande. Commençons donc par l’installer :
Puis, utilisons l’interface en ligne de commande :
Voici le résultat :
On dirait donc qu’un code Python malicieux (ou plutôt Snyky) est caché dans le fichier PNG. Maintenant que nous l’avons extrait, mettons-le dans un fichier Python :
Corrigeons un peu l’indentation et exécutons-le :
L’extrait de code s’exécute, mais renvoie une erreur de certificat SSL : le protocole HTTPS ne fonctionnera donc pas. Vous ne vous souvenez peut-être pas du HTTP sur Internet, mais comme j’ai la trentaine, je me rappelle l’époque où l’on trouvait des sites Web en HTTP. Modifions donc le code et remplaçons l’URL https par http, par nostalgie :
Et en l’exécutant, on obtient ce superbe message :
Et voilà ! ? On obtient un adorable chiot et un joli flag à capturer.
Pour conclure
J’ai vraiment aimé résoudre ce défi pendant le CTF. La dernière fois que j’ai participé à une compétition de capture de drapeau, je jouais à Call of Duty 2 avec mes amis dans une salle de jeux vidéo. Je dirais que capturer le flag de Snyk était plus amusant que de capturer ceux des forces de la Seconde Guerre mondiale (les cartes CTF de CoD 2 sont tellement déséquilibrées !). J’ai déjà hâte de participer au CTF de l’année prochaine !
Voici les principaux enseignements que j’en retiens :
Il existe un protocole appelé HTTP. Il est ancien, mais pas obsolète.
La stéganographie est très ancienne, mais pas obsolète.
Si vous souhaitez en savoir plus sur l’histoire de ce type de défi, lisez The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography de Simon Singh.
En cas de doute, utilisez Python.
Vous voulez savoir comment nous avons trouvé tous les autres flags ? Consultez notre page Solutions de Fetch the Flag pour découvrir comment nous avons procédé.
