
Port C# de WMImplant qui utilise soit CIM soit WMI pour interroger des systèmes distants
Portage C# de WMImplant qui utilise soit CIM soit WMI pour interroger des systèmes distants. Il peut utiliser des identifiants fournis ou la session de l'utilisateur actuel.
Remarque : Certaines commandes utiliseront PowerShell en combinaison avec WMI, signalées par ** dans la commande --show-commands.
CIMplant est une réécriture en C# et une extension du WMImplant de @christruncer. Il vous permet de collecter des données sur un système distant, d'exécuter des commandes, d'exfiltrer des données, etc. L'outil permet les connexions en utilisant Windows Management Instrumentation, WMI, ou Common Interface Model, CIM ; plus précisément Windows Management Infrastructure, MI. CIMplant nécessite des autorisations d'administrateur local sur le système cible.
Il est probablement plus simple d'utiliser la version précompilée sous Releases, notez simplement qu'elle est compilée en mode Debug. Si vous souhaitez construire la solution vous-même, suivez les étapes ci-dessous.
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 - Lit le contenu d'un fichier
copy - Copie un fichier d'un emplacement à un autre
download** - Télécharge un fichier depuis la machine cible
ls - Liste des fichiers/répertoires d'un répertoire spécifique
search - Recherche un fichier sur un utilisateur
upload** - Téléverse un fichier vers la machine cible
command_exec** - Exécute une commande en ligne de commande et reçoit la sortie. Utilisez le drapeau nops pour désactiver PowerShell
disable_wdigest - Définit la valeur de registre UseLogonCredential à zéro
enable_wdigest - Ajoute la valeur de registre UseLogonCredential
disable_winrm** - Désactive WinRM sur le système ciblé
enable_winrm** - Active WinRM sur le système ciblé
reg_mod - Modifie le registre sur la machine cible
reg_create - Crée la valeur de registre sur la machine cible
reg_delete - Supprime le registre sur la machine cible
remote_posh** - Exécute un script PowerShell sur une machine distante et reçoit la sortie
sched_job - Non implémenté car Win32_ScheduledJobs accède à une API obsolète
service_mod - Crée, supprime ou modifie des services système
process_kill - Tue un processus par nom ou identifiant de processus sur la machine cible
process_start - Démarre un processus sur la machine cible
ps - Liste des processus
active_users - Liste les utilisateurs du domaine ayant des processus actifs sur le système ciblé
basic_info - Utilisé pour énumérer les métadonnées de base du système ciblé
drive_list - Liste les lecteurs locaux et réseau
ifconfig - Reçoit les informations IP des cartes réseau avec connexions actives
installed_programs - Reçoit une liste des programmes installés sur la machine cible
logoff - Déconnecte les utilisateurs de la machine cible
reboot (or restart) - Redémarre la machine cible
power_off (or shutdown) - Éteint la machine cible
vacant_system - Détermine si un utilisateur est absent du système
edr_query - Interroge le système local ou distant pour les fournisseurs EDR
logon_events - Identifie les utilisateurs qui se sont connectés à un système
* Tout PowerShell peut être désactivé en utilisant le drapeau --nops, bien que certaines commandes ne s'exécutent pas (upload/download, enable/disable WinRM)
** Dénote l'utilisation de PowerShell (soit en utilisant un Runspace PowerShell, soit via la méthode Win32_Process::Create)

Je voulais coder CIMplant de manière à permettre son utilisation via execute-assembly, donc tout est empaqueté dans un seul exécutable et chargé de manière réflexive. Vous devriez pouvoir exécuter toutes les commandes via beacon sans problème. Profitez-en !

C'est le cerveau de l'opération, le pilote du programme.
C'est là que les connexions initiales CIM/WMI sont établies et transmises au reste de l'application
Tout le code de fonction pour les commandes WMI
Tout le code de fonction pour les commandes CIM (MI)
Bien sûr, la première chose à laquelle nous devons prêter attention est la connexion initiale WMI ou CIM. En général, WMI utilise DCOM comme protocole de communication tandis que CIM utilise WSMan (ou WinRM). Cela peut être modifié pour CIM, et l'est dans CIMplant, mais passons en revue les valeurs par défaut pour l'instant. Pour DCOM, la première chose que nous pouvons faire est de rechercher les connexions TCP initiales sur le port 135. Les systèmes connecteur et récepteur décident ensuite d'un nouveau port très élevé à utiliser, ce qui variera considérablement. Pour WSMan, la connexion TCP initiale se fait sur le port 5985.
Ensuite, vous voudrez consulter le journal des événements Microsoft-Windows-WMI-Activity/Trace dans l'Observateur d'événements. Recherchez Event ID 11 et filtrez sur la propriété IsLocal si possible. Vous pouvez également rechercher Event ID 1295 dans le journal Microsoft-Windows-WinRM/Analytic.
Enfin, vous voudrez rechercher toute modification de la propriété DebugFilePath avec la classe Win32_OSRecoveryConfiguration. Des informations plus détaillées sur la détection se trouvent dans la Partie 1 de notre série de blogs ici : CIMplant Part 1: Detection of a C# Implementation of WMImplant