
PowerShellスクリプトをPNGファイルのピクセルにエンコードし、実行するためのワンライナーを生成します。
PowerShellスクリプトをPNGファイルのピクセルにエンコードし、実行するためのワンライナーを生成します
Invoke-PSImageはPowerShellスクリプトを受け取り、そのスクリプトのバイトをPNG画像のピクセルにエンコードします。ファイルから、またはウェブから実行するためのワンライナーを生成します。
ペイロードデータのみを使用して新しい画像を作成することも、既存の画像の最下位バイトにペイロードを埋め込んで実際の画像のように見せることもできます。画像はPNGとして保存され、データは色自体に保存されるため、ペイロードを実行する能力に影響を与えることなくロスレス圧縮が可能です。新しい画像を作成する場合、通常のPowerShellスクリプトは実際に大幅に圧縮され、通常は元のスクリプトの約50%のファイルサイズのPNGが生成されます。
埋め込み方式では、各ピクセルの2つの色値の最下位4ビットを使用してペイロードを保持します。その結果、画像品質は低下しますが、それでも見栄えは悪くありません。ほとんどの画像タイプを入力として受け入れられますが、出力はロスレスが必要なため常にPNGになります。画像の各ピクセルはスクリプトの1バイトを保持するために使用されるため、スクリプトのバイト数と同じ数のピクセルを持つ画像が必要です。これはかなり簡単です。例えば、Invoke-Mimikatzは1920x1200画像に収まります。
-Script [filepath] 画像に埋め込むスクリプトへのパス。
-Out [filepath] 結果の画像を保存するファイル(画像はPNGになります)。
-Image [filepath] スクリプトを埋め込む画像。(オプション)
-WebRequest Net.WebClientを使用してウェブから画像を読み取るコマンドを出力します。画像をホストし、URLをコマンドに挿入する必要があります。
-PictureBox System.Windows.Forms.PictureBoxを使用してウェブから画像を読み取るコマンドを出力します。画像をホストし、URLをコマンドに挿入する必要があります。
スクリプト「Invoke-Mimikatz.ps1」を埋め込んだ画像を作成し、ディスクから実行するワンライナーを出力します:
PS>Import-Module .\Invoke-PSImage.ps1
PS>Invoke-PSImage -Script .\Invoke-Mimikatz.ps1 -Out .\evil-kiwi.png -Image .\kiwi.jpg
[Oneliner to execute from a file]
スクリプト「Invoke-Mimikatz.ps1」を埋め込んだ画像を作成し、ウェブから実行するワンライナーを出力します(画像をホストし、URLを編集する必要があります):
PS>Import-Module .\Invoke-PSImage.ps1
PS>Invoke-PSImage -Script .\Invoke-Mimikatz.ps1 -Out .\evil-kiwi.png -Image .\kiwi.jpg -WebRequest
[Oneliner to execute from the web]
ウェブ上でホストされた画像を実行:
