PNG: Un logo obèse 1/4 (Stéganographie) - 404CTF2022

Principe:
Extraire les données excédentaires à la fin d'un fichier (une image PNG)

Infos (cf menu latéral):
🚩 Flaggué! +358 points gagnés — 💾 Téléchargez les fichiers du challenge
404CTF{0b3z3_f1l3_h4z_zup3r_spy_s3cr37}

Le challenge

Le challenge demande de trouver un message caché dans une image

Exiftool

Dans les données EXIF (metadata de l'image, visualisable via exiftool par exemple) on repère un Warning: des données excédentaires

Extraction

Un petit script pour extraire ce qui traine après le chunk `IEND` (le dernier d'après la spec PNG du W3C ) et on récupère un fichier de données

Notez que ce script est faux: il faut extraire à partir de IEND + 8 chars: un offset +4 pour la longueur de la chaine IEND et un autre offset +4 pour la longueur du CRC32 qui la suit!

Le fichier de données ressemble beaucoup à un header ZIP (PK et, plus loin, des chemins de fichiers). Si je n'avais pas fait d'erreur d'offset dans mon script, j'aurai directement eu un ZIP.

Savoir identifier des formats de fichiers en un coup d'oeil, surtout pour les plus courants, c'est très utile!

On corrige donc le script, pour retirer les premiers caractères du fichier de données extrait et s'aligner sur le header PK, ce qui nous donne un Zip archive data

Flag

On l'ouvre, et on se retrouve avec une image contenant le flag

Certains éditeurs PNG n'ouvriront pas le fichier car un chunk sTeG s'y trouve et que ce type de chunck n'exste pas dans la documentation. Pour éviter cela, utilisez un autre visionneur (nota: je ne sais plus lequel j'avais utilisé!) ou patchez le fichier en remplaçant le nom sTeG du chunck par tEXt (hexa 74 45 58 74).
Notez que ce chunck ne contient aucune donnée réelle

Il est généralement conseillé de ne pas supprimer un chunck, mais de le "commenter" (en faisant de ce chunck un tEXt par exemple qui n'influencera pas le parsing) car supprimer des données dans le fichier changera le position (offset) des autres données, ce qui pourrait poser des problèmes en cascade.

Les flags dans les images… une bonne source de "fail" alors, relisez-vous!

Flag: 404CTF{0b3z3_f1l3_h4z_zup3r_spy_s3cr37}