
C#-Port von WMImplant, der entweder CIM oder WMI verwendet, um entfernte Systeme abzufragen.
C#-Port von WMImplant, das entweder CIM oder WMI verwendet, um entfernte Systeme abzufragen. Es können bereitgestellte Anmeldeinformationen oder die aktuelle Benutzersitzung verwendet werden.
Hinweis: Einige Befehle verwenden PowerShell in Kombination mit WMI, gekennzeichnet mit ** im Befehl --show-commands.
CIMplant ist eine C#-Neufassung und Erweiterung von @christruncer's WMImplant. Es ermöglicht das Sammeln von Daten über ein entferntes System, das Ausführen von Befehlen, das Exfiltrieren von Daten und mehr. Das Tool erlaubt Verbindungen mithilfe von Windows Management Instrumentation, WMI, oder Common Interface Model, CIM; genauer gesagt Windows Management Infrastructure, MI. CIMplant erfordert lokale Administratorberechtigungen auf dem Zielsystem.
Am einfachsten ist es wahrscheinlich, die erstellte Version unter Releases zu verwenden. Beachten Sie jedoch, dass sie im Debug-Modus kompiliert ist. Wenn Sie die Lösung selbst erstellen möchten, folgen Sie den nachstehenden Schritten.
CIMplant.exe --help
CIMplant.exe --show-commands
CIMplant.exe --show-examples
CIMplant.exe -s [remote IP address] -c cat -f c:\users\user\desktop\file.txt
CIMplant.exe -s [remote IP address] -u [username] -d [domain] -p [password] -c cat -f c:\users\test\desktop\file.txt
CIMplant.exe -s [remote IP address] -u [username] -d [domain] -p [password] -c command_exec --execute "dir c:\\"
cat - Liest den Inhalt einer Datei
copy - Kopiert eine Datei von einem Ort zum anderen
download** - Lädt eine Datei vom Zielcomputer herunter
ls - Datei-/Verzeichnisauflistung eines bestimmten Verzeichnisses
search - Sucht nach einer Datei auf einem Benutzer
upload** - Lädt eine Datei auf den Zielcomputer hoch
command_exec** - Führt einen Befehlszeilenbefehl aus und erhält die Ausgabe. Mit dem nops-Flag ausführen, um PowerShell zu deaktivieren
disable_wdigest - Setzt den Registrierungswert für UseLogonCredential auf Null
enable_wdigest - Fügt den Registrierungswert UseLogonCredential hinzu
disable_winrm** - Deaktiviert WinRM auf dem Zielsystem
enable_winrm** - Aktiviert WinRM auf dem Zielsystem
reg_mod - Ändert die Registrierung auf dem Zielcomputer
reg_create - Erstellt den Registrierungswert auf dem Zielcomputer
reg_delete - Löscht die Registrierung auf dem Zielcomputer
remote_posh** - Führt ein PowerShell-Skript auf einem entfernten Computer aus und erhält die Ausgabe
sched_job - Nicht implementiert wegen des Zugriffs auf eine veraltete API durch Win32_ScheduledJobs
service_mod - Erstellt, löscht oder ändert Systemdienste
process_kill - Beendet einen Prozess auf dem Zielcomputer anhand des Namens oder der Prozess-ID
process_start - Startet einen Prozess auf dem Zielcomputer
ps - Prozessauflistung
active_users - Listet Domänenbenutzer mit aktiven Prozessen auf dem Zielsystem auf
basic_info - Dient zur Auflistung grundlegender Metadaten über das Zielsystem
drive_list - Listet lokale und Netzwerklaufwerke auf
ifconfig - Ruft IP-Informationen von NICs mit aktiven Netzwerkverbindungen ab
installed_programs - Ruft eine Liste der installierten Programme auf dem Zielcomputer ab
logoff - Meldet Benutzer vom Zielcomputer ab
reboot (or restart) - Startet den Zielcomputer neu
power_off (or shutdown) - Schaltet den Zielcomputer aus
vacant_system - Stellt fest, ob ein Benutzer nicht am System ist
edr_query - Fragt das lokale oder entfernte System nach EDR-Anbietern ab
logon_events - Identifiziert Benutzer, die sich an einem System angemeldet haben
* Alle PowerShell-Befehle können mit dem Flag --nops deaktiviert werden, obwohl einige Befehle dann nicht ausgeführt werden (Hoch-/Herunterladen, Aktivieren/Deaktivieren von WinRM)
** Kennzeichnet PowerShell-Nutzung (entweder über einen PowerShell-Runspace oder über die Win32_Process::Create-Methode)

Ich wollte CIMplant so codieren, dass es die Nutzung über Execute-Assembly ermöglicht, daher ist alles in einer ausführbaren Datei gepackt und wird reflektiv geladen. Sie sollten alle Befehle problemlos über Beacon ausführen können. Viel Spaß!

Dies ist das Gehirn der Operation, der Treiber des Programms.
Hier werden die anfänglichen CIM-/WMI-Verbindungen hergestellt und an den Rest der Anwendung weitergegeben
Der gesamte Funktionscode für die WMI-Befehle
Der gesamte Funktionscode für die CIM (MI)-Befehle
Natürlich ist das Erste, worauf wir achten sollten, die anfängliche WMI- oder CIM-Verbindung. Im Allgemeinen verwendet WMI DCOM als Kommunikationsprotokoll, während CIM WSMan (oder WinRM) verwendet. Dies kann für CIM geändert werden, und in CIMplant ist es auch, aber gehen wir vorerst nur auf die Standardwerte ein. Bei DCOM können wir zunächst nach initialen TCP-Verbindungen über Port 135 suchen. Das verbindende und das empfangende System einigen sich dann auf einen neuen, sehr hohen Port, der stark variieren wird. Bei WSMan erfolgt die initiale TCP-Verbindung über Port 5985.
Als nächstes sollten Sie im Ereignisprotokoll "Microsoft-Windows-WMI-Activity/Trace" in der Ereignisanzeige suchen. Suchen Sie nach Ereignis-ID 11 und filtern Sie nach Möglichkeit nach der Eigenschaft "IsLocal". Sie können auch nach Ereignis-ID 1295 im Analyselog "Microsoft-Windows-WinRM/Analytic" suchen.
Schließlich sollten Sie nach Änderungen an der Eigenschaft DebugFilePath mit der Klasse Win32_OSRecoveryConfiguration suchen. Ausführlichere Informationen zur Erkennung finden Sie in Teil 1 unserer Blogserie hier: CIMplant Part 1: Detection of a C# Implementation of WMImplant