Главная / Блог / Hashcat: взлом хешей на CTF — от определения типа до подбора пароля

14 мин.00

Hashcat: взлом хешей на CTF — от определения типа до подбора пароля

Hashcat: взлом хешей на CTF — от определения типа до подбора пароля

Hashcat: взлом хешей на CTF — от определения типа до подбора пароля

На CTF в категории crypto попадается файл с десятком хешей без указания алгоритма. Половина участников запускает hashcat -m 0 наугад — и через час удивляется, что «ничего не ломается». Проблема не в инструменте. Проблема в двух шагах, которые пропустили. Определение типа хеша и выбор режима атаки — без этих решений hashcat взлом хешей превращается в лотерею. Разберём весь путь: от строки непонятных символов до момента, когда 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.

Hashcat режимы атаки: словарь, маска и гибрид

Определили тип хеша — теперь нужно решить, как атаковать. Флаг -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. Не сработало — добавьте правила (об этом ниже). И только если это не помогло — переходите к маске, но лишь когда можете предположить структуру пароля.

Trade-off таблица hashcat

Аспект Преимущества Ограничения Когда использовать Когда НЕ использовать
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

Примеры использования hashcat: от MD5 до bcrypt

Взлом MD5 хеша

На 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 миллионов строк фактически превращается в почти миллиард кандидатов.

Взлом SHA256 hashcat

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 цифры».

Брутфорс хешей hashcat: bcrypt и медленные алгоритмы

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:

  1. Только словарные атаки с компактными целевыми словарями
  2. Минимум правил — каждое правило умножает время
  3. Маска — только если точно знаете формат (например, 8 цифр для роутера ISP)
  4. Флаг -w 3 (высокая нагрузка на GPU) даёт прирост, но мониторьте температуру через nvidia-smi

На CTF-задачах с bcrypt авторы обычно делают пароль достаточно простым, чтобы словарь сработал. Если rockyou.txt не помог — попробуйте меньшие целевые словари: топ-1000 паролей, имена и даты.

Wordlist для hashcat: rockyou и дальше

Качество словаря часто важнее скорости перебора. 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. Этот паттерн в корпоративных паролях встречается постоянно — люди предсказуемы.

Hashcat: оптимизация производительности

Несколько флагов, которые стоит знать:

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 бессилен

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 комментариев

Пожалуйста, войдите, чтобы оставить комментарий.

Загрузка комментариев...