
Traducción a C# de WMImplant que utiliza CIM o WMI para consultar sistemas remotos
Versión en C# de WMImplant que utiliza CIM o WMI para consultar sistemas remotos. Puede usar credenciales proporcionadas o la sesión del usuario actual.
Nota: Algunos comandos usarán PowerShell en combinación con WMI, indicados con ** en el comando --show-commands.
CIMplant es una reescritura y expansión en C# de @christruncer's WMImplant. Permite recopilar datos de un sistema remoto, ejecutar comandos, extraer datos y más. La herramienta permite conexiones usando Instrumentación de Administración de Windows, WMI, o Modelo de Interfaz Común, CIM ; bueno, más precisamente Infraestructura de Administración de Windows, MI. CIMplant requiere permisos de administrador local en el sistema objetivo.
Probablemente sea más fácil usar la versión compilada en Releases, solo ten en cuenta que está compilada en modo Debug. Si deseas compilar la solución tú mismo, sigue los pasos a continuación.
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 - Lee el contenido de un archivo
copy - Copia un archivo de una ubicación a otra
download** - Descarga un archivo de la máquina objetivo
ls - Listado de archivos/directorios de un directorio específico
search - Busca un archivo en un usuario
upload** - Sube un archivo a la máquina objetivo
command_exec** - Ejecuta un comando de línea de comandos y recibe la salida. Ejecutar con el flag nops para deshabilitar PowerShell
disable_wdigest - Establece el valor de registro UseLogonCredential a cero
enable_wdigest - Agrega el valor de registro UseLogonCredential
disable_winrm** - Deshabilita WinRM en el sistema objetivo
enable_winrm** - Habilita WinRM en el sistema objetivo
reg_mod - Modifica el registro en la máquina objetivo
reg_create - Crea el valor de registro en la máquina objetivo
reg_delete - Elimina el registro en la máquina objetivo
remote_posh** - Ejecuta un script de PowerShell en una máquina remota y recibe la salida
sched_job - No implementado debido a que Win32_ScheduledJobs accede a una API obsoleta
service_mod - Crea, elimina o modifica servicios del sistema
process_kill - Mata un proceso por nombre o ID de proceso en la máquina objetivo
process_start - Inicia un proceso en la máquina objetivo
ps - Listado de procesos
active_users - Lista usuarios del dominio con procesos activos en el sistema objetivo
basic_info - Se usa para enumerar metadatos básicos del sistema objetivo
drive_list - Lista unidades locales y de red
ifconfig - Recibe información IP de NICs con conexiones de red activas
installed_programs - Recibe una lista de los programas instalados en la máquina objetivo
logoff - Cierra la sesión de los usuarios en la máquina objetivo
reboot (or restart) - Reinicia la máquina objetivo
power_off (or shutdown) - Apaga la máquina objetivo
vacant_system - Determina si un usuario está ausente del sistema
edr_query - Consulta el sistema local o remoto por proveedores EDR
logon_events - Identifica usuarios que han iniciado sesión en un sistema
* Todo PowerShell se puede deshabilitar usando el flag --nops, aunque algunos comandos no se ejecutarán (subir/descargar, habilitar/deshabilitar WinRM)
** Denota uso de PowerShell (ya sea usando un Runspace de PowerShell o mediante el método Win32_Process::Create)

Quise codificar CIMplant de manera que permita su uso a través de execute-assembly, por lo que todo está empaquetado en un único ejecutable y cargado de forma reflectiva. Deberías poder ejecutar todos los comandos a través de beacon sin problemas. ¡Disfruta!

Este es el cerebro de la operación, el controlador del programa.
Aquí es donde se realizan las conexiones iniciales CIM/WMI y se pasan al resto de la aplicación
Todo el código de las funciones para los comandos WMI
Todo el código de las funciones para los comandos CIM (MI)
Por supuesto, lo primero que debemos tener en cuenta es la conexión inicial WMI o CIM. En general, WMI usa DCOM como protocolo de comunicación, mientras que CIM usa WSMan (o WinRM). Esto se puede modificar para CIM, y así se hace en CIMplant, pero por ahora solo revisemos los valores predeterminados. Para DCOM, lo primero que podemos hacer es buscar conexiones TCP iniciales en el puerto 135. Los sistemas conectante y receptor luego decidirán un nuevo puerto muy alto para usar, por lo que variará drásticamente. Para WSMan, la conexión TCP inicial es en el puerto 5985.
A continuación, querrás revisar el registro de eventos Microsoft-Windows-WMI-Activity/Trace en el Visor de eventos. Busca el Event ID 11 y filtra por la propiedad IsLocal si es posible. También puedes buscar el Event ID 1295 dentro del registro Microsoft-Windows-WinRM/Analytic.
Finalmente, querrás buscar cualquier modificación a la propiedad DebugFilePath con la clase Win32_OSRecoveryConfiguration. Se puede encontrar información más detallada sobre la detección en la Parte 1 de nuestra serie de blogs aquí: CIMplant Parte 1: Detección de una implementación en C# de WMImplant