
Utilità Python3 per creare file zip che intrufolano dati aggiuntivi da estrarre in seguito.
Questa utility Python crea file zip che contengono dati aggiuntivi incorporati nella struttura del file. Questi dati extra non sono visibili/non vengono mostrati quando lo zip viene esaminato o decompresso, ma possono essere recuperati tramite PowerShell usando un file di collegamento di Windows (LNK) all'interno del file zip.
Lo script richiede un nome per il file zip / file di collegamento / file contrabbandato, oltre al file/dato che desideri contrabbandare:
python3 zip_smuggle.py important_data /home/ubuntu/zip_smuggling/testdata.txt
Questo produrrà important_data.zip nella cartella dello script. Trasferisci questo file zip su una macchina Windows, fai doppio clic sullo zip o estrailo, quindi fai clic sul collegamento contenuto al suo interno. I dati che hai fornito da contrabbandare verranno recuperati dal file zip, salvati su disco e aperti come file di testo.
Questo progetto sfrutta un mio progetto precedente, lnk_generator, che consente di creare file di collegamento arbitrari utilizzando un modello preimpostato. Dai un'occhiata a quel repository per maggiori dettagli / script più completi e note sulla generazione di file di collegamento.
I dati contrabbandati vengono inseriti tra i dati dei file contenuti nell'archivio e la directory centrale dell'archivio, che funge da una sorta di indice per il file zip. Questa directory centrale contiene gli offset dei file all'interno dell'archivio, quindi mentre i nostri dati iniettati sono presenti nello zip, non vengono tracciati o indicizzati dalla directory centrale e pertanto non possono essere facilmente visualizzati o estratti. Lo script Python trova l'offset "End of Central Directory" all'interno del file zip e lo aggiorna con la nuova posizione della directory centrale dopo l'iniezione dei dati contrabbandati. La seguente grafica mostra la struttura generale di uno zip a sinistra e dove i nostri dati sono stati inseriti a destra:

I dati contrabbandati vengono estratti tramite un comando 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"
Questo comando:
0x55/0x55/0x55/0x55) che segna l'inizio dei dati contrabbandatiQuesto POC è stato lasciato abbastanza generico / armarlo per usare altri tipi di file / ecc. sarà lasciato come esercizio al lettore.