
WMImplantのC#移植版。CIMまたはWMIを使用してリモートシステムを照会します。
WMImplant の C# 移植版で、CIM または WMI を使用してリモートシステムをクエリします。提供された資格情報または現在のユーザーセッションを使用できます。
注: 一部のコマンドは PowerShell と WMI を組み合わせて使用します。--show-commands コマンドでは ** で示されます。
CIMplant は @christruncer の WMImplant の C# による書き換えと拡張です。リモートシステムに関するデータ収集、コマンド実行、データ流出などが可能です。このツールは Windows Management Instrumentation (WMI) または Common Interface Model (CIM)、より正確には Windows Management Infrastructure (MI) を使用した接続をサポートします。CIMplant は対象システムに対するローカル管理者権限が必要です。
Releases にあるビルド済みバージョンを使用するのが最も簡単ですが、Debug モードでコンパイルされていることに注意してください。自分でソリューションをビルドする場合は、以下の手順に従ってください。
CIMplant.exe --help
CIMplant.exe --show-commands
CIMplant.exe --show-examples
CIMplant.exe -s [リモートIPアドレス] -c cat -f c:\users\user\desktop\file.txt
CIMplant.exe -s [リモートIPアドレス] -u [ユーザー名] -d [ドメイン] -p [パスワード] -c cat -f c:\users\test\desktop\file.txt
CIMplant.exe -s [リモートIPアドレス] -u [ユーザー名] -d [ドメイン] -p [パスワード] -c command_exec --execute "dir c:\\"
cat - ファイルの内容を読み取ります
copy - ファイルを別の場所にコピーします
download** - 対象マシンからファイルをダウンロードします
ls - 特定のディレクトリのファイル/ディレクトリ一覧を表示します
search - ユーザーのファイルを検索します
upload** - 対象マシンにファイルをアップロードします
command_exec** - コマンドラインコマンドを実行し、出力を受け取ります。nops フラグを指定すると PowerShell を無効にします
disable_wdigest - UseLogonCredential のレジストリ値をゼロに設定します
enable_wdigest - UseLogonCredential レジストリ値を追加します
disable_winrm** - 対象システムの WinRM を無効にします
enable_winrm** - 対象システムの WinRM を有効にします
reg_mod - 対象マシンのレジストリを変更します
reg_create - 対象マシンにレジストリ値を作成します
reg_delete - 対象マシンのレジストリを削除します
remote_posh** - リモートマシンで PowerShell スクリプトを実行し、出力を受け取ります
sched_job - Win32_ScheduledJobs が古い API にアクセスするため実装されていません
service_mod - システムサービスの作成、削除、変更を行います
process_kill - 名前またはプロセス ID で対象マシン上のプロセスを強制終了します
process_start - 対象マシン上でプロセスを開始します
ps - プロセス一覧を表示します
active_users - 対象システムでアクティブなプロセスを持つドメインユーザーを一覧表示します
basic_info - 対象システムの基本メタデータを列挙します
drive_list - ローカルおよびネットワークドライブを一覧表示します
ifconfig - アクティブなネットワーク接続を持つ NIC の IP 情報を取得します
installed_programs - 対象マシンにインストールされているプログラムの一覧を取得します
logoff - 対象マシンからユーザーをログオフします
reboot (または restart) - 対象マシンを再起動します
power_off (または shutdown) - 対象マシンの電源をオフにします
vacant_system - ユーザーがシステムから離れているかどうかを確認します
edr_query - ローカルまたはリモートシステムの EDR ベンダーをクエリします
logon_events - システムにログオンしたユーザーを特定します
* PowerShell は --nops フラグを使用して無効にできますが、一部のコマンド(アップロード/ダウンロード、WinRM の有効化/無効化)は実行されません
** PowerShell の使用を示します(PowerShell Runspace または Win32_Process::Create メソッドを使用)

CIMplant は execute-assembly を通じて使用できるように設計されており、すべてを 1 つの実行可能ファイルにパッケージ化し、リフレクティブに読み込みます。すべてのコマンドを問題なく Beacon 経由で実行できるはずです。お楽しみください!

処理の中核、プログラムのドライバです。
初期の CIM/WMI 接続が行われ、アプリケーションの残りの部分に渡されます。
WMI コマンドのすべての関数コード
CIM (MI) コマンドのすべての関数コード
まず最初に注意すべきは、初期の WMI または CIM 接続です。一般的に、WMI は通信プロトコルとして DCOM を使用し、CIM は WSMan(または WinRM)を使用します。これは CIM で変更可能であり、CIMplant でも変更されていますが、ここではデフォルト値について説明します。DCOM の場合、まず ポート 135 上の初期 TCP 接続を探します。接続元と受信側のシステムは新しい非常に高いポートを使用することに合意するため、そのポートは大きく異なります。WSMan の場合、初期 TCP 接続は ポート 5985 上で行われます。
次に、イベントビューアーの Microsoft-Windows-WMI-Activity/Trace イベントログを確認します。イベント ID 11 を検索し、可能であれば IsLocal プロパティでフィルタリングします。また、Microsoft-Windows-WinRM/Analytic ログ内の イベント ID 1295 も確認してください。
最後に、Win32_OSRecoveryConfiguration クラスの DebugFilePath プロパティへの変更がないか確認します。検出に関する詳細情報は、ブログシリーズのパート 1 をご覧ください:CIMplant Part 1: Detection of a C# Implementation of WMImplant