
Utilidad de Python3 para crear archivos zip que ocultan datos adicionales para su posterior extracción.
Esta utilidad de Python crea archivos zip que contienen datos adicionales incrustados dentro de la estructura del archivo. Estos datos extra no son visibles/no se muestran cuando se examina o descomprime el zip, pero pueden recuperarse mediante powershell a través de un archivo de acceso directo de Windows (LNK) dentro del archivo zip.
El script requiere un nombre para tu archivo zip / archivo de acceso directo / archivo oculto, así como el archivo/dato que deseas ocultar:
python3 zip_smuggle.py important_data /home/ubuntu/zip_smuggling/testdata.txt
Esto producirá important_data.zip dentro de la carpeta del script. Transfiere este archivo zip a una máquina Windows, haz doble clic dentro del zip o extráelo, y luego haz clic en el acceso directo contenido en él. Los datos que proporcionaste para ocultar se recuperarán del archivo zip, se guardarán en el disco y se abrirán como un archivo de texto.
Este proyecto aprovecha uno más antiguo mío, lnk_generator, que permite crear archivos de acceso directo arbitrarios utilizando una plantilla preestablecida. Visita ese repositorio para más detalles / scripts más completos y notas sobre la generación de archivos de acceso directo.
Los datos ocultos se colocan entre los datos de los archivos contenidos en el archivo y el directorio central del archivo, que sirve como una especie de tabla de contenido para el archivo zip. Este directorio central contiene los desplazamientos de los archivos dentro del archivo, por lo que, aunque nuestros datos inyectados están presentes en el zip, no son rastreados ni indexados por el directorio central y, por lo tanto, no pueden verse o extraerse fácilmente. El script de Python encuentra el desplazamiento de "End of Central Directory" dentro del archivo zip y lo actualiza con la nueva ubicación del directorio central después de que se hayan inyectado los datos ocultos. El siguiente gráfico muestra la estructura general de un zip a la izquierda, y dónde se han insertado nuestros datos a la derecha:

Los datos ocultos se extraen mediante un comando de 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"
Este comando:
0x55/0x55/0x55/0x55) que marca el inicio de los datos ocultosEsta POC se ha dejado bastante general / convertirla en un arma para usar otros tipos de archivo / etc. se dejará como ejercicio para el lector.