Иногда к вам прилетает загадочная строка из букв и цифр и все спрашивают что это за хеш. Вариантов сотни от древнего MD5 до модных парольных схем вроде bcrypt, scrypt и Argon2id. Хорошая новость распознать тип чаще всего можно без шаманства если смотреть на длину, алфавит, характерные префиксы и контекст системы а потом подтвердить догадки инструментами. Ниже собрал рабочий алгоритм и обзор утилит которые экономят часы жизни и нервы.
С чего начинать быстрый разбор
Прежде чем тянуться к «магии» есть три простых проверки которые удивляют своей эффективностью. Они не требуют сети и ставят на место 70 процентов случаев.
- Длина посчитайте символы. 32 часто MD5 или NTLM 40 похоже на SHA-1 64 указывает на SHA-256 128 намекает на SHA-512. Если длина нечетная или странно короткая возможно это не криптографический хеш а например CRC32 или просто Base64 от чего-то.
- Алфавит шестерки
[0-9a-f]
говорят о hex. Наличие./$
и+
часто указывает на Base64 или «модульные» форматы файловых/системных хешей. - Префиксы модульные форматы любят представляться.
$1$
это md5crypt$5$
sha256crypt$6$
sha512crypt$2a$
/$2b$
/$2y$
это bcrypt$argon2id$
говорит сам за себя$pbkdf2-sha256$
встречается у веб-фреймворков. У PostgreSQL пароль начинается сmd5
у MySQL часто*
+ 40 hex заглавными.
Памятка по длинам и подсказкам
Это не «истина в последней инстанции» а скорее ориентир чтобы сузить круг подозреваемых. Всегда проверяйте контекст и соль.
Признак | Кандидаты | Подсказки |
---|---|---|
32 hex | MD5, NTLM, LM |
NTLM обычно в верхнем регистре, без соли; LM часто содержит aad3b435b51404eeaad3b435b51404ee в половине пары
|
40 hex | SHA-1, MySQL старые схемы |
MySQL: * + 40 HEX; Apache {SHA} — Base64 от SHA-1
|
64 hex | SHA-256 |
Если есть $5$ — это уже sha256crypt
|
128 hex | SHA-512 |
$6$ — sha512crypt
|
60 символов | bcrypt |
Всегда начинается с $2a$ /$2b$ /$2y$ далее «стоимость» например $12$
|
Модульный префикс | md5/sha256/sha512-crypt, PBKDF2, scrypt, Argon2 |
$1$ , $5$ , $6$ , $pbkdf2-sha256$ , $scrypt$ , $argon2id$
|
Base64 с фигурными скобками | Apache {SHA}, {SSHA} |
Часто в .htpasswd
|
md5 + 32 hex
|
PostgreSQL |
Формат md5<md5(password+username)>
|
Начинается с $argon2id$
|
Argon2id | Параметры v, m, t, p прямо в строке |
Инструменты которые реально помогают
Дальше подключаем арсенал. Лучше иметь и локальные и облачные варианты для перекрёстной проверки. Ниже ссылки на проверенные проекты.
1. Name-That-Hash CLI
Открытый инструмент от сообщества HashPals который пытается «угадать» тип по сигнатурам, длинам, префиксам и контексту. Работает офлайн, даёт список кандидатов с рейтингами и сразу подсказывает режимы для взломщиков вроде hashcat и John.
- Репозиторий: GitHub
- Установка:
pip install name-that-hash
илиpipx install name-that-hash
- Примеры:
# одиночная строка nth --text "5f4dcc3b5aa765d61d8327deb882cf99" # из файла nth --file hashes.txt # вывод только лучших гипотез nth --text "$2b$12$4u2mQJ7..." --most-likely
2. hashID
Классика на Python. Использует набор регулярных выражений и эвристик. Да, иногда даёт «многовато кандидатов», но как быстрый фильтр годится.
- Репозиторий: GitHub
- Запуск:
python hashid.py 5baa61e4c9b93f3f0682250b6cf8331b python hashid.py -m "$6$rounds=5000$salt$..." # показать хеш-моды
3. hash-identifier
Ещё один лёгкий идентификатор на Python. Заменяемый на hashID но у многих он уже в наборе на пентест -машине.
- Репозиторий: GitHub
- Запуск:
python hash-identifier.py
4. CyberChef
Универсальный «швейцарский нож» для работы с данными. В нём нет кнопки «угадай хеш», но есть операции Magic, вычисление хешей, декодирование, перебор вариантов. Очень удобно для проверки гипотез и изучения форматов.
- Онлайн-версия: CyberChef
- Совет попробуйте цепочку: декодирование Base64 → проверка длины → вычисление хеша от тестовой строки «password» и сравнение.
5. Онлайн-идентификаторы
Когда интернет под рукой, можно кросс-проверить гипотезы в онлайн-сервисах. Они удобны для «второго мнения», но не сливайте туда чувствительные данные.
- hashes.com быстрая идентификация и примеры форматов
- TunnelsUp наглядный анализатор с подсказками
6. Справочник режимов hashcat
Да, это не «идентификатор», но когда уже есть догадка, список режимов и примеры форматов спасают от ошибок в параметрах. Часто именно он ставит точку в споре.
- Справочник: example hashes
Пошаговый алгоритм распознавания
Чтобы не превращать процесс в бесконечные «а вдруг», держите короткий сценарий. Он хорошо работает и на форензике и в багбаунти.
- Соберите контекст откуда строка взялась база, логи, веб-приложение, ОС. Фреймворки любят свои форматы например Django
pbkdf2_sha256$
или Joomla с$P$
. - Посчитайте длину и алфавит зафиксируйте «сухие» факты длина, набор символов, есть ли префикс.
- Посмотрите на префиксы всё, что начинается с
$
, почти всегда саморассказывается. - Прогон через локальные утилиты сначала
nth
, затемhashID
. Сравните топ-кандидатов. - Кросс-проверка онлайн тот же хеш в hashes.com или TunnelsUp. Если совпало у трёх источников вероятно это он.
- Проверка на тестовой строке возьмите «password» или «123456», посчитайте кандидатов в CyberChef и сравните формат и длину.
- Заведите «боевой» справочник запишите явные признаки вики вашей команды чтобы не искать их заново на третьем проекте.
Частые ловушки и как их обходить
Большинство ошибок происходит не из-за «плохих инструментов», а из-за похожих форматов и забытых солей. Вот на что чаще всего ловятся.
- MD5 и NTLM одинаковой длины оба 32 hex. Спасает контекст и регистр. NTLM обычно заглавными. Плюс NTLM считается от UTF-16LE.
- «Это Base64 а не хеш» наличие
=
на конце и символов+/
намекают на кодировку. Декодируйте и посмотрите что внутри. - Соль меняет длину md5crypt/sha*crypt, PBKDF2, bcrypt, scrypt и Argon2 вносят соль и параметры прямо в строку. Никогда не пытайтесь «взломать как MD5» то, что имеет вид
$6$...
. - Онлайн-сервисы и конфиденциальность не отправляйте реальные пользовательские хеши в чужие формы. Либо анонимизируйте соль, либо используйте офлайн-утилиты.
- CRC и контрольные суммы короткие 8-символьные строки часто CRC32, не криптостойкая история. Не путайте с «хешем пароля».
Мини-шпаргалка по регуляркам
Если приходится быстро фильтровать логи на лету, такие RegEx-маски помогают выделить кандидатов на хеши. Они не идеальны, но практичны.
# 32 hex (MD5/NTLM/LM)
b[a-f0-9]{32}b
# 40 hex (SHA-1)
b[a-f0-9]{40}b
# bcrypt
$2[aby]$d{2}$[./A-Za-z0-9]{53}
# sha256/512-crypt
$(5|6)$[./A-Za-z0-9]+$[./A-Za-z0-9]+b
# Argon2 (id/i/d)
$argon2(id|i|d)$v=d+$.*$.+
Практические примеры
Ниже пара «живых» сценок с тем как мыслить по шагам.
Пример 1 короткая строка из восьми символов
9e107d9d
Это подозрительно коротко для криптохеша. Проверяем в CyberChef как CRC32 от «fox» и понимаем что это контрольная сумма. Делать из неё «взлом пароля» бессмысленно.
Пример 2 60 символов с префиксом
$2b$12$LzQ1kZs7QFQv4Q5kE3Z3Se0xXGxHk1Y7oS2Gx3hVZ0QJX7FJrHq5e
Это bcrypt. Видим $2b$
и «стоимость» $12$
. Для атак понадобится соответствующий режим в hashcat. Дальше вопрос не «что это» а «какие параметры подать в словарь и маску».
Пример 3 32 hex в верхнем регистре
32ED87BDB5FDC5E9CBA88547376818D4
Похоже на NTLM. Подтверждаем в nth
и сверяемся с example hashes. Если это дамп Windows — почти наверняка так и есть.
Интеграция в рабочий процесс
Чтобы распознавание не превращалось в «раз в полгода вспоминаем как это делали», автоматизируйте рутину.
- Склеить мини-обёртку простая оболочка над
nth
+hashID
которая принимает строку, выдаёт пересечение топ-кандидатов и сразу печатает режимы hashcat. - Вики команды страница с таблицей префиксов и типовых форматов из справочника . Обновляйте туда же заметки по вашим продуктам.
- Политика по данным жёсткое правило «реальные хеши — только офлайн». Для демо и тикетов используйте синтетические примеры.
Короткий чек-лист
- Сначала длина, алфавит, префикс. Потом инструменты.
- Контекст решает сервер, фреймворк, ОС подскажут формат.
- Кросс-проверяйте офлайн и онлайн не верьте одному источнику.
- Не путайте базовую кодировку с криптографией.
- Соли и параметры часто живут внутри строки не «срезайте» их.
Полезные ссылки
Сохраните в закладки, пригодится в самый неожиданный момент.
P. S. Если остались сомнения попробуйте создать такой же хеш от «password» и сравнить формат и длину. Ничто так не отрезвляет как эксперимент на вкусном тестовом образце.