
Porting in C# di WMImplant che utilizza CIM o WMI per interrogare sistemi remoti
Porting C# di WMImplant che utilizza CIM o WMI per interrogare sistemi remoti. Può usare credenziali fornite o la sessione dell'utente corrente.
Nota: alcuni comandi utilizzeranno PowerShell in combinazione con WMI, indicati con ** nel comando --show-commands.
CIMplant è una riscrittura in C# e un’espansione del WMImplant di @christruncer. Permette di raccogliere dati su un sistema remoto, eseguire comandi, esfiltrare dati e altro. Lo strumento consente connessioni tramite Windows Management Instrumentation, WMI, o Common Interface Model, CIM; più precisamente Windows Management Infrastructure, MI. CIMplant richiede permessi di amministratore locale sul sistema di destinazione.
Probabilmente è più semplice usare la versione precompilata disponibile in Releases; tieni presente che è compilata in modalità Debug. Se vuoi compilare la soluzione da solo, segui i passaggi seguenti.
CIMplant.exe --help
CIMplant.exe --show-commands
CIMplant.exe --show-examples
CIMplant.exe -s [indirizzo IP remoto] -c cat -f c:\users\user\desktop\file.txt
CIMplant.exe -s [indirizzo IP remoto] -u [nome utente] -d [dominio] -p [password] -c cat -f c:\users\test\desktop\file.txt
CIMplant.exe -s [indirizzo IP remoto] -u [nome utente] -d [dominio] -p [password] -c command_exec --execute "dir c:\\"
cat - Legge il contenuto di un file
copy - Copia un file da una posizione a un'altra
download** - Scarica un file dalla macchina di destinazione
ls - Elenco file/directory di una directory specifica
search - Cerca un file su un utente
upload** - Carica un file sulla macchina di destinazione
command_exec** - Esegue un comando da riga di comando e riceve l'output. Esegui con il flag nops per disabilitare PowerShell
disable_wdigest - Imposta il valore del registro UseLogonCredential a zero
enable_wdigest - Aggiunge il valore del registro UseLogonCredential
disable_winrm** - Disabilita WinRM sul sistema di destinazione
enable_winrm** - Abilita WinRM sul sistema di destinazione
reg_mod - Modifica il registro sulla macchina di destinazione
reg_create - Crea il valore del registro sulla macchina di destinazione
reg_delete - Elimina il registro sulla macchina di destinazione
remote_posh** - Esegue uno script PowerShell su una macchina remota e riceve l'output
sched_job - Non implementato a causa dell'accesso a un'API obsoleta da parte di Win32_ScheduledJobs
service_mod - Crea, elimina o modifica servizi di sistema
process_kill - Termina un processo tramite nome o ID processo sulla macchina di destinazione
process_start - Avvia un processo sulla macchina di destinazione
ps - Elenco dei processi
active_users - Elenca gli utenti del dominio con processi attivi sul sistema di destinazione
basic_info - Usato per enumerare metadati di base sul sistema di destinazione
drive_list - Elenca unità locali e di rete
ifconfig - Riceve informazioni IP dalle schede di rete con connessioni attive
installed_programs - Riceve un elenco dei programmi installati sulla macchina di destinazione
logoff - Disconnette gli utenti dalla macchina di destinazione
reboot (o restart) - Riavvia la macchina di destinazione
power_off (o shutdown) - Spegne la macchina di destinazione
vacant_system - Determina se un utente è lontano dal sistema
edr_query - Interroga il sistema locale o remoto per i vendor EDR
logon_events - Identifica gli utenti che hanno effettuato l'accesso a un sistema
* Tutti i comandi PowerShell possono essere disabilitati usando il flag --nops, anche se alcuni comandi non verranno eseguiti (upload/download, abilita/disabilita WinRM)
** Indica l'uso di PowerShell (tramite PowerShell Runspace o il metodo Win32_Process::Create)

Volevo programmare CIMplant in modo da permetterne l'uso tramite execute-assembly, quindi tutto è impacchettato in un unico eseguibile e caricato in modo riflessivo. Dovresti essere in grado di eseguire tutti i comandi tramite beacon senza problemi. Buon divertimento!

Questo è il cervello dell'operazione, il driver del programma.
Qui vengono effettuate le connessioni iniziali CIM/WMI e passate al resto dell'applicazione
Tutto il codice delle funzioni per i comandi WMI
Tutto il codice delle funzioni per i comandi CIM (MI)
Ovviamente, la prima cosa di cui essere consapevoli è la connessione iniziale WMI o CIM. In generale, WMI usa DCOM come protocollo di comunicazione mentre CIM usa WSMan (o WinRM). Questo può essere modificato per CIM, ed è così in CIMplant, ma per ora consideriamo i valori predefiniti. Per DCOM, la prima cosa da cercare sono le connessioni TCP iniziali sulla porta 135. I sistemi mittente e destinatario decideranno poi su una nuova porta molto alta da usare, che quindi varierà notevolmente. Per WSMan, la connessione TCP iniziale avviene sulla porta 5985.
Successivamente, cerca il registro eventi Microsoft-Windows-WMI-Activity/Trace nel Visualizzatore eventi. Cerca Event ID 11 e filtra sulla proprietà IsLocal se possibile. Puoi anche cercare Event ID 1295 nel registro Microsoft-Windows-WinRM/Analytic.
Infine, cerca eventuali modifiche alla proprietà DebugFilePath con la classe Win32_OSRecoveryConfiguration. Informazioni più dettagliate sul rilevamento sono disponibili nella Parte 1 della nostra serie di blog qui: CIMplant Part 1: Detection of a C# Implementation of WMImplant