Une image PNG contient un fichier ZIP caché à l'intérieur. On le détecte avec binwalk, on l'extrait, et le flag se trouve dans le dossier caché.
| Plateforme | PicoCTF 2023 |
| Catégorie | Forensics |
| Points | 100 pts |
| Difficulté | Débutant |
| Outils | binwalk file unzip |
Le challenge fournit une image flag.png et demande simplement :
"Someone hid a flag in this image. But can you find it?"
L'image s'ouvre normalement dans un viewer — elle affiche une image classique. Rien de suspect à première vue. C'est là que la magie des outils forensics entre en jeu.
La stéganographie consiste à cacher des données à l'intérieur d'autres fichiers. Contrairement à la cryptographie qui chiffre les données, la stéganographie les dissimule.
Une technique courante en CTF : cacher un fichier ZIP à la fin d'une image PNG. Le viewer d'image ignore tout ce qui vient après la fin de l'image (IEND), mais un fichier ZIP lu depuis la fin du fichier est parfaitement valide.
On commence toujours par la commande file pour confirmer la nature du fichier :
$ file flag.png
flag.png: PNG image data, 512 x 512, 8-bit/color RGBA, non-interlaced
C'est bien un PNG. Mais on va creuser avec binwalk.
binwalk est un outil qui scanne un fichier à la recherche de signatures de fichiers connus (ZIP, ELF, JPEG, etc.) cachés à l'intérieur.
$ binwalk flag.png
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 PNG image, 512 x 512, 8-bit/color RGBA, non-interlaced
39739 0x9B3B Zip archive data, at least v1.0 to extract
39906 0x9BE2 Zip archive data, at least v2.0 to extract, name: secret/flag.png
40202 0x9D0A End of Zip archive, footer signature
Bingo. binwalk détecte un fichier ZIP intégré à l'offset 39739, qui contient lui-même un fichier secret/flag.png.
On extrait automatiquement tous les fichiers détectés avec le flag -e :
$ binwalk -e flag.png
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 PNG image...
39739 0x9B3B Zip archive data...
$ ls
flag.png _flag.png.extracted/
$ ls _flag.png.extracted/
9B3B.zip secret/
$ ls _flag.png.extracted/secret/
flag.png
On ouvre l'image extraite secret/flag.png dans un viewer d'image — le flag y est affiché en texte.
$ eog _flag.png.extracted/secret/flag.png
# ou : xdg-open, feh, display...
Le flag est volontairement caché — suis la méthode, tu l'as mérité. 💪
Ce challenge enseigne deux réflexes fondamentaux en forensics CTF :
file pour vérifierbinwalk avant toute autre analyseDans un vrai contexte de sécurité, cette technique est utilisée dans les malwares pour exfiltrer des données cachées dans des images en apparence innocentes.
# Debian / Ubuntu / Kali
$ sudo apt install binwalk
# macOS
$ brew install binwalk
# pip
$ pip install binwalk
Discute de ce writeup avec la communauté dans le Discord CTFdojo.
Rejoindre le Discord →