Атака Hashcat Полным Перебором с Использованием Масок

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

Введение

Hashcat — всемирно известный инструмент для восстановления паролей, способный с невероятной скоростью взламывать самые разнообразные хеши. Хотя словарные атаки (dictionary attacks) широко распространены, они эффективны только в том случае, если пароль присутствует в заданном списке слов (wordlist). Чистая атака полным перебором (brute-force attack), которая перебирает все возможные комбинации символов, часто оказывается слишком медленной для практического применения.

Здесь на помощь приходит атака по маске (mask attack). Атака по маске — это высокоэффективная форма атаки полным перебором, используемая, когда у вас есть некоторая информация о структуре пароля. Например, вы можете знать длину пароля или то, что он начинается с заглавной буквы и заканчивается цифрой.

В этой лабораторной работе вы изучите основы выполнения атаки по маске с помощью Hashcat. Вы начнете с понимания самой концепции, научитесь использовать наборы символов (character sets) для построения масок и примените эти знания для взлома хешей паролей с известными шаблонами.

Понимание концепции атаки по маске (-a 3)

На этом этапе вы изучите основную концепцию атаки по маске в Hashcat. Режим атаки по маске задается с помощью опции -a 3. Этот режим предписывает Hashcat генерировать кандидатов в пароли на основе определяемого вами шаблона, или "маски".

Это отличается от словарной атаки (-a 0), которая использует готовый список слов. Атака по маске создает своих кандидатов "на лету".

Давайте посмотрим, как маска генерирует кандидатов. Мы можем использовать опцию --stdout, чтобы выводить сгенерированные пароли на экран вместо попытки взлома хеша. В качестве простого заполнителя для цифры (0-9) мы будем использовать ?d.

Выполните следующую команду для генерации всех возможных трехзначных чисел:

hashcat -a 3 ?d?d?d --stdout

Hashcat сгенерирует все возможные трехзначные комбинации. Обратите внимание, что порядок вывода может показаться случайным из-за алгоритмов оптимизации Hashcat, но он сгенерирует все комбинации от 000 до 999.

...
476
576
876
976
...

Это демонстрирует основную идею: маска ?d?d?d действует как шаблон, и Hashcat систематически заполняет его всеми возможными комбинациями из указанного набора символов.

Изучение встроенных наборов символов (?l, ?u, ?d, ?s)

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

Hashcat предоставляет несколько удобных встроенных наборов символов:

Заполнитель Набор символов Описание
?l abcdefghijklmnopqrstuvwxyz Все строчные буквы
?u ABCDEFGHIJKLMNOPQRSTUVWXYZ Все заглавные буквы
?d 0123456789 Все цифры
?s !"#$%&'()*+,-./:;<=>?@[\]^_~ Все специальные символы (символы)
?a ?l?u?d?s Все возможные символы

Вы можете комбинировать эти заполнители для создания сложных масок. Длина маски напрямую определяет длину генерируемых парольных кандидатов.

Попробуем сгенерировать кандидатов для пароля, состоящего из одной заглавной буквы, за которой следует одна цифра. Маска для этого будет ?u?d.

Снова используйте опцию --stdout, чтобы увидеть вывод:

hashcat -a 3 ?u?d --stdout

Hashcat сгенерирует все комбинации из одной заглавной буквы, за которой следует одна цифра. Обратите внимание, что порядок вывода может показаться случайным из-за алгоритмов оптимизации Hashcat, но он сгенерирует все комбинации от A0 до Z9.

...
B4
C7
D2
...

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

Запуск атаки по маске для 3-значного PIN-кода (хеш NTLM)

На этом шаге вы примените свои знания на реальном примере: взломе 3-значного PIN-кода. У нас есть файл с именем pin_hash.txt, который содержит хеш пароля в формате NTLM. Мы предполагаем, что исходный пароль — это трехзначное число.

Сначала посмотрим содержимое файла с хешем:

cat pin_hash.txt

Вы увидите хеш NTLM:

D2063C28444B9B742B9B89C282395EBF

Чтобы взломать его, нам нужно сообщить Hashcat три вещи:

  1. Режим атаки — атака по маске (-a 3).
  2. Тип хеша — NTLM (-m 1000).
  3. Маска для 3-значного PIN-кода — ?d?d?d.

Теперь объединим это в одну команду для начала атаки:

hashcat -a 3 -m 1000 pin_hash.txt ?d?d?d

Hashcat начнет работу, и поскольку пространство ключей (от 000 до 999) очень мало, он найдет пароль почти мгновенно.

...
D2063C28444B9B742B9B89C282395EBF:137
...
Status...........: Cracked
...

Hashcat успешно восстановил пароль: 137. Как только пароль взломан, Hashcat сохраняет его в файл, называемый "potfile". Вы можете просмотреть все взломанные пароли для этого типа хеша с помощью опции --show:

hashcat -m 1000 pin_hash.txt --show

Вывод:

D2063C28444B9B742B9B89C282395EBF:137

Создание пользовательской маски для известного шаблона пароля

На этом шаге вы столкнетесь с более сложным паролем. Представьте, что в компании действует политика паролей: "Пароли должны состоять ровно из 5 строчных букв". Пример такого пароля: labex.

У нас есть NTLM-хеш такого пароля в файле pattern_hash.txt.

Сначала переведем политику паролей в маску Hashcat:

  • Все 5 символов должны быть строчными буквами: ?l?l?l?l?l

Это дает нам итоговую маску: ?l?l?l?l?l.

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

hashcat -a 3 -m 1000 pattern_hash.txt ?l?l?l?l?l

Hashcat начнет проверять все комбинации, соответствующие этому конкретному шаблону. Это намного эффективнее, чем чистая атака полным перебором (brute-force), пробующая все 5-символьные комбинации. Через короткое время он найдет пароль.

...
2BF7D33EC706798E0308F5DF34BC7D2F:labex
...
Status...........: Cracked
...

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

Сравнение производительности атак по маске и словарных атак

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

Словарная атака (-a 0) очень быстра, если пароль присутствует в словаре (wordlist). У нас есть небольшой файл словаря с именем dict.txt, который содержит пароль из предыдущего шага.

Запустим словарную атаку против pattern_hash.txt:

hashcat -a 0 -m 1000 pattern_hash.txt dict.txt

Поскольку labex находится в dict.txt, Hashcat находит его почти мгновенно.

hashcat (v6.2.5) starting

OpenCL API (OpenCL 2.0 pocl 1.8  Linux, None+Asserts, RELOC, LLVM 11.1.0, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
=====================================================================================================================================
* Device #1: pthread-Intel(R) Xeon(R) Platinum 8575C, 6808/13680 MB (2048 MB allocatable), 4MCU

Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256

INFO: All hashes found in potfile! Use --show to display them.

Started: Sat Oct 11 16:05:20 2025
Stopped: Sat Oct 11 16:05:20 2025

Hashcat сообщает нам, что хеш уже был найден и сохранен в файле potfile. Чтобы увидеть взломанный пароль, мы можем использовать опцию --show:

hashcat -a 0 -m 1000 pattern_hash.txt dict.txt --show

Вывод:

2bf7d33ec706798e0308f5df34bc7d2f:labex

Итак, когда атака по маске имеет преимущество? Словарная атака успешна только в том случае, если точный пароль присутствует в словаре. Если бы пароль был testx, и его не было бы в нашем словаре, атака бы провалилась.

Однако атака по маске из Шага 4 (?l?l?l?l?l) все равно увенчалась бы успехом, поскольку она систематически генерирует и проверяет все пароли, соответствующие шаблону, независимо от того, находятся ли они в словаре. Она проверила бы labex, testx, hello и так далее.

Заключение:

  • Словарная атака (-a 0): Лучше всего подходит для взлома распространенных паролей или когда у вас есть высококачественный, целевой список слов. Она быстра, но ограничена содержимым словаря.
  • Атака по маске (-a 3): Лучше всего подходит, когда вы знаете структуру или шаблон пароля (например, из известной политики паролей). Она намного более исчерпывающая, чем словарная атака, и бесконечно более эффективна, чем чистая атака полным перебором (brute-force attack).

Резюме

В этой лабораторной работе вы получили практический опыт работы с одной из самых мощных функций Hashcat: атакой по маске.

Вы узнали:

  • Основную концепцию атаки по маске (-a 3) и то, как она генерирует пароли-кандидаты на основе шаблона.
  • Как использовать встроенные наборы символов Hashcat (?l, ?u, ?d, ?s) для построения масок.
  • Как применить простую маску для взлома 3-значного PIN-кода.
  • Как создать пользовательскую маску на основе известной политики паролей (5 строчных букв) для взлома пароля с определенным шаблоном.
  • Ключевые различия и стратегические преимущества использования атаки по маске по сравнению со стандартной словарной атакой.

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