Carver 1/2 (Forensics) - 404CTF2025

Principe:
Décompresser une image disque VMWare et chercher le flag (textuel) dedans

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

Le challenge

L'énoncé du challenge

Un disque de VM

Le fichier est un .ova donc une image VMWare, qui est en fait une tarball

Je n'ai pas envie d'installer un host de VM type VMWare ou autre, donc je vais trouver une solution sans.

On renomme donc le fichier en tar (par facilité) et on l'ouvre: 3 fichiers décrivent le disque de la VM
Le plus petit n'a pas d'intérêt, ce sont des checksums

Un flag pourrait un jour s'y trouver!

L'autre fichier léger décrit la VM, et le matériel qui la compose. Rien là non plus.

Un flag pourrait aussi s'y trouver un jour!

On s'intéresse donc au fichier vmdk, qui est le disque lui-même de la VM
Si on en regarde directement le contenu, on peut y trouver une section de metadata, puis les données du disque

À la bourrin

On peut bourriner déjà rapidement sur le contenu du disque: si le flag est un texte, on le trouvera directement

Je cherche aussi avec des . entre les caractères car le fichier du flag pourrait être un UTF16-LE de windows, pour lequel les caractères sont codés sur 2 bytes

Monter l'image disque

Un petit coup de main de ChatGPT pour avoir des pistes d'outils pour monter l'image
Et va pour qemu que j'avais déjà utilisé dans un autre CTF et qui sera donc utile sur ma machine de toute manière
On demande alors à qemu le type d'image: elle est compressée (compressed: true)
On va donc devoir l'extraire d'abord puis la monter

La plupart des VM ont un disque compressé, car la plupart des VM ont un disque très grand, de plusieurs giga, mais souvent très vide (plein de zéroes). Cela se compressed donc très bien pour ne pas prendre de place sur le disque.

Attention car l'extration peut prendre énormément de place! Dans le XML, on pouvait voir que la VM faisant 16GB, donc, ça passe, mais si elle avait fait des TB, j'aurai eu du mal à faire cette extraction.

En parallèle, j'avais lancé binwalk sur l'image compressée: forcément, il a craché des tonnes de zlib data, peu utiles

En revanche, binwalk aurait sans doute pu être utile si l'image disque avait fait des péta octets et n'avait pas été extractible.

Donc, on extrait l'image disque
Ce qui nous donne un fichier raw de 16GB comme attendu

Recherche dans l'image RAW

On cherche maintenant dans cette image extraite si le flag s'y trouve: boom
On valide, et c'est bon

Je n'ai pas cherché à récupérer les fichiers du disque en lui-même: j'ignore donc dans quel fichier se trouvait le flag et le contexte de ce fichier

Flag: 404CTF{hyp3rv1s0r_f0r_l1f3}