Как узнать тип хеша
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
Хеши: определение типа, подсчёт контрольных сумм, нестандартные и итерированные хеши
Что такое хеши и как они используются
Хеш-сумма (хеш, хеш-код) — результат обработки неких данных хеш-функцией (хеширования).
Хеширование, реже хэширование (англ. hashing) — преобразование массива входных данных произвольной длины в (выходную) битовую строку фиксированной длины, выполняемое определённым алгоритмом. Функция, реализующая алгоритм и выполняющая преобразование, называется «хеш-функцией» или «функцией свёртки». Исходные данные называются входным массивом, «ключом» или «сообщением». Результат преобразования (выходные данные) называется «хешем», «хеш-кодом», «хеш-суммой», «сводкой сообщения».
Это свойство хеш-функций позволяет применять их в следующих случаях:
Одним из применений хешов является хранение паролей. Идея в следующем: когда вы придумываете пароль (для веб-сайта или операционной системы) сохраняется не сам пароль, а его хеш (результат обработки пароля хеш-функцией). Этим достигается то, что если система хранения паролей будет скомпрометирована (будет взломан веб-сайт и злоумышленник получит доступ к базе данных паролей), то он не сможет узнать пароли пользователей, поскольку они сохранены в виде хешей. Т.е. даже взломав базу данных паролей он не сможет зайти на сайт под учётными данными пользователей. Когда нужно проверить пароль пользователя, то для введённого значения также рассчитывается хеш и система сравнивает два хеша, а не сами пароли.
Для взлома хешей используется, в частности, Hashcat. Независимо от выбранного инструмента, необходимо знать, хеш какого типа перед нами.
Как определить тип хеша
Существует большое количество хешей. Некоторые из них являются универсальными и применяются различными приложениями, например, MD5, SHA1, CRC8 и другие. Некоторые хеши применяются только в определённых приложениях (MySQL, vBulletin) и протоколами.
Кроме популярных хешей, разработчики могут использовать различные сочетания универсальных хешей (например, посчитать хеш с помощью MD5, а затем для полученной строки получить хеш SHA1), либо итерированные (с повторением) хеши (например, для пароля рассчитывается MD5 хеш, затем для полученной строки вновь рассчитывается MD5 хеш, затем для полученной строки вновь считается MD5 – и так тысячу раз).
Применительно к взлому, иногда хешем называют сформированную определённым образом строку или файл, которые не применяются целевым приложением, но которые были рассчитаны исходя из исходных данных так, что позволяют взломать пароль целевого файла или протокола.
Обычно пентестеру известен источник хеша и он знает его тип. Но бывают исключения. В этой ситуации необходимо «угадать» какой хеш перед нами.
Это можно сделать сравнивая исходный хеш с образцами. Либо исходя из количества символов и используемого набора символов.
Также можно использовать инструменты, которые значительно ускоряют этот процесс. Программами для определения типа хеша являются hashID и HashTag.
hashID
Эта программа по умолчанию уже установлена в Kali Linux. Она идентифицирует различные типы хешей, используемых для шифрования данных, в первую очередь, паролей.
hashID – это инструмент, написанный на Python 3, который поддерживает идентификацию более 220 уникальных типов хешей используя регулярные выражения.
Использование программы очень простое:
Пара важных замечаний:
Хеш режимы Hashcat – это условное обозначение типа хеша, которое необходимо указать с опцией -m, —hash-type.
Информацию о других опциях hashID вы найдёте здесь: https://kali.tools/?p=2772
Как можно увидеть по скриншоту, это Drupal > v7.x в Hashcat для взлома данного хеша необходимо указать режим 7900.
Получаем сразу несколько вариантов:
MD5cryp – это алгоритм, который вызывает тысячу раз стандартный MD5, для усложнения процесса.
Для справки: MD5 использовался для хеширования паролей. В системе UNIX каждый пользователь имеет свой пароль и его знает только пользователь. Для защиты паролей используется хеширование. Предполагалось, что получить настоящий пароль можно только полным перебором. При появлении UNIX единственным способом хеширования был DES (Data Encryption Standard), но им могли пользоваться только жители США, потому что исходные коды DES нельзя было вывозить из страны. Во FreeBSD решили эту проблему. Пользователи США могли использовать библиотеку DES, а остальные пользователи имеют метод, разрешённый для экспорта. Поэтому в FreeBSD стали использовать MD5 по умолчанию. Некоторые Linux-системы также используют MD5 для хранения паролей.
Программа говорит, что это SHA-512 Crypt – т.е. SHA512 (Unix).
HashTag
HashTag – это инструмент на python, который разбирает и идентифицирует различные хеши паролей на основе их типа. HashTag поддерживает определение более 250 типов хешей и сопоставляет их с более чем 110 режимами hashcat. HashTag способен идентифицировать единичный хеш, разобрать единичный файл и определить хеши внутри него или обойти директорию и все поддиректории в поисках потенциальных файлов хешей и идентифицировать все найденные хеши.
Т.е. это аналогичная предыдущей программа.
По умолчанию в Kali Linux она отсутствует, поэтому требуется её скачать:
Хеш для HashTag также нужно помещать в одинарные кавычки. Хеш нужно писать после опции -sh. Зато сразу, без дополнительных опций выводятся режимы. Информацию о других опциях HashTag вы найдёте здесь: https://kali.tools/?p=2777
Идентифицируем те же самые хеши:
Как видим, результаты аналогичны.
Примеры хешей
Большое количество классических хешей, а также хешей, специально составленных для взлома пароля и хеш-файлов вы найдёте здесь.
На той странице вы можете:
Программы hashID и HashTag не всегда правильно идентифицируют хеш (по крайней мере, в явных ошибках замечена hashID).
К примеру, меня интересует хеш c73d08de890479518ed60cf670d17faa26a4a71f995c1dcc978165399401a6c4:53743528:
Это явно ошибочный результат, поскольку соль после двоеточия будто бы была отпрошена при идентификации хеша.
Получаем более правильный результат:
В действительности это sha256($pass.$salt).
Как рассчитать хеш (контрольную сумму)
В Linux имеются программы для расчёта и сверки популярных хешей:
Информация о SHA-2 (безопасный алгоритм хеширования, версия 2) – семействе криптографических алгоритмов (SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/256 и SHA-512/224.): https://ru.wikipedia.org/wiki/SHA-2
Все эти программы установлены по умолчанию в большинстве дистрибутивов Linux, они позволяют рассчитать хеши для файлов или для строк.
Применение всех этих программ похожее – нужно указать имя файла, либо передать по стандартному вводу строку.
Если для расчёта хеша строки вы используете echo, то крайне важно указывать опцию -n, которая предотвращает добавление символа новой строки – иначе каждый хеш для строки будет неверным!
Пример подсчёта хеша SHA1 для строки test:
Ещё один способ передачи строки без добавления конечного символа newline
Этот же результат можно получить следующей конструкцией:
Программы для вычисления различных хешей
Кроме перечисленных встроенных в Linux утилит, имеются другие программы, способные подсчитывать контрольные суммы. Часто они поддерживают сразу несколько алгоритмов хеширования, могут иметь дополнительные опции ввода и вывода (поддерживают различные форматы и кодировки), некоторые из них подготовлены для выполнения аудита файловой системы (выявления несанкционированных изменений в файлах).
Список некоторых популярных программ для вычисления хешей:
Думаю, используя русскоязычную справку с примерами использования, вы без труда сможете разобраться в этих программах самостоятельно.
Последовательное хеширование с использованием трубы (|)
К примеру, нам нужно рассчитать sha256 хеш для строки ‘HackWare’; а затем для полученной строки (хеша), рассчитать хеш md5. Задача кажется очень тривиальной:
Но это неправильный вариант. Поскольку результатом выполнения в любом случае является непонятная строка из случайных символов, трудно не только обнаружить ошибку, но даже понять, что она есть. А ошибок здесь сразу несколько! И каждая из них ведёт к получению абсолютно неправильных данных.
Даже очень бывалые пользователи командной строки Linux не сразу поймут в чём проблема, а обнаружив первую проблему не сразу поймут, что есть ещё одна.
Очень важно помнить, что в строке вместе с хешем всегда выводится имя файла, поэтому выполняя довольно очевидную команду вроде следующей:
мы получим совсем не тот результат, который ожидаем. Мы предполагаем посчитать sha256 хеш строки ‘HackWare’, а затем для полученной строки (хеша) рассчитать новый хеш md5. На самом деле, md5sum рассчитывает хеш строки, к которой прибавлено « —». Т.е. получается совершенно другой результат.
Выше уже рассмотрено, как из вывода удалять « —», кажется, теперь всё должно быть в порядке:
Давайте разобьём это действие на отдельные команды:
Второй этап хеширования:
Это и есть правильный ответ.
Проблема в том, что когда выводится промежуточный хеш, к нему добавляется символ новой строки, и второй хеш считается по этой полной строке, включающей невидимый символ!
Используя printf можно вывести результат без конечного символа новой строки:
Результат вновь правильный:
С printf не все дружат и проблематично использовать рассмотренную конструкцию если нужно хешировать более трёх раз, поэтому лучше использовать tr:
Вновь правильный результат:
Или даже сделаем ещё лучше – с программой awk будем использовать printf вместо print (это самый удобный и короткий вариант):
Как посчитать итерированные хеши
Итерация – это повторное применение какой-либо операции. Применительно к криптографии, итерациями называют многократное хеширование данных, которые получаются в результате хеширования. Например, для исходной строки в виде простого текста рассчитывается SHA1 хеш. Полученное значение вновь хешируется – рассчитывается SHA1 хеш и так далее много раз.
Итерация – очень эффективный метод для борьбы с радужными таблицами и с полным перебором (брут-форсом), поэтому в криптографии итерированные хеши очень популярны.
Пример кода, который подсчитывает MD5 хеш с 1000 итераций:
Как определить тип хеша по содержимому строки
Для проверки подлинности файлов очень часто используется такая функция как хеширование. Хеш или иначе контрольная сумма представляет собой короткую строку, состоящую из цифр и английских букв. Алгоритмы хеширования настолько точны, что даже самое незначительное изменение входных данных файла приведёт к изменению контрольной суммы, что позволяет использовать их для контроля целостности системных файлов и важных документов.
Как быть в этом случае и можно ли определить алгоритм контрольной суммы по самой контрольной сумме?
Да, такое вполне возможно. Определить тип хеша можно с помощью специальных утилит и сервисов. Самый простой способ — воспользоваться услугами ресурса Online Hash Crack, предназначенного для кодирования и декодирования информации. Заходим на страничку идентификации хешей www.onlinehashcrack.com/hash-identification.php, вводим в поле «Enter a hash to identify» строку хеша и жмём «Submit».
Результаты выведутся ниже. Вариантов может быть несколько, но, скорее всего, самым правильным будет первый.
В качестве альтернативы можно предложить утилиту Madleets Hash Identifier, также способную определять тип контрольной суммы. Утилита не нуждается в установке, принципом работы схожа с сервисом Online Hash Crack. Вставляем в поле строку хеша, жмём кнопку «Identifi Hash» и получаем результат.
Сегодня Hash Identifier считается устаревшей, кроме того, по данным VirusTotal 6 из 67 антивирусов идентифицируют утилиту как содержащую троян.
К счастью, у Madleets Hash Identifier есть безопасный продвинутый аналог — бесплатная консольная тулза hashID, но для ее работы на компьютер нужно будет установить пакет Python . Загрузить её можно с официальной странички psypanda.github.io/hashID.
Работает она следующим образом.
Вариантов hashID выдаёт несколько, среди которых наиболее соответствующими действительности следует считать первые два-три.
3 комментария
Я не понимаю, как там можно хранить файлы? Я понимаю, что можно в транзакции хранить хэш от какого-то файла, но ведь из хэша невозможно обратно получить файл? Или я чего-то не понимаю? Поясните, если не трудно. Спасибо
«. ведь из хэша невозможно обратно получить файл».
Невозможно, определение типа хэша может понадобится при проведении пентестов. Пригодится интересующимся криптографией.
Определения типов хэшей при помощи скрипта hash-Identifier для расшифровки паролей
Когда вы имеете дело с неизвестным хэшем, первый шаг – корректная идентификация типа.
Определения типов хэшей при помощи скрипта hash-Identifier для расшифровки паролей
Хэши обычно используются для хранения конфиденциальной информации, как, например, учетных записей, которые не должны находиться в открытом виде. При помощи утилит наподобие Hashcat мы можем взломать эти хэши однако только в случае, если знаем алгоритм генерации. Используя инструменты навроде скрипта hash-identifier, можно легко определить тип любых хэшей, чтобы затем указать правильный режим при работе с Hashcat.
Помимо взлома хэшей hash-identifier также полезен для идентификации алгоритма, используемого при выдаче контрольной суммы для загрузки файлов. Кроме того, этот скрипт помогает определить, к какому приложению относится хэшированный файл или значение (например, SQL базе или какому-либо другому формату, специфичному для конкретного поставщика).
Что такое хэш и как расшифровать пароль?
Как было сказано ранее, пароли, извлекаемые из базы данных или компьютера, обычно хранятся в виде хэшей, а не в открытом виде. Функция хэширования преобразует пароли в хаотичный набор символов и чисел, которые не должны быть обратимы обратно в пароль.
Однако два или более одинаковых пароля, при использовании одной и той же функции, будут иметь один и тот же хэш. Соответственно, при помощи этой функции можно получить набор хэшей для списка паролей, а затем использовать этот перечень для обнаружения подходящего пароля. Подобным образом работает множество утилит для взлома.
Хотя хранение пароля в виде хэша лучше, чем в открытом виде, вероятность взлома все равно остается, если у злоумышленника хороший набор правил или словарь, которые можно использовать в Hashcat или другой подобной программе.
Если вы много работаете с хэшами, то легко увидите разницу между разными и часто используемыми типами.
Например, сможете ли вы на глаз определить, к какому типу относятся хэши, указанные ниже?
При использовании Hashcat для взлома этого хэша мы должны установить опцию –m с целью работы в нужном режиме. Для взлома хэша MD5 мы бы указали режим 0.
В итоге, установив нужный алгоритм и используя хороший словарь, после расшифровки хэша мы получили слово «hashcat».
Какие хэши поддерживаются?
На данный момент Hashcat в состоянии расшифровать большое количество хэшей. В репозитории на GitHub для утилиты hash-identifier список поддерживаемых хэшей очень внушителен:
Для начала нужно установить Python3 на вашем компьютере (есть версии для разных платформ). Кроме того, вам понадобится утилита Hashcat, которую можно загрузить, используя команду apt install hashcat, после обновления системы при помощи команд apt update и apt upgrade.
Если вы хотите сгенерировать ваши собственные хэши для тестового взлома, то можете воспользоваться командой в формате echo —n PLAINTEXT | (HASHTYPE)sum. Например, при создании хэша SHA1 для слова «nullbyte» я запустил следующую команду:
Шаг 1. Загрузка и установка Hash-Identifier
Установить скрипт, написанный на Python, – очень просто. Откройте терминал и запустите следующую команду:
Затем посмотрите содержимое директории hash-identifier:
Вы должны обнаружить файл hash—id.py, который можно запустить при помощи команды ниже:
Шаг 2. Идентификация неизвестных хэшей
В качестве пробного подхода при помощи hash-identifier попробуем опознать следующие пять неизвестных хэшей:
Для начала в командной строке вводим первую строку и быстро получаем результат, что скорее всего имеем дело с хэшем, используемым в MySQL, который попробуем взломать чуть позже.
Третий хэш опознается как SHA1:
Четвертый хэш опознается как SHA512:
Наконец, пятый и последний хэш опознается как MD5:
Все прошло без особых проблем. Следующий шаг – поиск нужного режима, соответствующего обнаруженному типу, который будет указываться в Hashcat во время взлома.
Шаг 3. Подбор режима в Hashcat
При поиске нужного режима мы можем взглянуть на огромный список хэшей, поддерживаемых в Hashcat. Сокращенный вариант с наиболее популярными типами приведен ниже:
В списке выше есть два примера, которые могут соответствовать первому хэшу (7196759210defdc0), рассмотренному нами в предыдущем шаге. На первый взгляд, режим 200 «MySQL323» наиболее соответствует. Подтвердить гипотезу можно при помощи проверки тестового хэша в hash-identifier.
Точное совпадение с нужным хэшем:
Если мы попробуем другой тип (300), то увидим, что результаты не совпадают.
Соответственно, еще раз убеждаемся, что режим 200 выбран правильно.
Шаг 4. Расшифровка хэша при помощи Hashcat
После идентификации типа хэша и подбора нужно режима можно приступать к расшифровке пароля в Hashcat. Вначале нужно создать словарь с паролями, который будет использоваться в Hashcat для атаки на хэш. В сети есть много доступных списков, например, RockYou, но в нашем случае мы будем создавать тестовый словарь example.dict с несколькими паролями.
Если вы все еще находитесь внутри скрипта hash-identifier, нажмите Ctrl—C, а затем откройте файл в текстовом редакторе nano, запустив следующую команду:
После добавления нескольких предполагаемых паролей, один из которых – «hashcat», нажимаем Ctrl—X для выхода из редактора и вводим Y, чтобы сохранить изменения в файле. Теперь мы можем использовать этот файл в качестве словаря вместе с ранее выбранным режимом для взлома хэша. Базовая команда выглядит примерно так:
Вместо значения HASH_VALUE указываем хэш 7196759210defdc0, вместо MODE_NUMBER – подобранный ранее режим 200. Результат работы показан ниже. Если у вас старая система, как в моем случае – нужно указать параметр –force.
В результате мы получили 7196759210defdc0:hashcat и смогли расшифровать хэш посредством сравнения с элементами словаря из файла example.dict.
Когда вы имеете дело с неизвестным хэшем, первый шаг – корректная идентификация типа. Хотя скрипт hash-identifier – не идеален, но позволяет без особых проблем опознать наиболее распространённые хэши и отличить разные типа хэшей, которые выглядят одинаково, но требуют разных режим работы в Hashcat. Даже если hash-identifier не уверен, с каким типом вы имеете дело, сравнение с результатами примеров с сайта Hashcat, может помочь в идентификации.
Надеюсь это руководство, посвященное опознанию неизвестных хэшей, вам понравилось.
Как определить тип хеша
Зачастую раздобыть заветные хеши — это далеко не все, что нужно сделать перед тем, как начинать брут. Иногда еще бывает полезно понять, а что, собственно, будем брутить, определить хеш или другими словами, узнать, что за хеш попался при проведения пентеста.
Определение хеша онлайн
Самым простым способом узнать алгоритм хеша — онлайн-сервис. Один из самых популярных сервисов по определению хеша онлайн является сайт onlinehashcrack.com.
Использовать данный сервис очень просто:
Сервис умеет определять свыше 250 типов хешей.
Определение хеша с помощью hashID
В некоторых случаях лезть в интернет для определения типа хеша будет затруднительно. В таких ситуациях можно использовать специальные утилиты. Одна из самых популярных на сегодняшний день — инструмент hashID.
Данная утилита пришла на смену утилит HashTag и Hash-Identifier.
hashID — это чрезвычайно полезная тулза на Python 3, которая попытается определить, что за тип хеша перед ней.
В библиотеке hashID более двухсот различных сигнатур хешей и сервисов, которые их используют.
Определение хеша с помощью утилиты hashID
Утилита дружит с hashcat, John The Ripper, а также без проблем запускается и на второй ветке Python.
Установка hashID
Скачать hashID
Скачать утилиту можно с Гитхаба. Там же найдете полный список поддерживаемых хешей в Excel-файле.
На этом все. Этих инструментов определения хеша вам должно хватить. Всем хорошего настроения и информационной безопасности!
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
Как определить тип хеша
В статье «Хеши: определение типа, подсчёт контрольных сумм, нестандартные и итерированные хеши» мы уже знакомились с такими утилитами как hashID и HashTag, которые по строке хеша определяют, по какому алгоритму он был вычислен.
Упомянутые инструменты по-прежнему работают, но мир не стоит на месте (а развитие этих программ — стоит). Сейчас появились новые типы хешей, поддержка которых не реализована или имеет ошибки в данных инструментах.
Прямо сейчас, на момент написания, активно развиваются две новые программы для идентификации типов хешей. Они поддерживают больше алгоритмов хеширования и просто во всём лучше старых инструментов. Данная статья посвящена знакомству с новыми инструментами по идентификации типа хеша.
Зачем нужны новые инструменты идентификации типа хеша?
hashID не поддерживается с марта 2015 года, hash-identifier не поддерживается с 2011 года, Dagon с июня 2018 года и findmyhash с 2011 года. Все они не имеют вовсе, или имеют неправильную, ошибочную поддержку современных хешей, таких как Keccak/SHA3/Blake2 и т. д. Также такой инструмент, как hash-identifier, который является полностью интерактивным, не имеет параметров и не удобен для использования в скриптах. findmyhash имеет очень ограниченный набор обнаруживаемых хешей. Самый интересный инструмент — hashID (для идентификации хеша), но, поскольку он не поддерживается более 5 лет, проблемы и открытые PR (Pull Request — запросы на внесение изменения в исходный код) накапливаются, ошибки не исправляются, а некоторые функции отсутствуют.
Это всё могло побудить авторов создать новые инструменты с возможностями отсутствующими в предшественниках.
Посмотрим на сравнительную таблицу инструментов по определению типа хеша:
Инструмент | Поддерживается | Цветной вывод | Ref. | Библиотека | Язык | #️⃣ | 🔢 |
---|---|---|---|---|---|---|---|
haiti | ✅ (2019-настоящее время) | ✅ | ✅ | ✅ | 💎 | ✅ | 382 |
hashID | ❌ (2013-2015) | ❌ | ✅ | ❌ | 🐍 | ⭕️ | 275 |
hash-identifier | ❌ (2011-2011) | ❌ | ❌ | ❌ | 🐍 | ❌ | |
Dagon | ❌ (2017-2018) | ⭕️ | ❌ | ❌ | 🐍 | ⭕️ | |
Name-That-Hash | ✅ (2021-настоящее время) | ✅ | ✅ | ✅ | 🐍 | ✅ | 365 |
HashTag | ❌ (2013-2013) | ❌ | ❌ | ❌ | 🐍 | ⭕ |