Windows pass the hash

HackWare.ru

Этичный хакинг и тестирование на проникновение, информационная безопасность

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

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

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

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

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

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

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

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

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

Но точно работает программа 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.

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

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

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

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

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

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

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

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

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

Читайте также:  Настройки электропитания windows server

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Invoke-TheHash

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

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

Заключение

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

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

Атака Pass-the-Hash и получение системного доступа в Windows

В этом руководстве мы научились использовать хэши для аутентификации в системе на базе Windows и реализовали атаку pass-the-hash.

Пароли в Windows хранятся в виде хэшей и иногда могут быть устойчивы к взлому. Однако в некоторых ситуациях мы можем обойтись без пароля в чистом виде и использовать только хэш. Особенно интересны случаи, когда доступен хэш административной учетной записи, поскольку затем можно получить более высокие привилегии, реализовав атаку под названием pass-the-hash.

Вначале мы будем извлекать хэш в системе Windows 7 и далее перейдем к серверу Windows Server 2016. Пользователь, чей хэш мы будем получать, должен иметь административные привилегии и быть авторизованным на обеих машинах. В качестве рабочей среды будет использоваться Kali Linux.

Для понимания техники pass-the-hash вначале следует разобраться, как устроен хэш. В Windows типичный хэш выглядит примерно так:

Строка выше состоит из четырех секций, разделенных двоеточиями. Первая часть – имя пользователя, вторая – относительный числовой идентификатор.

Третья часть представляет собой LM хэш, прекративший использоваться, начиная с Windows Vista/Server 2008. На данный момент вы навряд ли встретите где-либо подобный тип, если только в старых системах. В случае если вы столкнетесь с подобными ситуациями, считайте, что вам повезло, поскольку эти хэши легко взламываются.

Четвертая часть представляет собой NTLM хэш (иногда называемый NTHash). С обновленной версией, используемой в современных системах Windows и более устойчивой ко взломам, мы и будем работать во время реализации атаки pass-the-hash.

Наш сценарий основан на эксплуатации схемы хранения / передачи паролей и механизма аутентификации. Пароли не передаются по сети в открытом виде, а шифруются в момент создания.

Во время аутентификации пароль шифруется сразу же после ввода. Учитывая вышесказанное, можно заключить, что компьютер не видит разницы между паролем и хэшем, и мы можем во время аутентификации воспользоваться хэшем, вместо пароля в чистом виде.

Ситуация становится еще более интересной, когда мы знаем имя пользователя с административными правами и хэш.

Читайте также:  Проверить пробег фотоаппарата mac os

Шаг 1: Получение хэша в целевой системе

Вначале нужно скомпрометировать первую цель. При реализации этого сценария мы имеем дело с обычной рабочей станцией на базе Windows 7. Метод можно использовать любой, но мы предполагаем, что система уязвима к эксплоиту EternalBlue.

Эксплуатацию уязвимости будем выполнять при помощи Metasploit. Приступаем:

Запускаем модуль «eternalblue». Для более подробного ознакомления с этим модулем, рекомендуют ознакомиться с руководством по эксплуатации EternalBlue на Windows-сервере.

В Meterpreter есть полезная команда hashdump, позволяющая выгрузить любые LM или NTLM хэши в целевой системе:

По результатам выгрузки отмечаем, что у пользователя «admin2» скорее всего административные привилегии. Этот хэш мы будем использовать для подключения к другой машине.

Предположим, что другой компьютер также находится в сети, например, в роли сервера и, возможно, в качестве контроллера домена на базе Windows Server 2016. Если мы получим доступ к этой машине, то сможем получить контроль над всей сетью и любым компьютером домена.

Шаг 2: Реализация атаки Pass-the-Hash при помощи модуля PsExec

Полученный хэш привилегированного пользователя можно использовать для аутентификации на сервере Windows Server 2016 без знания пароля. Будем использовать модуль psexec (там же в Metasploit).

PsExec представляет собой утилиту, позволяющую работать из командной строки, для запуска программ и команд в удаленных системах. Этот инструмент полезен для администраторов, поскольку интегрирован с консольными приложениями и утилитами с целью удобного перенаправления входных и выходных данных. Однако здесь мы опять сталкиваемся с компромиссом между удобством и безопасность, поскольку PsExec может использоваться злоумышленниками для выполнения вредоносных команд или выступать в качестве бэкдора.

В Metasploit есть модифицированная версия PsExec, позволяющая легко подключаться к удаленным целям. Для поиска местонахождения этого модуля воспользуемся командой search:

Psexec зарекомендовал себя неоднократно. Загружаем этот модуль при помощи команды use.

Смотрим текущие настройки, используя команду options:

Вначале нужно установить IP-адрес цели (то есть сервера, к которому мы хотим подключиться):

Затем мы можем указать имя пользователя и пароль, используя полученный ранее хэш вместо обычного пароля.

Теперь указываем полезную нагрузку. Будем использоваться классический Reverse TCP из Meterpreter: Также указываем IP-адрес локальной машины и желаемый порт:

Остальные опции оставляем по умолчанию. Запускаем команду run:

У нас появилась meterpreter-сессия. Для подтверждения вводим команды getuid / sysinfo и получаем информацию о целевой системе.

Прекрасно. Без знания пароля нам удалось получить доступ к серверу. По сути, у нас полный контроль над системой.

В целом, довольно сложно защититься от подобного рода атак, поскольку мы используем стандартные механизмы аутентификации. Единственный надежный вариант – реализовать комплекс мероприятий для заблаговременного предотвращения неприятных последствий.

Также следование принципу минимальных привилегий сократит или даже исключит вероятный ущерб в случае, если злоумышленник получит хоть какой-то доступ к сети. Кроме того, нужно предпринимать и другие стандартные меры, как, например, фаервол и системы IDS/IPS для мониторинга и предотвращения любой вредоносной активности.

В Windows можно отключить кэширование учетных записей, чтобы злоумышленник не смог добраться до хэшей в памяти. Не лишним будет и изолировать важные системы в сети.

В этом руководстве мы научились использовать хэши для аутентификации в системе на базе Windows и реализовали атаку pass-the-hash. После компрометирования первоначальной цели, не очень высокого уровня, был получен список хэшей, среди которых оказалась учетная запись с административными правами. Далее при помощи Metasploit был получен системный доступ к серверу.

Оцените статью