Le grand écart
404CTF{you_spot_w3ll_the_differences}
Dernière mise à jour
Cet article vous a-t-il été utile ?
404CTF{you_spot_w3ll_the_differences}
Dernière mise à jour
Cet article vous a-t-il été utile ?
Catégorie: Stegano Difficulté: medium Flag: -
En sortant de votre cours de gymnastique, vous tombez sur un étrange bouquin dans les vestiaires... À vous d'en trouver tous les secrets.
La première chose à remarquer est qu'il s'agit d'un texte, certes, mais certains caractères semblent bizarres. Plus précisément, certains octets sont différents de ce qu'ils devraient être.
Pour avoir une base de comparaison et commencer à chercher, il faut donc trouver le fichier original.
Rien de plus simple grâce à internet, on peut simplement faire une recherche Google sur une partie intacte du texte et on découvre alors qu'il s'agit de Moby-Dick or the whale. On peut maintenant faire une recherche grâce aux Google Dork sur le type txt pour obtenir le fichier qu'il nous faut.
Maintenant que l'on a les deux versions, on peut s'amuser à regarder les différences
Bon, il y en a pas mal sur les premières lignes et sachant que le texte en fait 15 000, on va automatiser tout ça grâce à Python.
Tout d'abord, on peut voir que nos deux fichiers font la même taille, ça nous indique déjà qu'on a récupéré le bon texte.
À présent, on va itérer simultanément sur les deux fichiers caractère par caractère et les comparer. Dès qu'ils sont différents, on va afficher la position dans le fichier ainsi que le XOR entre les deux.
Pourquoi faire un XOR ? Car c'est une opération très courante dans le chiffrement et la stéganographie puisqu'elle est réversible. C'est donc un réflexe à avoir lorsque l'on a plusieurs valeurs à comparer.
Bingo, on voit dans nos print plusieurs choses intéressantes :
A partir de l'octet 150, on a une variation tous les 30 octets.
Le XOR entre cette variation et le texte original affiche PNG ... IHDR, on a donc un .png face à nous
On voit des "sauts" (300, 330, 360, 480), ils sont surement dus au fait que le fichier contient des octets nuls. Sauf que 0 XOR x = x
, il ne faut donc pas se faire avoir et bien prendre tous les 30 octets même s'ils sont identiques.
Ce qu'on va faire, c'est tout simplement rediriger le résultat du XOR dans un fichier tierce, que l'on nommera étonnement flag.png.
Maintenant que nous avons récupéré l'image, il nous faut trouver le flag. En bas à gauche, on voit des pixels de couleurs différentes, ce qui fait penser tout de suite à une technique de LSB un peu foireuse.
On commence par reverse le LSB que l'on a vu plus tôt en bas de l'image. Je dis LSB, mais il faut prendre tous les bits de l'octet de chaque canal de couleur (sauf l'alpha).
Bien joué, vous vous êtes fait RickRoll...
En réalité, c'était un indice pour vérifier les autres pixels. Si l'on regarde les pixels au début de l'image, on peut voir que les canaux toujours varient entre deux valeurs alors que c'est un fond uni.
On en déduit qu'il faut regarder le dernier bit de chaque canal pour reconstruire le message
Parmi les résultats, j'ai trouvé et utilisé
On se rend sur et l'on importe l'image. Le site lance plusieurs outils sur le fichier et parmi eux, Zsteg détecte bien un LSB avec le flag