Один из самых популярных способов аутентификации - это вход по имени пользователя и паролю. Он самый простой с точки зрения реализации, поэтому до сих пор является самом популярным. Делов то, написать проверку на соответствие введенных данных на записи в БД.

Однако, несмотря на свою простоту, данный способ является самым уязвимым. Для взлома аккаунта нужно иметь логин (который не является секретом) и пароль, который можно получить различными способами.

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

Небольшое введение

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

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

md5('qwerty')  = d8578edf8458ce06fbc5bb76a58c5ca4
md5('qwerty1') = 6dbd0fe19c9a301c4708287780df41a2

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

Немного математики

Существует простая формула для определения количества всех комбинаций:

$$ p=n^{m} $$

Где m - длина пароля, n - все применяемые символы

К примеру, если при использовании букв английского алфавита в любом регистре, цифр и некоторых знаков длина пароля составляет 93:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!"#$%&'()*+,-./:;<=>?@[\\\\]^_{|}~

Тогда, при генерации 6-ти последовательностей их получится ровно 646990183449.

Попробуем сгенерировать md5 хеш от пароля j2A!lc и взломать его. Из-за огромного числа комбинаций, а еще из-за высокой энтропии самого пароля, полный перебор займёт достаточно много времени.