
Utilitário Python3 para criar arquivos zip que contrabandeiam dados adicionais para extração posterior.
Este utilitário Python cria arquivos zip que contêm dados adicionais embutidos na estrutura do arquivo. Esses dados extras não são visíveis/não aparecem quando o zip é examinado ou descompactado, mas podem ser recuperados usando powershell por meio de um arquivo de atalho do Windows (LNK) dentro do arquivo zip.
O script requer um nome para o seu arquivo zip / arquivo de atalho / arquivo contrabandeado, bem como o arquivo/dado que você deseja contrabandear:
python3 zip_smuggle.py important_data /home/ubuntu/zip_smuggling/testdata.txt
Isso produzirá important_data.zip na pasta do script. Transfira esse arquivo zip para uma máquina Windows, dê dois cliques no zip ou extraia-o e, em seguida, clique no atalho contido nele. Os dados que você forneceu para contrabandear serão recuperados do arquivo zip, salvos em disco e abertos como um arquivo de texto.
Este projeto aproveita um projeto anterior meu, lnk_generator, que permite criar arquivos de atalho arbitrários usando um modelo predefinido. Confira esse repositório para mais detalhes / scripts mais completos e notas sobre a geração de arquivos de atalho.
Os dados contrabandeados são colocados entre os dados dos arquivos contidos no arquivo compactado e o diretório central do arquivo, que serve como uma espécie de índice para o arquivo zip. Esse diretório central contém offsets dos arquivos dentro do arquivo compactado, portanto, embora nossos dados injetados estejam presentes no zip, eles não são rastreados ou indexados pelo diretório central e, assim, não podem ser facilmente visualizados ou extraídos. O script Python encontra o offset "End of Central Directory" dentro do arquivo zip e o atualiza com a nova localização do diretório central após a injeção dos dados contrabandeados. O gráfico a seguir exibe a estrutura geral de um zip à esquerda e onde nossos dados foram inseridos à direita:

Os dados contrabandeados são extraídos usando um 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"
Este comando:
0x55/0x55/0x55/0x55) que marca o início dos dados contrabandeadosEste POC foi deixado bastante genérico / transformá-lo em uma arma para usar outros tipos de arquivo / etc será deixado como exercício para o leitor.