
Utilitaire Python3 pour créer des fichiers zip qui dissimulent des données supplémentaires pour une extraction ultérieure.
Cet utilitaire Python crée des fichiers zip contenant des données supplémentaires intégrées dans la structure du fichier. Ces données supplémentaires ne sont pas visibles/ne s'affichent pas lorsque le zip est examiné ou décompressé, mais peuvent être récupérées à l'aide de PowerShell via un fichier de raccourci Windows (LNK) contenu dans le fichier zip.
Le script nécessite un nom pour votre fichier zip / fichier de raccourci / fichier dissimulé, ainsi que le fichier/les données que vous souhaitez dissimuler :
python3 zip_smuggle.py important_data /home/ubuntu/zip_smuggling/testdata.txt
Cela produira important_data.zip dans le dossier du script. Transférez ce fichier zip vers une machine Windows, double-cliquez dans le zip ou extrayez-le, puis cliquez sur le raccourci qu'il contient. Les données que vous avez fournies pour la dissimulation seront récupérées depuis le fichier zip, enregistrées sur le disque, puis ouvertes en tant que fichier texte.
Ce projet s'appuie sur un de mes projets plus anciens, lnk_generator, qui permet de créer des fichiers de raccourci arbitraires à l'aide d'un modèle prédéfini. Consultez ce dépôt pour plus de détails / des scripts plus complets et des notes sur la génération de fichiers de raccourci.
Les données dissimulées sont placées entre les données des fichiers contenus dans l'archive et le répertoire central de l'archive, qui sert en quelque sorte de table des matières pour le fichier zip. Ce répertoire central contient les décalages des fichiers dans l'archive. Ainsi, bien que nos données injectées soient présentes dans le zip, elles ne sont pas suivies ni indexées par le répertoire central et ne peuvent donc pas être facilement visualisées ou extraites. Le script Python recherche le décalage « End of Central Directory » dans le fichier zip et le met à jour avec le nouvel emplacement du répertoire central après l'injection des données dissimulées. Le schéma suivant affiche la structure générale d'un zip à gauche, et l'emplacement où nos données ont été insérées à droite :

Les données dissimulées sont extraites à l'aide d'une commande PowerShell :
powershell.exe -w 1 -c "$name = \"testing\";$file = (get-childitem -Pa $Env:USERPROFILE -Re -Inc *$name.zip).fullname;$bytes=[System.IO.File]::ReadAllBytes($file);$size = (0..($bytes.Length - 4) | Where-Object {$bytes[$_] -eq 0x55 -and $bytes[$_+1] -eq 0x55 -and $bytes[$_+2] -eq 0x55 -and $bytes[$_+3] -eq 0x55 })[0] + 4;$length=12;$chunk=$bytes[$size..($size+$length-1)];$out = \"$Env:TEMP\$name.txt\";[System.IO.File]::WriteAllBytes($out,$chunk);Invoke-Item $out"
Cette commande :
0x55/0x55/0x55/0x55) marquant le début des données dissimuléesCette POC a été laissée assez générique / son armement pour utiliser d'autres types de fichiers / etc. sera laissé en exercice au lecteur.