
DCOM Lateral-Movement-PoC, das die IMsiServer-Schnittstelle missbraucht – lädt ein Payload hoch und führt es remote aus.
DCOM-Lateral-Movement-POC, der die IMsiServer-Schnittstelle missbraucht
https://www.deepinstinct.com/blog/forget-psexec-dcom-upload-execute-backdoor
Die Projektmappe enthält 2 Projekte
DCOMUploadExec - Ein C++-Projekt, das den Lateral-Movement-Angriffscode enthält
AssemblyPayload - Eine .NET-DLL, die eine MessageBox anzeigt. Sie ist das Standard-Payload, das DCOMUploadExec verwendet
Kompilieren Sie die Projektmappe
Usage: DCOMUploadExec.exe [domain]\[user]:[password]@[address]
Local Usage: DCOMUploadExec.exe LOCALHOST (Run this as administrator)
DCOMUploadExec.exe führt Folgendes aus:
Lädt die Standard-Payload-DLL, AssemblyPayload, auf den entfernten PC hoch
Lädt die DLL in einen entfernten MSIEXEC.exe-Prozess
Führt einen Export aus der DLL aus
Empfängt ein Ergebnis des Exports
Das Payload muss eine stark benannte .NET-Assembly sein
PayloadConfig.h wird verwendet, um das Payload zu konfigurieren, das DCOMUploadExec verwendet.
Standardmäßig ist es auf die Ausgabe von AssemblyPayload festgelegt.
Um ein benutzerdefiniertes Payload zu verwenden:
Erstellen Sie eine stark benannte .NET-Assembly, die eine Funktion namens InitializeEmbeddedUI exportiert - dies ist die Funktion, die DCOMUploadExec schließlich auf dem entfernten Ziel ausführen wird
Tragen Sie die Details Ihres benutzerdefinierten Payloads in PayloadConfig.h ein:
PAYLOAD_ASSEMBLY_PATH = // lokaler Pfad zu Ihrem erstellten Payload
ASSEMBLY_NAME = // der Assembly-Name
ASSEMBLY_BITNESS = // "64" für ein x64-Payload, "32" für ein x86-Payload;
ASSEMBLY_VERSION = // der Wert von sigcheck.exe -n PAYLOAD_ASSEMBLY_PATH
ASSEMBLY_PUBLIC_KEY = // der Wert
von
sn.exe -T PAYLOAD_ASSEMBLY_PATH
Kompilieren Sie DCOMUploadExec und verwenden Sie es
Die Angreifer- und Opfercomputer müssen sich in derselben Domäne oder Gesamtstruktur befinden.
Die Angreifer- und Opfercomputer müssen hinsichtlich des DCOM-Härtungspatches übereinstimmen - entweder ist der Patch auf beiden Systemen angewendet oder auf beiden nicht angewendet.
Das Assembly-Payload muss einen starken Namen haben.
Das Assembly-Payload muss entweder x86 oder x64 sein (AnyCPU ist nicht möglich).