{ZipArchive} Faire du Debug online !
Salut à tous !
Après avoir eu le plaisir de reprendre contact avec un ami de longue date, j'ai renoué un peu avec les plateformes de "hacking".
Ce sont des plateformes d'entrainement qui permettent de rester un peu affûté lorsque l'on travaille dans le domaine de la cybersécurité.
Mais outre les "challenges", il est intéressant de sortir de sa zone de confort et de découvrir ou d'approfondir ses connaissances dans d'autres domaines liés à la cyber !
Car loin de l'image que la plupart des gens s'en sont, un spécialiste en cybersécurité, n'est pas obligatoirement bon dans tous les domaines ... il peut être expert dans l'un ou l'autre de ces nombreuses spécialités ... ou être plutôt moyens dans toutes ...
- Cryptographie
- Sténographie
- Reverse Engineering
- Hacking Client Side
- Hacking Web
- Hacking System
- ... etc ...
Bref les domaines du métier de la Cyber sont très vastes !
J'ai par ailleurs écrit un article sur la stégano qui selon la chronologie de publication du Blog sera paru juste avant ... ou après celui-ci (dans ce cas ... patience) ;)
Fonctionnement d'une archive Zip (PKzip)
Contrairement à la plupart des fichiers que l'on a pour habitude de manipuler, l'archive zip se lit de bas en haut ...
(Mais soyez rassuré on la lit bien de droite à gauche ;) )
L'archive va empiler les fichiers contenus dans celle-ci, à la suites les un des autres.
Pour chacun des fichiers il y aura :
Une entête, contenant les informations de chacun d'entre eux (Local File Header) :
- Nom du fichier
- Taille du fichier compressé
- Taille du fichier non compressé
- Date de création / modification du fichier
- Heure de création / modification du fichier
- Signature CRC32 (pour contrôler l'intégrité de celui-ci)
- Une zone de commentaire (vide par défaut, mais utilisable)
- Des "extras fields" :
C'est un champs contenant un ensemble de données "libres" qui n'a pas de taille fixe ... et qui vont être utilisés par exemple pour préciser les droits des fichiers
Un Index (Central Directory Header)
C'est une sorte d'index qui va reprendre tout ou partie des informations ci-dessus (Local File Header). Mais qui va permettre de lire plus rapidement les informations de tous les fichiers sans avoir à traiter l'ensemble de l'archive.
Elle contient une information cruciale le "Disk Number Start".
Pour faire simple, cela renvoi directement à l'endroit dans l'archive où se situe le fichier.
Notez qu'en cybersécurité, cette information peut-être altérée pour "dissimuler" l'existence d'un ou plusieurs fichiers de l'archive.
Puis à la toute fin du fichier, nous retrouverons les informations liés à l'archive elle même.
Le ....
End Of Central Directory Record
Clairement c'est le point d'entrée... c'est là que tout commence et que tout termine.
J'évoquais à l'instant le "Directory Central Header" qui est un "index" pour chaque fichier présent dans l'archive, dans lequel on retrouve la présence d'une information : "Disk Number Start"
Ici nous avons également des informations "pratiques" lié à ce fameux "Disk", le "nombre de Disk", le "numéro du Disk" où commence l'annuaire central ... (en gros là où va commencer l'arborescence de fichier)
Ici aussi également il s'agit d'un champs que l'on peut "altérer", afin de "dissimuler" des fichiers d'une archive.
De ma compréhension, ces "Disk" sont dans le cadre d'une archive "volumineuse" que l'on souhaiterait découper. Elle permet à la fin de reconstituer l'archive.
Identifier les différentes parties d'une archive ZIP
Il est désormais acquis pour tous la composition d'un ZIP.
Nous savons qu'un fichier va disposer de 3 blocs :
- Une entête / LFH
- Le contenu compressé
- Un index / CDH
Nous savons aussi que l'archive dispose elle même d'information plus générale qui l'a concerne elle même (EoCDR)
Comme je vous l'ai indiqué une archive se lit de haut en bas ... mais comment savoir où commence tel bloc et où il termine ?
Chacun des blocs compressés commence par une signature de 4 octets.
Il s'agit d'un marqueur.
Ainsi il convient de parcourir l'archive Zip une première fois pour identifier les marqueurs et se faire une représentation de sa structure.
Ci-dessous les signatures hexadécimale de ces blocs :
Local File Header : 0x04034b50
Central Directory Header : 0x02014b50
End of Central Directory Record : 0x06054b50
Pour ce qui est des données compressées des fichiers, elles sont directement à la suite de chaque LFH.
Il n'est donc pas nécessaire d'y associer un marqueur.
Wikipedia pour les plus curieux !
Je ne me ferais pas "spécialiste" des archives Zip, je n'ai ici fait qu'effleurer en surface la "structure" du fichier. Vous ne trouverez donc pas d'information dans cet article concernant les modes de compression.
Si vous souhaitez d'avantage de précision sur le "format" du fichier, le contenu (les enregistrements) de chaque bloc, le nombre d'octets pour chacun des enregistrements, etc ...
Je vous invite à consulter la page Wikipedia, qui est plutôt bien fournie en info : https://en.wikipedia.org/wiki/ZIP_(file_format)
Déboguer en ligne !
C'est là que ça devient intéressant.
Lorsque je me suis mis à étudier un peu le sujet, j'ai trouvé vraiment pas mal d'information ... mais finalement assez peu de "service" en ligne, pour afficher les informations précises et techniques d'une archive.
Clairement, ne sous entendez-pas ce que je n'ai pas dis ...
Je ne dis pas que c'est une bonne pratique de passer par des plateformes en ligne pour faire des traitements de vos fichiers ZIP.
Veillez surtout à ne jamais envoyer d'archive contenant des informations personnelles, sensibles, confidentielles, etc .. sur des plateformes "gratuites" que vous ne connaissez pas, et qui ne se priveront pas de les stocke, de les consulter, et probablement de les utiliser sans votre consentement.
Mais bon pour ce qui est des archives qui ne contiennent rien de craignos... j'étais un peu déçu de ne pas trouver mon bonheur !
C'est donc pour cela que j'ai créé rien pour vous (et un peu pour moi aussi), un petit script !
Un script tout mignon, qu'il vous suffit de copier-coller dans la console de votre navigateur ... et à valider avec la touche "entrée", hop !
Vous n'avez plus qu'à sélectionner votre archive et laisser la magie opérer.
Le fichier est "parsé" localement ... aucune donnée ne s'échappe de votre ordinateur .... c'est simplement votre navigateur qui va faire le job !
- Copier le contenu du fichier en lien ci-dessus
- Ouvrir une page dans votre navigateur
- Ouvrir la console développeur (Touche "f12" ou clic droit "inspecter l'élément")
- Sélectionner dans la console qui s'ouvre, l'onglet dont le titre est "console".
- Coller le script, puis valider avec la touche "entrée"
- Enjoy !
Conclusion
J'espère vous avoir donné l'envie de vous intéresser aux fichiers "archives" !
Mais aussi à la Cyber Sécurité !
Je n'ai pas détaillé la méthode pour dissimuler des fichiers dans des archives, car c'est à mon sens
trop technique pour ce type d'article.
Je risque de perdre la moitié d'entre vous si je dois expliquer comment changer certains octets d'un fichier binaire ... et de me perdre moi même en explication ...
En attendant, n'hésitez pas à me partager vos retours d'expérience sur le sujet, et surtout à me compléter ou me corriger en commentaire !