
На CTF в категории crypto попадается файл с десятком хешей без указания алгоритма. Половина участников запускает hashcat -m 0 наугад — и через час удивляется, что «ничего не ломается». Проблема не в инструменте. Проблема в двух шагах, которые пропустили. Определение типа хеша и выбор режима атаки — без этих решений hashcat взлом хешей превращается в лотерею. Разберём весь путь: от строки непонятных символов до момента, когда hashcat выводит пароль открытым текстом.
Hashcat — инструмент одного конкретного этапа. Он не сканирует порты, не эксплуатирует уязвимости и не перемещается по сети. Его задача — превратить хеш обратно в пароль. Чтобы понять, когда он включается в работу, разложим типичную цепочку.
Сначала атакующий получает доступ к хешам. В терминах MITRE ATT&CK это дамп /etc/shadow (T1003.008, Credential Access), извлечение хешей из базы скомпрометированного веб-приложения или перехват WPA-хендшейка через сниффинг (T1040). На CTF хеши обычно даются в условии задачи — готовый файл, бери и разбирай.
Дальше — этап Password Cracking (T1110.002, Credential Access). Тут работает hashcat. Цель: из хеша восстановить исходный пароль. Результат открывает следующие двери — использование валидных учётных данных (T1078, Valid Accounts) для авторизации, бокового перемещения или повышения привилегий. На CTF восстановленный пароль обычно и есть флаг, либо ключ к следующему этапу.
Без понимания цепочки hashcat воспринимается как «волшебная кнопка». С пониманием — точечный инструмент для конкретного звена: дамп хешей → восстановление паролей → использование учёток.
Hashcat — проект с открытым исходным кодом (лицензия MIT), активно поддерживается. Репозиторий на GitHub обновляется регулярно, стабильные релизы доступны на hashcat.net. Поддерживает более 300 типов хешей — от MD5 и SHA-1 до bcrypt, scrypt, PBKDF2 и WPA/WPA2.
Прежде чем запускать первую команду — убедитесь, что окружение готово. Hashcat работает на Linux, Windows и macOS, но производительность принципиально зависит от видеокарты.
Минимум для старта: - ОС: Kali Linux 2023+, Ubuntu 22.04+, Windows 10/11 (64-bit) - RAM: 4 ГБ (хватит для словарных атак с rockyou.txt) - GPU: любая дискретная NVIDIA (CUDA) или AMD (OpenCL). На встроенной графике Intel hashcat запустится, но скорость будет на порядки ниже - VRAM: 2 ГБ минимум, 4+ ГБ рекомендуется для масочных атак с большим пространством
Если GPU нет (виртуалка, ноутбук без дискретки) — hashcat может работать на CPU при наличии OpenCL CPU runtime (например, pocl-opencl-icd). Флаг -D 1 ограничивает работу только CPU-устройствами. Для учебных задач на CTF с простыми хешами этого хватит, но скорость будет в десятки и сотни раз ниже. Типичная CPU-скорость для WPA2 — около 19 000 H/s, тогда как приличная GPU выдаёт сотни тысяч.
Установка на Kali/Ubuntu: sudo apt update && sudo apt install hashcat. Для последней версии — скачивайте архив с hashcat.net и распаковывайте вручную. После установки проверьте доступные устройства командой hashcat -I — она покажет, видит ли hashcat вашу видеокарту.
Вот строка из CTF-задания: 5f4dcc3b5aa765d61d8327deb882cf99. Что это? MD5? MD4? NTLM? Без правильного ответа hashcat бесполезен — флаг -m задаёт алгоритм, и если указать не тот, инструмент будет сравнивать хеш с кандидатами по неправильной формуле.
Ручной способ — посмотреть на длину и формат. Чистый MD5 — 32 символа в hex (0-9, a-f). SHA-1 — 40 символов. SHA-256 — 64 символа. bcrypt начинается с $2a$, $2b$ или $2y$ и содержит cost factor: $2y$10$.... Хеши из /etc/shadow на Linux часто начинаются с $6$ (SHA-512) или $5$ (SHA-256). NTLM — 32 символа hex, но без соли и без префикса.
И вот тут засада: MD5 и NTLM визуально идентичны (оба 32 hex-символа). Помогает контекст: если хеш извлечён из Windows SAM — это NTLM (-m 1000). Если из веб-приложения — скорее всего MD5 (-m 0).
Для автоматизации есть hash-identifier и hashid. Первый предустановлен в Kali Linux: запускаете hash-identifier, вставляете хеш, получаете список вероятных алгоритмов. Второй удобнее тем, что показывает сразу hashcat-mode:
$ hashid -m '$2y$10$EixZaYVK1fsbw1ZfbX3OXePaWxn96p36WQoeG6Lruj3vjPGga31lW'
Analyzing '$2y$10$EixZaYVK1fsbw1ZfbX3OXePaWxn96p36WQoeG6Lruj3vjPGga31lW'
[+] Blowfish(OpenBSD) [Hashcat Mode: 3200]
[+] Woltlab Burning Board 4.x
[+] bcrypt [Hashcat Mode: 3200]
Результат: bcrypt, hashcat mode 3200. Один вызов — и знаешь, какой флаг -m ставить.
Ещё есть haiti — менее распространён, но полезен как перекрёстная проверка. Если hash-identifier и hashid дают разные предположения — обращайтесь к официальной wiki hashcat (hashcat.net/wiki), где для каждого mode приведены примеры хешей. Пароль для всех тестовых хешей — hashcat, что удобно: хешируете слово «hashcat» нужным алгоритмом и сравниваете с примером из wiki.
Определили тип хеша — теперь нужно решить, как атаковать. Флаг -a задаёт режим атаки. Неправильный выбор — часы впустую.
Режим 0 — словарная атака. Hashcat берёт каждое слово из файла-словаря, хеширует и сравнивает с целевым хешем. Самый частый стартовый выбор на CTF. Для быстрых алгоритмов (MD5, SHA-1, NTLM) работает мгновенно, и если пароль — обычное слово или популярная комбинация, этого достаточно.
Режим 1 — комбинаторная атака. Берёт два словаря и склеивает каждое слово из первого с каждым из второго. Полезна, когда пароли состоят из двух слов: «bluetiger», «adminpassword». На CTF встречается реже.
Режим 3 — маска (brute-force). Перебирает все комбинации по заданному шаблону. Маркеры: ?l — строчная буква, ?u — заглавная, ?d — цифра, ?s — спецсимвол, ?a — любой печатный ASCII. Команда hashcat -a 3 -m 0 hash.txt ?u?l?l?l?d?d?d?d будет перебирать пароли вида «Abcd1234» — одна заглавная, три строчные, четыре цифры.
Режимы 6 и 7 — гибридные атаки. Режим 6 добавляет маску после каждого слова из словаря: hashcat -a 6 -m 0 hash.txt rockyou.txt ?d?d?d?d — проверяет варианты «password2023», «letmein1234». Режим 7 добавляет маску перед словом. Гибридная атака хорошо работает в корпоративных средах, где сотрудники приписывают год или цифры к базовому паролю.
| Ситуация | Режим | Флаг | Пример |
|---|---|---|---|
| Не знаете ничего о пароле | Словарная | -a 0 |
hashcat -a 0 -m 0 hash.txt rockyou.txt |
| Пароль — комбинация двух слов | Комбинаторная | -a 1 |
hashcat -a 1 -m 0 hash.txt list1.txt list2.txt |
| Известна структура пароля | Маска | -a 3 |
hashcat -a 3 -m 0 hash.txt ?u?l?l?l?d?d |
| Слово + цифры/символы на конце | Гибридная | -a 6 |
hashcat -a 6 -m 0 hash.txt dict.txt ?d?d?d |
| Цифры/символы + слово | Гибридная | -a 7 |
hashcat -a 7 -m 0 hash.txt ?d?d?d dict.txt |
Решение по умолчанию для CTF: начинайте с режима 0 (словарная) + rockyou.txt. Не сработало — добавьте правила (об этом ниже). И только если это не помогло — переходите к маске, но лишь когда можете предположить структуру пароля.
| Аспект | Преимущества | Ограничения | Когда использовать | Когда НЕ использовать |
|---|---|---|---|---|
| GPU-ускорение | Миллиарды H/s для MD5/NTLM | Нужна дискретная видеокарта с CUDA/OpenCL | Большие дампы, быстрые алгоритмы | В VM без GPU passthrough |
| 300+ алгоритмов | Покрывает все реальные форматы | Некоторые (bcrypt, Argon2) медленные даже на GPU | Любой формат из CTF или пентеста | Кастомные алгоритмы без модуля |
| Правила мутации | Генерация вариантов без хранения на диске | Нужно понимать синтаксис правил | Когда словарь не достаёт | Когда пароль полностью случайный |
| vs John the Ripper | Быстрее на GPU, более детальный контроль | JtR лучше для auto-detect формата и CPU-only | GPU доступен, тип хеша известен | Только CPU, нужен auto-detect |
На CTF дан хеш 5f4dcc3b5aa765d61d8327deb882cf99. Hashid определил его как MD5 (mode 0). Запускаем словарную атаку с rockyou.txt:
hashcat -a 0 -m 0 hash.txt /usr/share/wordlists/rockyou.txt
Разбор: -a 0 — словарная атака, -m 0 — алгоритм MD5, hash.txt — файл с хешем, последний аргумент — путь к словарю. На GPU с CUDA hashcat прогонит rockyou.txt (около 14 миллионов строк) за секунды — MD5 один из самых быстрых алгоритмов.
Если пароль найден, hashcat выведет результат в формате хеш:пароль. В нашем случае: 5f4dcc3b5aa765d61d8327deb882cf99:password. Результат сохранится в potfile — ~/.local/share/hashcat/hashcat.potfile (в hashcat 6.x на Linux; в старых версиях — ~/.hashcat/hashcat.potfile). Чтобы посмотреть ранее взломанные хеши: hashcat -m 0 hash.txt --show.
Rockyou.txt не помог? Подключаем правила: hashcat -a 0 -m 0 hash.txt rockyou.txt -r rules/best64.rule. Правило best64.rule — набор из 64 трансформаций, который превращает каждое слово словаря в десятки вариантов: «password» становится «Password», «password1», «drowssap», «PASSWORD123» и так далее. Словарь из 14 миллионов строк фактически превращается в почти миллиард кандидатов.
SHA-256 — mode 1400. Хеш длиной 64 hex-символа. Команда аналогична: hashcat -a 0 -m 1400 sha256_hash.txt rockyou.txt. Скорость будет ниже, чем для MD5 — SHA-256 вычислительно тяжелее. Но на современной видеокарте разница не критична для словарных атак: если пароль есть в rockyou.txt, hashcat найдёт его за секунды-минуты.
Для SHA-256 правила особенно полезны. На CTF часто встречаются пароли, которые «почти в словаре» — обычное слово с добавленной цифрой или заменой символа. Правило c $1 $2 $3 из кастомного файла превратит «admin» в «Admin123». Правило $! $1 — в «admin!1». Именно такие мутации покрывают реальное поведение пользователей при создании паролей.
Подозреваете, что пароль — слово с годом рождения на конце? Гибридная атака сработает лучше чистого словаря: hashcat -a 6 -m 1400 hash.txt rockyou.txt ?d?d?d?d проверит все комбинации «слово + 4 цифры».
bcrypt — принципиально другая история. Mode 3200. Алгоритм специально спроектирован, чтобы быть медленным: параметр cost factor (число после $2y$) задаёт количество раундов хеширования. При cost factor 10 (значение по умолчанию) один хеш считается в тысячи раз дольше, чем MD5. bcrypt к тому же не получает полного GPU-ускорения, поэтому разрыв в скорости между hashcat и CPU-инструментами вроде John the Ripper тут минимален.
На практике: если MD5-хеш из rockyou.txt ломается за секунды, тот же пароль в bcrypt будет ломаться минуты или часы. Маска ?a?a?a?a?a?a?a?a (все печатные символы, 8 позиций) для MD5 — вопрос нескольких дней на одной GPU. Для bcrypt — годы. Поэтому для bcrypt:
-w 3 (высокая нагрузка на GPU) даёт прирост, но мониторьте температуру через nvidia-smiНа CTF-задачах с bcrypt авторы обычно делают пароль достаточно простым, чтобы словарь сработал. Если rockyou.txt не помог — попробуйте меньшие целевые словари: топ-1000 паролей, имена и даты.
Качество словаря часто важнее скорости перебора. Rockyou.txt — стандарт, извлечённый из утечки соцсети RockYou в 2009 году: около 14 миллионов реальных паролей. На Kali Linux он лежит в /usr/share/wordlists/rockyou.txt.gz — перед первым использованием распакуйте: gunzip /usr/share/wordlists/rockyou.txt.gz.
Но rockyou.txt — стартовая точка, не финальная. Дальше — интереснее.
Крупные коллекции. Словари на десятки и сотни миллионов строк, скомпилированные из реальных утечек. По данным Have I Been Pwned, только утечка START (2021) содержала 7,4 миллиона записей с паролями, Appen — 5,8 миллиона. Такие массивы формируют базу для расширенных словарей.
Целевые словари. Для конкретной цели — компании, региона, темы — генерируйте кастомный список. CeWL собирает слова с указанного веб-сайта; crunch генерирует комбинации по заданным параметрам. На CTF часто работает простой принцип: прочитайте описание задачи, соберите ключевые слова, проверьте их первыми. Я несколько раз ловил флаг именно так — пароль был зашит в тексте задания, просто с заглавной буквы и цифрой на конце.
Правила как мультипликатор. Вместо гигантского словаря — компактный словарь плюс набор правил. Hashcat поставляется с несколькими rule-файлами в директории rules/:
best64.rule — 64 универсальных правила, хороший баланс
toggles1.rule — переключение регистра на каждой позиции
OneRuleToRuleThemAll — агрессивный набор, тысячи правил
Правила можно комбинировать: hashcat -a 0 -m 0 hash.txt rockyou.txt -r rules/best64.rule -r rules/toggles1.rule. Каждый дополнительный файл правил умножает количество кандидатов, так что две тяжёлых ruleset на медленном алгоритме — рецепт для бесконечного ожидания.
Синтаксис правил: l — все символы в нижний регистр, u — в верхний, c — первая заглавная, $1 — добавить «1» в конец, ^! — добавить «!» в начало, r — развернуть слово, d — удвоить. Кастомное правило c $2 $0 $2 $5, сохранённое в файл custom.rule (одно правило — одна строка, команды через пробелы), превратит «summer» в «Summer2025». Проверить результат: hashcat --stdout -r custom.rule wordlist.txt. Этот паттерн в корпоративных паролях встречается постоянно — люди предсказуемы.
Несколько флагов, которые стоит знать:
Workload (-w). Значения от 1 до 4. На -w 1 hashcat мягко использует GPU — система остаётся пригодной для работы. На -w 3 и -w 4 — максимальная нагрузка, подходит для выделенного рабочего стола или сервера. Для CTF -w 3 обычно оптимален.
Оптимизированные ядра (-O). Ускоряет перебор, но ограничивает длину пароля 32 символами. Для CTF это редко проблема: hashcat -a 0 -m 0 hash.txt rockyou.txt -O -w 3.
Бенчмарк (-b). Перед серьёзной сессией запустите hashcat -b -m 1000 (или с нужным -m) — покажет скорость на вашем оборудовании. Помогает оценить, сколько времени займёт атака, прежде чем запускать её на часы.
Отключение potfile. Если hashcat говорит «All hashes found in potfile» — хеш уже был взломан ранее. Посмотреть результат: hashcat -m 0 hash.txt --show. Нужно перезапустить атаку — --potfile-disable.
Force-режим (--force). Подавляет предупреждения о неоптимальных драйверах. Используйте в виртуалках и на CPU, но учитывайте: предупреждения существуют не просто так — на свой страх и риск.
Hashcat — не универсальный ключ. Есть чёткие границы, за которыми он бесполезен.
Длинные случайные пароли. Xk9$mQ2z!pL7wR4t (16 символов, весь printable ASCII) — это 95^16 комбинаций для маски. Даже на топовой GPU с миллиардами хешей в секунду — астрономическое время. Словари и правила тоже не помогут, потому что пароль не основан на словарном слове. Тут hashcat просто бессилен — и это нормально.
Современные алгоритмы хранения. Argon2 (победитель Password Hashing Competition) и scrypt спроектированы так, чтобы максимально нагружать память и процессор. Даже bcrypt с высоким cost factor (12+) делает перебор бесполезным для паролей длиннее 8 символов.
Хеш без соли в неизвестном формате. Если перед хешированием к паролю добавлена неизвестная соль, и эта соль не в файле с хешем — hashcat не сможет корректно вычислить кандидата. На CTF соль обычно предоставляется вместе с хешем, но в реальных сценариях бывает иначе.
GPU-зависимость. В виртуалках без GPU passthrough hashcat работает только на CPU (-D 1). Для bcrypt или WPA2 на CPU скорость может быть ниже 1000 H/s — любая серьёзная атака становится непрактичной. Минимальное решение — использовать хост-систему с дискретной видеокартой.
Чтобы отработать описанные техники, нужна контролируемая среда. Минимальный сценарий для запуска на своей машине:
Окружение: Kali Linux или любой дистрибутив с hashcat, 4 ГБ RAM, CPU-режим достаточен для демонстрации. Интернет не требуется (все инструменты и словарь rockyou.txt локальные).
Шаг 1. Создайте тестовые хеши. Для MD5: echo -n "password123" | md5sum выдаст хеш, который можно сохранить в файл. Для SHA-256: echo -n "password123" | sha256sum. Для bcrypt: htpasswd -nbBC 10 user password123 | cut -d: -f2.
Шаг 2. Сохраните хеши в файлы: echo "482c811da5d5b4bc6d497ffa98491e38" > md5.txt (это MD5 от «password123»).
Шаг 3. Запустите hashcat поочерёдно: сначала словарную атаку без правил, затем с best64.rule, затем попробуйте маску. Сравните время каждого варианта — разница наглядна.
Шаг 4. Создайте bcrypt-хеш от того же пароля и сравните скорость его взлома с MD5. Разница покажет, почему выбор алгоритма хранения — не абстрактная тема, а конкретные секунды против часов.
Формула на бумаге понятна, но реальное ощущение скорости и ограничений приходит только когда сам прогоняешь команды. Если хочется разнообразия — на HackerLab.pro есть задачи в категории crypto, где нужно определить алгоритм и восстановить пароль из хеша в формате CTF-таска.
За два года работы с CTF-платформами и пентест-лабами я вижу один устойчивый паттерн: новички фокусируются на скорости hashcat и мощности GPU, хотя в 80% случаев задача решается правильным словарём и парой правил на средней видеокарте. Hashcat — не про железо, а про методологию: определил хеш, выбрал атаку, подобрал словарь, добавил правила, оценил время. Самая частая ошибка — запустить маску ?a?a?a?a?a?a?a?a на bcrypt и ждать чуда. Самый частый успех — rockyou.txt + best64.rule на MD5 за четыре секунды. Разница не в бюджете на видеокарту, а в понимании того, что делаешь.
Проверьте свою связку: возьмите любой MD5-хеш из минилаба, прогоните через rockyou.txt + best64.rule — и засеките время. Потом тот же пароль в bcrypt. Когда увидите разницу своими глазами, вопрос «какой алгоритм хранения выбрать» перестанет быть теоретическим. Если только начинаете путь в ИБ и хотите пройти базу системно, от хешей до сетевых атак — на Codeby School курс IB Basics закрывает фундамент без академического тона.
🚀 Хочешь закрепить на практике? Реши задачи по теме на HackerLab — категория «cryptography».
0 комментариев
Пожалуйста, войдите, чтобы оставить комментарий.
Загрузка комментариев...