
DCOM ラテラルムーブメント POC - IMsiServer インターフェースを悪用し、リモートでペイロードをアップロードして実行する
IMsiServer インターフェイスを悪用した DCOM ラテラルムーブメントの POC
https://www.deepinstinct.com/blog/forget-psexec-dcom-upload-execute-backdoor
このソリューションには 2 つのプロジェクトが含まれています
DCOMUploadExec - ラテラルムーブメント攻撃コードをホストする C++ プロジェクト
AssemblyPayload - MessageBox を表示する .NET DLL です。これは DCOMUploadExec がデフォルトで使用するペイロードです
ソリューションをコンパイルします
Usage: DCOMUploadExec.exe [domain]\[user]:[password]@[address]
Local Usage: DCOMUploadExec.exe LOCALHOST (Run this as administrator)
DCOMUploadExec.exe は次のことを行います:
デフォルトのペイロード DLL である AssemblyPayload をリモート PC にアップロードする
DLL をリモートの MSIEXEC.exe プロセスにロードする
DLL からエクスポート関数を実行する
エクスポート関数から結果を受け取る
ペイロードは 厳密な名前 を持つ .NET アセンブリである必要があります
PayloadConfig.h は、DCOMUploadExec が使用するペイロードを設定するために使われます。
デフォルトでは AssemblyPayload の出力に設定されています。
カスタムペイロードを使用するには:
厳密な名前 を持つ .NET アセンブリを作成し、InitializeEmbeddedUI という名前の関数をエクスポートします - この関数が、DCOMUploadExec が最終的にリモートターゲット上で実行する関数になります
カスタムペイロードの詳細を PayloadConfig.h に記入します:
PAYLOAD_ASSEMBLY_PATH = // 作成したペイロードへのローカルパス
ASSEMBLY_NAME = // アセンブリ名
ASSEMBLY_BITNESS = // x64 ペイロードの場合は "64"、x86 ペイロードの場合は "32"
ASSEMBLY_VERSION = // sigcheck.exe -n PAYLOAD_ASSEMBLY_PATH の値
ASSEMBLY_PUBLIC_KEY = // 次の値
sn.exe -T PAYLOAD_ASSEMBLY_PATH から取得
DCOMUploadExec をコンパイルして使用します
攻撃者と被害者のマシンは、同じドメインまたはフォレスト内にある必要があります。
攻撃者と被害者のマシンは、DCOM 強化パッチ と整合している必要があります - 両方のシステムにパッチが適用されているか、両方に適用されていないかのいずれかである必要があります。
アセンブリペイロードには 厳密な名前 が必要です。
アセンブリペイロードは x86 または x64 のいずれかである必要があります (AnyCPU は不可)。