Извлечение и взлом хешей из файла Linux Shadow

Kali LinuxBeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы изучите фундаментальный процесс аудита безопасности паролей в Linux. Вы узнаете, как Linux хранит информацию о паролях пользователей, извлечете эту информацию, а затем попытаетесь взломать пароли с помощью словарной атаки. Этот процесс необходим пентестерам и системным администраторам для выявления и устранения слабых паролей в системе.

Вы будете работать с двумя критически важными файлами: /etc/passwd, который хранит информацию об учетных записях пользователей, и /etc/shadow, который безопасно хранит хешированные пароли. Для выполнения процесса взлома вы будете использовать стандартные инструменты командной строки Linux и специализированное программное обеспечение, такое как unshadow (из набора John the Ripper) и Hashcat.

К концу этой лабораторной работы вы получите практический опыт в следующих областях:

  • Понимание формата файла /etc/shadow.
  • Объединение данных пользователя и пароля в формат, пригодный для взлома.
  • Определение типов хешей паролей.
  • Использование Hashcat для выполнения словарной атаки.

Понимание формата файла /etc/shadow

На этом этапе вы изучите файл /etc/shadow. Этот файл содержит фактические хеши паролей пользователей в системе Linux и по соображениям безопасности доступен для чтения только пользователю root. Понимание его структуры — первый шаг к извлечению хешей.

Сначала используйте sudo для получения необходимых привилегий для просмотра содержимого файла /etc/shadow.

sudo cat /etc/shadow

Вы увидите вывод, содержащий несколько строк, каждая из которых соответствует учетной записи пользователя. Давайте посмотрим на запись для созданного нами пользователя testuser. Она будет выглядеть примерно так (соль и хеш будут отличаться):

root:*:19327:0:99999:7:::
daemon:*:19327:0:99999:7:::
...
testuser:$6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn2KkL.D.v5/T6.zT.jC.gB6aB4bY3eZ2aX9cW8dY7eF6gH5iJ4kL3oP2qR1:19422:0:99999:7:::

Каждая строка представляет собой набор полей, разделенных двоеточиями. Для этой лабораторной работы нас интересуют первые два:

  1. Имя пользователя: testuser
  2. Хешированный пароль: $6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn2KkL.D.v5/T6.zT.jC.gB6aB4bY3eZ2aX9cW8dY7eF6gH5iJ4kL3oP2qR1

Знаки доллара ($) в поле хеша имеют значение. Число между первыми двумя символами $ указывает на алгоритм хеширования. В данном случае $6$ означает, что пароль был хеширован с использованием алгоритма sha512crypt.

Использование утилиты unshadow для объединения файлов passwd и shadow

На этом этапе вы будете использовать утилиту unshadow для создания единого файла, подходящего для инструментов взлома паролей, таких как Hashcat. Инструментам взлома требуется как имя пользователя из /etc/passwd, так и хеш из /etc/shadow в определенном формате. Утилита unshadow, входящая в набор John the Ripper, автоматизирует этот процесс объединения.

Теперь вы запустите unshadow, передав /etc/passwd и /etc/shadow в качестве входных данных, и перенаправите вывод в новый файл с именем hashes.txt в вашем каталоге ~/project.

Выполните следующую команду в терминале:

sudo unshadow /etc/passwd /etc/shadow > ~/project/hashes.txt

Эта команда считывает оба системных файла, объединяет соответствующую информацию и сохраняет ее в ~/project/hashes.txt.

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

cat ~/project/hashes.txt

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

testuser:$6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn2KkL.D.v5/T6.zT.jC.gB6aB4bY3eZ2aX9cW8dY7eF6gH5iJ4kL3oP2qR1:1001:1001::/home/testuser:/bin/bash

Этот файл теперь готов к использованию с Hashcat.

Определение типа хеша (например, sha512crypt)

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

Как мы наблюдали на Шаге 1, формат самой строки хеша раскрывает алгоритм. Давайте снова рассмотрим файл hashes.txt.

cat ~/project/hashes.txt

Сосредоточьтесь на строке хеша для testuser:

testuser:$6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn2KkL.D.v5/T6.zT.jC.gB6aB4bY3eZ2aX9cW8dY7eF6gH5iJ4kL3oP2qR1:...

Хеш начинается с $6$. Это стандартный идентификатор для определенного типа хеша. Вот краткий справочник по распространенным идентификаторам хешей Linux:

  • $1$ = md5crypt (MD5)
  • $2a$ или $2y$ = bcrypt (Blowfish)
  • $5$ = sha256crypt (SHA-256)
  • $6$ = sha512crypt (SHA-512)

На основании префикса $6$ мы можем уверенно определить тип хеша как sha512crypt. Эта информация нам понадобится для следующего шага.

Выбор соответствующего режима Hashcat

На этом этапе вы найдете правильный номер режима, который Hashcat использует для идентификации алгоритма sha512crypt. Hashcat поддерживает сотни различных типов хешей, и каждому присвоен уникальный номер режима.

Чтобы найти режим для sha512crypt, вы можете просмотреть справочную информацию Hashcat с помощью grep. Это эффективный способ найти нужный режим, не читая все меню справки.

Выполните следующую команду для поиска sha512crypt:

hashcat --help | grep -i sha512crypt

Флаг -i в grep делает поиск нечувствительным к регистру, что является хорошей практикой. Вывод покажет вам соответствующую строку из меню справки:

...
1800 | sha512crypt, SHA512(Unix)                  | Operating System
...

Из этого вывода видно, что номер режима для sha512crypt1800. Вы будете использовать этот номер режима на последнем шаге, чтобы указать Hashcat, как интерпретировать хеши в вашем файле hashes.txt.

Запуск словарной атаки на Linux-хеши

На этом заключительном этапе вы запустите словарную атаку на захваченные хеши с помощью Hashcat. Словарная атака работает путем взятия списка потенциальных паролей ("словарь" или "wordlist"), хеширования каждого из них с использованием того же алгоритма, что и целевой хеш, и сравнения результатов. Если найдено совпадение, пароль взломан.

Вы будете использовать wordlist rockyou.txt, который был загружен в ваш каталог ~/project во время настройки лаборатории. Это очень распространенный wordlist, используемый для аудита паролей.

Теперь составьте полную команду Hashcat со всей собранной информацией:

  • Режим (-m): 1800 для sha512crypt.
  • Файл хешей: ~/project/hashes.txt.
  • Словарный список: ~/project/rockyou.txt.
  • Опция (--force): Добавлена для предотвращения возможных ошибок при запуске Hashcat в виртуализированной среде или с определенными драйверами.

Выполните команду, чтобы начать атаку:

hashcat -m 1800 --force ~/project/hashes.txt ~/project/rockyou.txt

Hashcat инициализируется и начнет сеанс взлома. Поскольку пароль password123 находится в списке rockyou.txt, процесс должен быть очень быстрым.

...
Session..........: hashcat
Status...........: Running
Hash.Name........: sha512crypt, SHA512(Unix)
Hash.Target......: testuser:$6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn...
...
Approaching final keyspace - workload adjusted.

Session..........: hashcat
Status...........: Cracked
...

Как только Hashcat покажет статус Cracked (Взломано) или Exhausted (Исчерпано), атака будет завершена. Чтобы просмотреть взломанный пароль, вы можете использовать опцию --show с той же командой.

hashcat -m 1800 --force ~/project/hashes.txt --show

Вывод четко отобразит взломанный хеш вместе с соответствующим ему паролем в открытом виде.

testuser:$6$somerandomsalt$gqE2qSg5aV1A3fH/vjXJ.nLdCn2KkL.D.v5/T6.zT.jC.gB6aB4bY3eZ2aX9cW8dY7eF6gH5iJ4kL3oP2qR1:password123

Вы успешно взломали пароль для testuser!

Итоги

Поздравляем с завершением этой лаборатории! Вы успешно выполнили классический рабочий процесс аудита паролей в системе Linux.

В этой лаборатории вы научились:

  • Читать и понимать структуру файла /etc/shadow, который хранит хеши паролей пользователей.
  • Использовать утилиту unshadow для объединения данных пользователей и хешей из /etc/passwd и /etc/shadow в один файл.
  • Определять алгоритм хеширования паролей (sha512crypt), изучая формат хеша.
  • Находить соответствующий режим (1800) в Hashcat для определенного типа хеша.
  • Запускать словарную атаку с использованием Hashcat, мощного wordlist и извлеченных хешей.
  • Просматривать успешно взломанный пароль.

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