mercredi 21 septembre 2011

CTF Hack.lu 2011 - Unknown Planet

Hello tout le monde !

un petit writeup sur un challenge de CTF Hack.lu 2011.

Description
We got this file. Can you find the name of this planet?
Voici l’image qu’on peut télécharger en cliquant sur le lien :



1. Analyse

Comme l’indique la description du challenge, un nom de planète se cache quelque part dans cette image Jpeg.
On commence par ouvrir l’image avec un éditeur héxadécimal (Hex Workshop ici) et on remarque très vite une chose troublante.
En effet, le code héxadécimal d’une image Jpeg commence toujours par FF D8 et se termine toujours par FF D9. Voici ce qu’on peut observer avec cette image :
Début du code hexadécimal


Fin du code hexadécimal



Le code débute bien par FF D8 mais par contre les deux octets FF D9 ne sont pas présents à la fin du code. En faisant, une recherche sur ces 2 octets, on parvient néanmoins à les trouver.


On vient de trouver la fin du code hexadécimal servant à la représentation de l’image. Tout ce qui suit pourrait être supprimé sans que cela n’ait d’impact sur l’image elle-même.
Ce code hexadécimal supplémentaire mérite donc qu’on se penche dessus pour y dénicher quelque info confidentielle comme le nom d’une planète par exemple.
On récupère donc ce code et on l’insère dans une nouvelle page de l’éditeur pour une analyse plus poussée. Voici un extrait du code :


On remarque deux choses :
  • - Des chaînes de 13 caractères se terminant toutes par UT (encadrées en bleu).
  • - La présence des caractères PK tout au long du code (entourés en rouge).
Les caractères PK sont caractéristiques des fichiers zip : Ce sont les initiales de Phil Katz, le créateur du format.
On peut donc enregistrer notre code hexadécimal en tant que fichier .zip pour voir ce qu’on obtient.

2. Travail sur l'archive Zip

L’archive nouvellement créée contient 9 fichiers dont les noms rappellent les chaînes de caractères mentionnées plus haut.



Si on ouvre le premier avec notepad voici ce qu’on peut voir :


L’entête nous indique qu’il s’agit d’un fichier wav. On l’enregistre alors en tant que tel et on le lance avec VLC par exemple.
On entend clairement le début d’un code Morse (un point et deux traits) et on se doute qu’il va falloir concaténer les 9 fichiers dans le bon ordre afin d’obtenir l’enregistrement complet en Morse censé nous révéler le nom de cette planète (du moins on l’espère).
On connaît déjà le premier fichier : celui qui contient l’entête, mais on sait aussi que le dernier est celui dont la taille est nettement inférieure à celle des autres (on a 8 fichiers de 20 000 octets et un seul de 1324 octets).
On remarque que cet ordre est respecté lorsqu’on classe les fichiers par ordre décroissant selon la valeur de la colonne « Compressé » dans Winrar (voir capture plus haut).
On peut alors penser qu’il faudra tester deux possibilités à cause des deux fichiers à 72.
Pourtant les enregistrements ne donnent rien de probant : ils comportent notamment des coupures brèves qui nous amènent à penser que cette façon d’ordonner les fichiers n’était pas la bonne.

3. Analyse des blocs de code hexadécimal récurrents

On va alors se placer à un niveau plus bas en ouvrant les 9 fichiers dans Hex Workshop pour analyser le code hexadécimal plus en détail.
On remarque que les 9 fichiers sont composés de deux types de blocs :
1er type de bloc (Bloc A)


2ème type de bloc (Bloc B)


Si compte le nombre d’octets qui composent chacun de ces blocs dans les 9 fichiers, on constate qu’on a deux tailles possibles pour chaque bloc. Le bloc A peut faire 5761 octets ou 1921 octets alors que le bloc B peut faire 5759 octets ou 1919 octets.
On va pouvoir reconstituer ce puzzle en regardant la taille des blocs A et B inachevés en début et fin de fichiers et en cherchant le bloc complémentaire à chacun qui donnera un bloc total correspondant à l’une des tailles possibles.
Cette séance de collage nous donnera l’ordre de fichiers suivants :
  1. uvlSlG3Tgow
  2. 5IIUED7GheR
  3. rySOWi4fZkA
  4. 87F1s5POUJc
  5. 6JXtwsTTh9k
  6. Uw105aD3qYh
  7. BPiIOASG_Z6
  8. Yui5oq58hlx
  9. nLPA8X0UJqf
On concatène alors ces 9 fichiers dans un seul qu’on enregistre en tant que fichier wav.
Maintenant place au décodage !!!!


4. Décodage

L’enregistrement est plutôt net et on obtient facilement le code Morse suivant :
.--. …. . .. -.- -.-- --- …
On décode alors le mot de 8 lettres : PHEIKYOS
On connaît enfin le nom de notre planète et on valide ce challenge en rentrant le flag : Pheikyos.

5. Tools

  • Hex Workshop
  • Winrar
  • Notepad
  • VLC

6. Référence




Aucun commentaire:

Enregistrer un commentaire