Введение
В этой лабораторной работе вы изучите продвинутую функцию Hashcat: пользовательские наборы символов (custom charsets) в атаках по маске (mask attacks). Хотя встроенные наборы символов Hashcat (?l, ?u, ?d, ?s) мощны, они могут быть неэффективны, если у вас есть конкретная информация о символах, используемых в пароле. Например, если вы знаете, что пароль содержит только символы 'a', 'b', 'c', '1', '2', '3', использование стандартных наборов символов ?l и ?d приведет к проверке множества ненужных символов.
Пользовательские наборы символов позволяют определить точный набор символов, значительно сокращая пространство поиска и ускоряя процесс взлома. Вы научитесь определять пользовательский набор символов, создавать маску, которая его использует, и выполнять целенаправленную атаку для взлома хэша пароля, который соответствует уникальному шаблону.
Понимание ограничений встроенных наборов символов
На этом шаге вы узнаете о встроенных наборах символов Hashcat и почему они не всегда являются наиболее эффективным инструментом для данной задачи.
Hashcat использует заполнители, называемые наборами символов (charsets), для представления различных типов символов в атаке по маске:
?l= abcdefghijklmnopqrstuvwxyz?u= ABCDEFGHIJKLMNOPQRSTUVWXYZ?d= 0123456789?s= !"#$%&'()*+,-./:;<=>?@[]^_`{|}~?a= Все вышеперечисленное в комбинации
Это полезно для общих случаев, но если мы знаем, что пароль состоит из очень специфического, ограниченного набора символов, использование этих широких наборов символов неэффективно.
Сначала давайте проверим целевой хэш, который нам нужно взломать. Скрипт настройки уже создал файл с именем hash.txt в вашем текущем каталоге (~/project).
Просмотрите его содержимое:
cat hash.txt
Вы должны увидеть следующий хэш MD5:
2a5c3a657a73613391a8e58f1a43161e
Этот хэш соответствует 8-символьному паролю, состоящему только из символов l, a, b, e, x, 1, 2, 3. Если бы мы использовали встроенные наборы символов ?l и ?d, Hashcat потратил бы время на перебор всех 26 строчных букв и 10 цифр, вместо того чтобы использовать только 8 известных символов. На следующем шаге мы создадим пользовательский набор символов для решения этой проблемы.
Определение пользовательского набора символов с помощью --custom-charset1
На этом шаге вы определите пользовательский набор символов, который точно соответствует символам, известным в пароле.
Hashcat позволяет определять до четырех пользовательских наборов символов с помощью опций командной строки --custom-charset1, --custom-charset2, --custom-charset3 и --custom-charset4.
В нашем сценарии известно, что пароль содержит только символы из набора labex123. Мы можем определить это как наш первый пользовательский набор символов.
Давайте составим команду, чтобы увидеть, как это работает. Мы будем использовать опцию --stdout для вывода сгенерированных кандидатов паролей на экран вместо выполнения реальной атаки. Мы также используем head, чтобы увидеть только первые несколько результатов.
Выполните следующую команду для генерации 3-символьных паролей с использованием нашего пользовательского набора символов:
hashcat --stdout -a 3 --custom-charset1 labex123 ?1?1?1 | head -n 5
Разберем эту команду:
--stdout: Выводит сгенерированные кандидаты в консоль.-a 3: Указывает на атаку по маске.--custom-charset1 labex123: Определяет?1как наш пользовательский набор символов.?1?1?1: Маска, которая указывает Hashcat генерировать 3-символьных кандидатов, где каждый символ взят из набора, определенного в?1.
Вы увидите вывод, подобный этому, показывающий, что используются только указанные нами символы:
lll
lla
llb
lle
llx
Теперь вы понимаете, как определить пользовательский набор символов для целенаправленной атаки.
Создание маски, использующей пользовательский набор символов ?1
На этом шаге вы создадите маску, которая использует пользовательский набор символов, определенный на предыдущем шаге.
Пользовательские наборы символов ссылаются в маске с использованием заполнителей ?1, ?2, ?3 и ?4, соответствующих использованной опции --custom-charset<N>. Поскольку мы использовали --custom-charset1, мы будем использовать ?1 в нашей маске.
Мы знаем, что наш целевой пароль имеет длину 8 символов, и каждый символ взят из нашего пользовательского набора. Следовательно, правильная маска — это ?1, повторенная восемь раз.
Для ясности и повторного использования хорошей практикой является сохранение маски в файле. Давайте создадим файл с именем mask.txt и поместим нашу маску в него.
Выполните следующую команду для создания файла:
echo "?1?1?1?1?1?1?1?1" > mask.txt
Теперь проверьте содержимое файла, чтобы убедиться, что оно правильное:
cat mask.txt
Вывод должен быть точно таким же, как вы ввели:
?1?1?1?1?1?1?1?1
Теперь, когда файл маски готов, вы готовы начать атаку.
Выполнение атаки по маске с использованием пользовательского набора символов
Теперь вы объедините все компоненты для запуска атаки по маске с использованием вашего пользовательского набора символов и файла маски.
У вас есть хеш в hash.txt, определен пользовательский набор символов, а маска находится в mask.txt. Соберем финальную команду Hashcat.
Выполните следующую команду в терминале, чтобы начать атаку:
hashcat -m 0 -a 3 hash.txt --custom-charset1 labex123 mask.txt
Вот разбивка полной команды:
-m 0: Указывает, что тип хеша — MD5.-a 3: Выбирает режим атаки по маске.hash.txt: Входной файл, содержащий наш целевой хеш.--custom-charset1 labex123: Определяет наш пользовательский набор символов?1.mask.txt: Файл, содержащий маску?1?1?1?1?1?1?1?1.
Hashcat начнет атаку. Поскольку наш пользовательский набор символов очень специфичен, пространство ключей невелико, и атака должна завершиться очень быстро. Вы увидите вывод, указывающий на прогресс, и, наконец, статус Cracked.
...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: 2a5c3a657a73613391a8e58f1a43161e
Time.Started.....: ...
Time.Estimated...: 0 secs (0.00ms)
Guess.Mask.......: ?1?1?1?1?1?1?1?1 [8]
Guess.Charset....: Custom Charset 1: 'labex123', len=8
Speed.#1.........: ... H/s (0.00ms) @ Accel:1 Loops:1 Thr:1 Vec:1
Recovered........: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts
Progress.........: 16777216/16777216 (100.00%)
Rejected.........: 0/16777216 (0.00%)
Restore.Point....: 1/1 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: labex123 -> labex123
Hardware.Mon.#1..: Util: 0%
Started: ...
Stopped: ...
Атака завершена успешно. На следующем шаге вы проверите взломанный пароль.
Проверка соответствия взломанного пароля пользовательскому шаблону
На этом заключительном шаге вы просмотрите взломанный пароль и убедитесь, что он соответствует ожидаемому шаблону.
Hashcat автоматически сохраняет успешно взломанные пароли в файл, называемый "potfile" (потому что он "ставит" хеш и пароль). Это предотвращает повторное взламывание того же хеша в будущем. Самый простой способ увидеть взломанный пароль для данного файла хешей — использовать опцию --show.
Выполните следующую команду, чтобы отобразить взломанный пароль для хеша в hash.txt:
hashcat -m 0 --show hash.txt
Эта команда указывает Hashcat найти хеш из hash.txt в своем potfile и отобразить соответствующий пароль в открытом виде.
Вывод будет четким и простым:
2a5c3a657a73613391a8e58f1a43161e:labex123
Как вы можете видеть, взломанный пароль — labex123. Обратите внимание, что он имеет длину 8 символов и содержит только символы из пользовательского набора символов labex123, который вы определили. Это подтверждает, что ваша целевая атака по маске была успешной и очень эффективной.
Резюме
В этой лабораторной работе вы изучили мощный и эффективный метод взлома паролей с использованием Hashcat.
Вы начали с понимания ограничений встроенных наборов символов Hashcat для паролей с определенными, известными наборами символов. Затем вы узнали, как определить собственный набор символов с помощью опции --custom-charset1 и ссылаться на него в маске с помощью ?1. Создав файл маски и запустив целевую атаку, вы смогли взломать MD5-хеш за секунды.
Этот метод использования пользовательских наборов символов является ключевым для эффективного аудита и восстановления паролей, когда у вас есть информация о структуре пароля, что значительно сокращает время и вычислительные ресурсы, необходимые для атаки.


