このPythonユーティリティは、ファイル構造内に追加データを埋め込んだzipファイルを作成します。この追加データは、zipを検査または解凍しても表示されませんが、zipファイル内のWindowsショートカットファイル(LNK)を介してPowerShellを使用して取得できます。
このスクリプトには、zipファイル/ショートカットファイル/スマイグルするファイルの名前と、スマイグルしたいファイル/データが必要です:
python3 zip_smuggle.py important_data /home/ubuntu/zip_smuggling/testdata.txt
これにより、スクリプトフォルダ内に important_data.zip が生成されます。このzipファイルをWindowsマシンに転送し、zipをダブルクリックして開くか展開して、その中に含まれるショートカットをクリックします。スマイグル用に指定したデータはzipファイルから取得され、ディスクに保存され、テキストファイルとして開かれます。
このプロジェクトは、以前私が作成した lnk_generator を利用しています。これは、プリセットテンプレートを使用して任意のショートカットファイルを作成できるものです。ショートカットファイルの生成に関する詳細や、より完全なスクリプト/メモについては、そのリポジトリを確認してください。
スマイグルされたデータは、アーカイブ内に含まれるファイルのデータと、zipファイルの目次のような役割を果たすアーカイブの中央ディレクトリとの間に配置されます。この中央ディレクトリにはアーカイブ内のファイルのオフセットが含まれているため、注入されたデータはzip内に存在しますが、中央ディレクトリによって追跡または索引付けされず、簡単に表示または抽出できません。Pythonスクリプトはzipファイル内の「End of Central Directory」オフセットを見つけ、スマイグルデータが注入された後の中央ディレクトリの新しい場所にそれを更新します。次の図は、左側にzipの一般的な構造、右側にデータが挿入された場所を示しています:

スマイグルされたデータは、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"
このコマンド:
0x55/0x55/0x55/0x55)を見つけますこのPOCはかなり一般的なままにしてあります。他のファイルタイプなどに利用(武器化)する方法は、読者への課題として残されています。