
Порт на C# инструмента WMImplant, который использует CIM или WMI для запроса удаленных систем
C# порт WMImplant, который использует CIM или WMI для запроса удаленных систем. Он может использовать предоставленные учетные данные или сессию текущего пользователя.
Примечание: Некоторые команды будут использовать PowerShell в сочетании с WMI. Это обозначено знаком ** в выводе команды --show-commands.
CIMplant — это переписанная на C# и расширенная версия WMImplant от @christruncer. Она позволяет собирать данные об удаленной системе, выполнять команды, извлекать данные и многое другое. Инструмент позволяет подключаться с использованием Windows Management Instrumentation, WMI, или Common Interface Model, CIM; точнее, Windows Management Infrastructure, MI. CIMplant требует локальных прав администратора на целевой системе.
Проще всего использовать собранную версию из раздела Releases, но учтите, что она скомпилирована в режиме Debug. Если вы хотите собрать решение самостоятельно, выполните следующие шаги.
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 - Читает содержимое файла
copy - Копирует файл из одного места в другое
download** - Загружает файл с целевой машины
ls - Выводит список файлов/каталогов в указанной директории
search - Ищет файл у пользователя
upload** - Загружает файл на целевую машину
command_exec** - Выполняет команду командной строки и выводит результат. Запускается с флагом nops для отключения PowerShell
disable_wdigest - Устанавливает значение реестра UseLogonCredential в ноль
enable_wdigest - Добавляет значение реестра UseLogonCredential
disable_winrm** - Отключает WinRM на целевой системе
enable_winrm** - Включает WinRM на целевой системе
reg_mod - Изменяет реестр на целевой машине
reg_create - Создает значение реестра на целевой машине
reg_delete - Удаляет значение реестра на целевой машине
remote_posh** - Запускает скрипт PowerShell на удаленной машине и выводит результат
sched_job - Не реализовано из-за того, что Win32_ScheduledJobs обращается к устаревшему API
service_mod - Создает, удаляет или изменяет системные службы
process_kill - Завершает процесс по имени или идентификатору на целевой машине
process_start - Запускает процесс на целевой машине
ps - Выводит список процессов
active_users - Выводит доменных пользователей с активными процессами на целевой системе
basic_info - Используется для сбора базовой метаинформации о целевой системе
drive_list - Выводит список локальных и сетевых дисков
ifconfig - Получает IP-информацию от сетевых интерфейсов с активными подключениями
installed_programs - Получает список установленных программ на целевой машине
logoff - Выполняет выход пользователей из целевой машины
reboot (или restart) - Перезагружает целевую машину
power_off (или shutdown) - Выключает целевую машину
vacant_system - Определяет, отошел ли пользователь от системы
edr_query - Запрашивает локальную или удаленную систему на наличие вендоров EDR
logon_events - Определяет пользователей, входивших в систему
* Любое использование PowerShell можно отключить с помощью флага --nops, хотя некоторые команды не будут выполняться (upload/download, enable/disable WinRM)
** Обозначает использование PowerShell (либо через Runspace PowerShell, либо через метод Win32_Process::Create)

Я хотел написать CIMplant таким образом, чтобы его можно было использовать через execute-assembly, поэтому всё упаковано в один исполняемый файл и загружается рефлективно. Все команды должны работать через beacon без проблем. Наслаждайтесь!

Это мозг операции, драйвер программы.
Здесь устанавливаются первоначальные CIM/WMI-соединения и передаются в остальную часть приложения
Весь код функций для WMI-команд
Весь код функций для CIM (MI)-команд
Конечно, первое, на что мы хотим обратить внимание, — это первоначальное WMI или CIM-соединение. В целом WMI использует DCOM в качестве протокола связи, тогда как CIM использует WSMan (или WinRM). Это можно изменить для CIM, что и делается в CIMplant, но пока остановимся на значениях по умолчанию. Для DCOM мы можем искать первоначальные TCP-соединения через порт 135. После этого соединяющаяся и принимающая системы договариваются о новом, очень высоком порте, который будет сильно различаться. Для WSMan первоначальное TCP-соединение происходит через порт 5985.
Далее следует обратить внимание на журнал событий Microsoft-Windows-WMI-Activity/Trace в Event Viewer. Ищите Event ID 11 и, если возможно, фильтруйте по свойству IsLocal. Также можно искать Event ID 1295 в журнале Microsoft-Windows-WinRM/Analytic.
Наконец, обратите внимание на любые изменения свойства DebugFilePath для класса Win32_OSRecoveryConfiguration. Более подробная информация об обнаружении представлена в Части 1 нашей серии статей в блоге: CIMplant Part 1: Detection of a C# Implementation of WMImplant