Invoke-TheHash
Invoke-TheHash содержит функции PowerShell для выполнения задач WMI и SMB с передачей хэша (pass the hash). Подключения WMI и SMB осуществляются через .NET TCPClient. Аутентификация выполняется путем передачи NTLM-хэша в протокол аутентификации NTLMv2. Привилегии локального администратора на стороне клиента не требуются.
Требования
Минимум PowerShell 2.0
Импорт
Import-Module ./Invoke-TheHash.psd1
или
. ./Invoke-WMIExec.ps1
. ./Invoke-SMBExec.ps1
. ./Invoke-SMBEnum.ps1
. ./Invoke-SMBClient.ps1
. ./Invoke-TheHash.ps1
Функции
- Invoke-WMIExec
- Invoke-SMBExec
- Invoke-SMBEnum
- Invoke-SMBClient
- Invoke-TheHash
Invoke-WMIExec
- Функция выполнения команд через WMI.
Параметры:
- Target - Имя хоста или IP-адрес цели.
- Username - Имя пользователя для аутентификации.
- Domain - Домен для аутентификации. Этот параметр не требуется для локальных учетных записей или при использовании @domain после имени пользователя.
- Hash - NTLM-хэш пароля для аутентификации. Эта функция принимает формат LM:NTLM или NTLM.
- Command - Команда для выполнения на цели. Если команда не указана, функция просто проверит, имеет ли имя пользователя и хэш доступ к WMI на цели.
- Sleep - По умолчанию = 10 миллисекунд: Задает значения Start-Sleep функции в миллисекундах.
Пример:
Invoke-WMIExec -Target 192.168.100.20 -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Command "command or launcher to execute" -verbose
Скриншот:

Invoke-SMBExec
- Функция выполнения команд через SMB (PsExec) с поддержкой SMB1, SMB2.1, с подписью SMB и без.
Параметры:
- Target - Имя хоста или IP-адрес цели.
- Username - Имя пользователя для аутентификации.
- Domain - Домен для аутентификации. Этот параметр не требуется для локальных учетных записей или при использовании @domain после имени пользователя.
- Hash - NTLM-хэш пароля для аутентификации. Эта функция принимает формат LM:NTLM или NTLM.
- Command - Команда для выполнения на цели. Если команда не указана, функция просто проверит, имеет ли имя пользователя и хэш доступ к SCM на цели.
- CommandCOMSPEC - По умолчанию = Включено: Добавляет %COMSPEC% /C к команде.
- Service - По умолчанию = 20 случайных символов: Имя службы для создания и удаления на цели.
- Sleep - По умолчанию = 150 миллисекунд: Задает значения Start-Sleep функции в миллисекундах.
- Version - По умолчанию = Auto: (Auto,1,2.1) Принудительно задает версию SMB. Поведение по умолчанию — выполнить согласование версии SMB и использовать SMB2.1, если он поддерживается целью.
Пример:
Invoke-SMBExec -Target 192.168.100.20 -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Command "command or launcher to execute" -verbose
Пример:
Проверка требований подписи SMB на цели.
Invoke-SMBExec -Target 192.168.100.20
Скриншот:

Invoke-SMBEnum
- Invoke-SMBEnum выполняет задачи перечисления пользователей, групп, сетевых сессий и общих ресурсов через SMB2.1 с подписью SMB и без.
Параметры:
- Target - Имя хоста или IP-адрес цели.
- Username - Имя пользователя для аутентификации.
- Domain - Домен для аутентификации. Этот параметр не требуется для локальных учетных записей или при использовании @domain после имени пользователя.
- Hash - NTLM-хэш пароля для аутентификации. Эта функция принимает формат LM:NTLM или NTLM.
- Action - (All,Group,NetSession,Share,User) По умолчанию = Share: Действие перечисления.
- Group - По умолчанию = Administrators: Группа для перечисления.
- Sleep - По умолчанию = 150 миллисекунд: Задает значения Start-Sleep функции в миллисекундах.
- Version - По умолчанию = Auto: (Auto,1,2.1) Принудительно задает версию SMB. Поведение по умолчанию — выполнить согласование версии SMB и использовать SMB2.1, если он поддерживается целью. Обратите внимание, что проверка подписи работает только с SMB1.
Пример:
Invoke-SMBEnum -Target 192.168.100.20 -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -verbose
Скриншот:

Invoke-SMBClient
- Функция SMB-клиента с поддержкой SMB2.1 и подписи SMB. Эта функция в основном предоставляет возможности SMB-файлового обмена для работы с хэшами, не имеющими привилегий удаленного выполнения команд. Эта функция также может использоваться для подготовки полезных нагрузок для Invoke-WMIExec и Invoke-SMBExec. Обратите внимание, что Invoke-SMBClient построен на .NET TCPClient и не использует клиент Windows SMB. Invoke-SMBClient работает значительно медленнее, чем клиент Windows.
Параметры:
- Username - Имя пользователя для аутентификации.
- Domain - Домен для аутентификации. Этот параметр не требуется для локальных учетных записей или при использовании @domain после имени пользователя.
- Hash - NTLM-хэш пароля для аутентификации. Эта функция принимает формат LM:NTLM или NTLM.
- Action - По умолчанию = List: (List/Recurse/Delete/Get/Put) Выполняемое действие.
-
- List: Выводит содержимое каталога.
-
- Recurse: Выводит содержимое каталога и всех подкаталогов.
-
-
-
- Put: Загружает файл и устанавливает время создания, доступа и последней записи, соответствующее исходному файлу.
- Source
-
- List и Recurse: UNC-путь к каталогу.
-
- Delete: UNC-путь к файлу.
-
-
- Put: Файл для загрузки. Если полный путь не указан, файл должен находиться в текущем каталоге. При использовании ключа 'Modify' параметр 'Source' должен быть массивом байтов.
- Destination
-
- List и Recurse: Не используется.
-
-
- Get: Если используется, значение будет новым именем загруженного файла. Если полный путь не указан, файл будет создан в текущем каталоге.
-
- Put: UNC-путь для загружаемого файла. Имя файла должно быть указано.
- Modify
-
- List и Recurse: Функция выводит объект, содержащий содержимое каталога.
-
-
- Get: Функция выводит массив байтов загруженного файла вместо записи на диск. Рекомендуется использовать только для небольших файлов и направлять вывод в переменную.
-
- Put: Загружает массив байтов в новый файл назначения.
- NoProgress - Отключает отображение индикатора выполнения загрузки и выгрузки.
- - По умолчанию = 100 миллисекунд: Задает значения Start-Sleep функции в миллисекундах.
Пример:
Вывод содержимого корневого каталога общего ресурса.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Source \\server\share -verbose
Пример:
Рекурсивный вывод содержимого общего ресурса, начиная с корня.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Recurse -Source \\server\share
Пример:
Рекурсивный вывод содержимого подкаталога общего ресурса с сохранением только содержимого в переменную.
$directory_contents = Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Recurse -Source \\server\share\subdirectory -Modify
Пример:
Удаление файла на общем ресурсе.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Delete -Source \\server\share\file.txt
Пример:
Удаление файла в подкаталогах общего ресурса.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Delete -Source \\server\share\subdirectory\subdirectory\file.txt
Пример:
Загрузка файла с общего ресурса.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Get -Source \\server\share\file.txt
Пример:
Загрузка файла из подкаталога общего ресурса с новым именем.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Get -Source \\server\share\subdirectory\file.txt -Destination file.txt
Пример:
Загрузка файла с общего ресурса в переменную-массив байтов вместо диска.
$password_file = Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Get -Source \\server\share\file.txt -Modify
Пример:
Выгрузка файла в подкаталог общего ресурса.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Put -Source file.exe -Destination \\server\share\subdirectory\file.exe
Пример:
Выгрузка файла на общий ресурс из переменной-массива байтов.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Put -Source $file_byte_array -Destination \\server\share\file.txt -Modify
Скриншот:

Invoke-TheHash
- Функция для запуска функций Invoke-TheHash против нескольких целей.
Параметры:
- Type - Задает нужную функцию Invoke-TheHash. Установите значение SMBClient, SMBEnum, SMBExec или WMIExec.
- Target - Список имен хостов, IP-адресов, записей в нотации CIDR или диапазонов IP для целей.
- TargetExclude - Список имен хостов, IP-адресов, записей в нотации CIDR или диапазонов IP, которые необходимо исключить из списка целей.
- PortCheckDisable - (Переключатель) Отключает проверку порта WMI или SMB. Поскольку эта функция еще не многопоточная, проверка порта служит для ускорения функции путем проверки открытого порта WMI или SMB перед попыткой полного синхронного подключения TCPClient.
- PortCheckTimeout - По умолчанию = 100: Задает тайм-аут ожидания ответа (в миллисекундах) для проверки порта WMI или SMB.
- Username - Имя пользователя для аутентификации.
- Domain - Домен для аутентификации. Этот параметр не требуется для локальных учетных записей или при использовании @domain после имени пользователя.
- Hash - NTLM-хэш пароля для аутентификации. Этот модуль принимает формат LM:NTLM или NTLM.
- Command - Команда для выполнения на цели. Если команда не указана, функция просто проверит, имеет ли имя пользователя и хэш доступ к WMI или SCM на цели.
- CommandCOMSPEC - По умолчанию = Включено: Только для типа SMBExec. Добавляет %COMSPEC% /C к команде.
- Service - По умолчанию = 20 случайных символов: Только для типа SMBExec. Имя службы для создания и удаления на цели.
- SMB1 - (Переключатель) Принудительно использует SMB1. Только для типа SMBExec. Поведение по умолчанию — выполнить согласование версии SMB и использовать SMB2, если он поддерживается целью.
- Sleep - По умолчанию = WMI 10 миллисекунд, SMB 150 миллисекунд: Задает значения Start-Sleep функции в миллисекундах.
Пример:
Invoke-TheHash -Type WMIExec -Target 192.168.100.0/24 -TargetExclude 192.168.100.50 -Username Administrator -Hash F6F38B793DB6A94BA04A52F1D3EE92F0
Скриншот:
