Carver 2/2 (Forensics) - 404CTF2025

Principe:
Parcourir l'image disque (photorec) pour en récupérer les fichiers (y compris ceux supprimés) et trouver le flag dans l'une des photos (bonus automatisation)

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

Le challenge

L'énoncé du challenge
On reprend l'image disque (RAW) du challenge précédent

Binwalk?

Je vais essayer avec binwalk d'extraire du fichier RAW toutes les données ayant une signature connue (photos, pdf, textes, etc)
Mais au final, heu, bof, pas foufou le résultat?!
Les fichiers trouvés sont assez absurdes et trop peu nombreux pour faire sens

C'est en effet une image disque de VM: on devrait y retrouver tous les fichiers d'OS par exemple

Photorec

On va donc changer pour photorec, un outil capable de parcourir les données brutes (d'une disque ou d'une image disque) pour en récupérer les fichiers

Cet outil est d'ailleurs très pratique si vous avez un jour un disque dur qui plante et n'est plus lisible!

On choisit l'image disque comme support de travail (elle est en lecture seule, pour ne pas pourrir les données du challenge)
On va choisir de scanner tout le disque en entier (No partition)

Ainsi, si le flag est dans la partition swap ou dans un espace non partitionné du disque, on le trouvera quand même

Comme on scan tout le disque, on n'a pas de système de fichier (si j'avais scanné que la partition Linux, j'aurai pu envisager de prendre ext2/3/4 comme file system)
On laisse tourner, et on récupère des fichiers
Beaucoup de fichiers!

Trouver le flag

Le challenge parle de "une belle image" donc on va isoler (copie) toutes les images PNG et JPG

Cela aurait pu être un TIFF aussi, ou un format plus exotique genre Targa, Bitmap, ou même RAW (très difficile alors à retrouver car photorec serait passé à côté: un indice de plus serait sans doute nécessaire pour ce genre de cas)

Dans les PNG: rien de bien foufou
Dans les JPG, des chats! Un classique du 404CTF, voyons si l'un d'eux a le flag

En vrai, j'ai perdu du temps car je n'ai même pas regardé la fusée!

En faisant défiler les photos, coup de bol, j'ai dépassé les chats et je suis tombé sur la fusée et son flag

Bonus: Trop d'images?

S'il y avait eu des milliers d'images, qu'aurait-on pu faire pour trouver le flag sans devoir les faire défiler à la main? Une idée serait d'utiliser de l'OCR, de la reconnaissance de caractère, pour filtrer ces images et ne vérifier à la main qu'une partie d'entre elles. On va voir ça dans ce petit bonus!

Un petit venv python, et on y installe easyocr

J'avais d'abord essayé avec tesseract mais celui-ci n'a donné que des résultats… moisis!

J'admire toujours autant la quantité de trucs qu'il faut télécharger dans l'écosystème Python 😄
Je lance alors l'OCR sur le fichier où se trouve le flag, pour vérifier s'il le verrait: oui!

Bon, il lit A04CTF{…} mais c'est déjà pas mal!

Si on scan toutes les images avec easyOCR, on obtient trop de résultats pour les vérifier à la main
Et certaines images, d'ailleurs, plantent, car elles peuvent être tronquées (par photorec)
On va donc dire à l'OCR de ne considérer que les caractères 404CTF qui préfixent le flag, et on n'affiche que les fichiers où ce préfixe se trouve et voilà!

Bon, l'OCR lit quand même le flag de travers quand il fait sa "deuxième lecture" dans mon script de démo, donc, il faudra quand même vérifier le contenu du fichier à la main. Mais au moins, maintenant, on sait directement dans quel fichier on doit regarder

L'image contenant le flag. Quelle jolie fusée!

Flag: 404CTF{n1c3_c@rv1ng}