Полное руководство по John the Ripper. Ч.3: как запустить взлом паролей в John the Ripper (как указать маски, словари, хеши, форматы, режимы)


Оглавление

1. Знакомство и установка John the Ripper

2. Утилиты для извлечения хешей

3. Как запустить взлом паролей в John the Ripper (как указать маски, словари, хеши, форматы, режимы)

3.1 Быстрый старт с John the Ripper

3.2 Как посмотреть взломанные пароли

3.3 Атака по маске в John the Ripper

3.3.1 Гибридная Stacked маска

3.3.2 Маски переменной длины

3.3.3 Специальные символы в масках

3.4 Как посмотреть генерируемые пароли. Как создать словарь

3.5 Форматы и субформаты хешей

3.6 Как использовать все ядра ЦП для взлома. Многопоточный запуск John the Ripper

3.7 Просмотр статуса работы John the Ripper

3.8 Как восстановить работу прерванной сессии John the Ripper

3.9 Как запустить взлом пароля в John the Ripper на видеокарте

3.10 Как пользоваться John the Ripper в Windows

4. Практика и примеры использования John the Ripper

5. Атака на основе правил

6. Брут-форс нестандартных хешей

7. Johnny — графический интерфейс для John the Ripper


8. 

9. 


Быстрый старт с John the Ripper

Общий вид команды взлома паролей в John the Ripper:

john ОПЦИИ ФАЙЛ-ХЕШЕЙ

Среди самых часто используемых опций, без которых не обходится практически ни один запуск, нужно отметить --mask (маска по которой генерируются пароли) и --wordlist (путь до словаря с паролями).

Если вы знакомы с синтаксисом масок в программе Hashcat, то смело используйте его, поскольку John the Ripper полностью поддерживает этот синтаксис, но также имеет дополнительные возможности, о которых будет рассказано далее в этом разделе.

ФАЙЛ-ХЕШЕЙ — это тот файл, в который сохранён хеш, добытый с помощью одной из утилит из «ч.2: утилиты для извлечения хешей».

Для запуска атаки по словарю, нужен словарь. Если у вас нет, то скачайте rockyou:

wget https://kali.tools/files/passwords/leaked_passwords/rockyou.txt.bz2
7z e rockyou.txt.bz2

Затем сгенерируйте хеш файла, чей пароль вы хотите взломать. Для примера я получу хеш VNC:

./vncpcap2john '/home/mial/VNC.pcapng' > vnc.hash

Посмотрим содержимое файла vnc.hash:

cat vnc.hash

Там у меня (для тестов можете создать свой файл с именем vnc.hash и скопировать в него следующее):

192.168.0.101-5900 to 192.168.0.89-57454:$vnc$*894443629F4A9675809CFF5DA2E84651*271D94EB610B5C42588DC53506419E6A

Для запуска атаки по словарю запустите команду вида:

./john --wordlist='СЛОВАРЬ' ФАЙЛ-ХЕШЕЙ

У меня СЛОВАРЬ и ФАЙЛ-ХЕШЕЙ находятся в той же папке, что и исполнимый файл john, тогда моя команда следующая:

./john --wordlist='rockyou.txt' vnc.hash

Очень быстро пароль взломан:

Обратите внимание на строку, в ней взломанным паролем является «222222»:

222222           (192.168.0.101-5900 to 192.168.0.89-57454)


Для запуска атаки по маске используйте команду вида:

./john --mask='МАСКА' ФАЙЛ-ХЕШЕЙ

Например:

./john --mask='?d?d?d?d?d?d' vnc.hash

Пароль вновь взломан весьма быстро:

Как посмотреть взломанные пароли

Все взломанные хеши и подобранные пароли к ним сохраняются в файл john.pot — поищите этот файл в папке с исполнимым файлом john (если компилировали из исходного кода) или в папке ~/.john/.

Также можно использовать опцию --show, но нужно помнить, что она требует указать ФАЙЛ-ХЕШЕЙ из которого брались хеши для взлома паролей:

./john --show ФАЙЛ-ХЕШЕЙ

Например:

./john --show vnc.hash

Вывод:

192.168.0.101-5900 to 192.168.0.89-57454:222222

Атака по маске в John the Ripper

Авторы Hashcat считают атаку по маске самой основной, способной заменить полный брут-форс. Действительно, этот режим атаки и атака по словарю применяются чаще всего.

John the Ripper поддерживает ещё множество полезных режимов, но даже краткое их рассмотрение займёт много времени — поэтому режимам взлома паролей будет посвящён отдельный раздел. Большинству на первых порах будет предостаточно атаки по словарю — который совсем простой, достаточно указать файл до словаря, и атака по маске, которой мы займёмся прямо сейчас.

Атака по маске позволяет создать маску классов символов, которые могут занимать определённые позиции при создании кандидата в пароли.

Режим маски — это быстрый способ создания кандидатов на пароли по «маске», описывающей, как должны выглядеть слова.

Маска может включать:

  • Статические символы.
  • Диапазоны в синтаксисе [aouei] или [a-z]. Или оба, [0-9abcdef] совпадает с [0-9a-f].
  • Заполнители, которые являются лишь сокращённой формой для диапазонов, например ?l, что на 100% эквивалентно [a-z].
  • ?l — это строчные буквы ASCII
  • ?u — это заглавные буквы ASCII
  • ?d — это цифры
  • ?s — это специальные (все печатаемые символы ASCII кроме включённых в ?l, ?u или ?d)
  • ?a — это полный «печатный» ASCII. Обратите внимание, что для форматов, которые не распознают регистр (например, LM), это обозначение включает только символы нижнего регистра, что значительно сокращает пространство ключей (количество возможных кандидатов в пароли), но при этом охватывает все возможные варианты, доступные для данного вида хеша.
  • ?B — это все 8-битные (0x80-0xff)
  • ?b — это все (0x01-0xff) (символ NULL в настоящее время не поддерживается ядром).
  • ?h — это строчные шестнадцатеричные цифры (0-9, a-f)
  • ?H — это цифры верхнего регистра HEX (0-9, A-F)
  • ?L — это строчные буквы, не-ASCII
  • ?U — это заглавные буквы, не-ASCII
  • ?D — это "цифры", не-ASCII
  • ?S — это не-ASCII "специальные символы"
  • ?A — это все допустимые символы в текущей кодовой странице (включая ASCII). Обратите внимание, что для форматов, которые не распознают регистр (например, LM), это включает только символы нижнего регистра, что значительно сокращает количество кандидатов в пароли без ущерба для взлома.
  • Заполнители, которые определяются пользователем, поэтому мы можем, например, установить значение ?1 и присвоить ему значение, например, [?u?l]. В Hashcat это называется «пользовательские наборы символов».
  • ?1 .. ?9 — это определяемый пользователем заполнитель 1 .. 9
  • Заполнители для режима гибридной маски:
  • ?w — это в Режиме гибридной маски обозначает исходное слово, созданное родительским режимом.
  • ?W это как ?w, за исключением того, что в исходном слове учитывается регистр (поэтому PassWord становится PASSWORD).

Обычный режим маски создаёт слова из маски, например ?u?l?l будет генерировать все возможные трёхбуквенные слова, причём первый символ будет в верхнем регистре, а остальные — в нижнем.

Гибридная Stacked маска

Гибридная (также известная как Stacked) маска означает, что мы используем, например, список слов с правилами или без них (или любой другой режим взлома), а затем применяется маска к каждому слову. Таким образом, с маской ?w?d?d и входным словом (из родительского режима взлома) «pass», этот режим будет производить «pass00», «pass01» и так далее до «pass99». Гибридная маска может накладываться на любой другой режим, кроме single. Гибридная маска может применяться даже после гибридного регулярного выражения, например, допустима цепочка "prince → regex → mask".


Для большинства быстрых форматов графического процессора режим маски (включая гибридный) на несколько порядков быстрее, чем любой другой режим взлома, поскольку маска (или её часть) применяется на стороне графического процессора. Таким образом, гибридная маска может использоваться в качестве ускорителя графического процессора для любого режима, кроме single. Чтобы измерить скорость такого формата с помощью маски, используйте "--test --mask" (используя какую-нибудь маску по умолчанию) или, необязательно, с определённой маской, например, "--test --mask=?a?a". Вы можете перечислить все форматы с внутренней маской, используя "--list=formats -format=mask".

Также могут применяться внешние фильтры, и они будут применяться в последнюю очередь. Таким образом, «самая длинная» возможная цепочка преобразований (генерации кандидатов в пароли) "словарь → правила → регулярное выражение → маска → фильтер". Использование внешних фильтров с «маской на стороне GPU» вызовет несколько неопределённое поведение: фильтр будет применён до того, как маска на стороне графического процессора завершит слово!

Вы можете определить собственные заполнители для ?1 .. ?9, используя командную строку, например, -1=?l?u или в разделе john.conf [Mask] (подробно о файле настроек будет в одной из следующих частей).

Маски переменной длины

В john.conf также есть маска по умолчанию (по умолчанию такая же, как у hashcat). Её следует использовать с -max-len (и, возможно, -min-len), чтобы получилось что-то полезное.

Параметр -max-len=N усекает маску, поэтому слова длиннее N не выводятся.

Параметр -min-len=N пропустит создание слов короче N.

Если не в режиме «гибридной маски» и использовалась опция -min-len или -max-len, мы будем перебирать пароли с длиной (как в «инкрементной маске») от -min-len до -max-len (или пароли с минимальной и максимальной длинной для данного формата, если эти опции были указаны). Итак, чтобы создать все возможные слова от 3 до 5 букв, используйте -mask=?l -min-len=3 -max-len=5. В случае, если указанная маска короче, последняя её часть будет расширена, например, "-mask=?u?l -max-len=5" будет использовать эффективную маску ?u?l?l?l?l. Всякий раз, когда используется инкрементная маска, ETA (время до завершения перебора всех кандидатов в пароли) в любой момент времени показывает расчётное время для завершения проверки паролей по маске текущей длины, а не всего прогона со всеми масками разной длины.

Специальные символы в масках

Вы можете экранировать специальные символы с помощью \. Итак, чтобы создать буквальное «?l», вы можете сказать \?l или ?\l, и это не будет анализироваться как заполнитель. Точно так же вы можете экранировать дефисы или скобки, чтобы они не анализировались как специальные символы. Чтобы создать буквальную обратную косую черту, используйте \\.

Существует также специальная шестнадцатеричная запись \xHH для указания любого кода символа. Например, \x41 - это «A», а \x09 - это код для TAB.

Примеры:

Маска Пользовательская маска / гибридный ввод Пример вывода Количество кандидатов
pass   pass 1
pw?d   pw3 10
?w?d?d?d password password123 1000x
?w?s?w Bozo Bozo#Bozo 33x
?w?s?W Bozo Bozo#bOZO 33x
0x?1?1:?1?1:?1?1 -1=[0-9a-f] 0xde:ad:ca 16777216
?3?l?l?l -3=?l?u Bozo, hobo 913952
[Pp][Aa@][Ss5][Ss5][Ww][Oo0][Rr][Dd]   P@55w0rD 1296

У нас есть поддержка режима маски на устройстве для большинства быстрых типов хешей, для которых у нас вообще есть поддержка OpenCL. Кроме того, такая поддержка масок на устройстве может использоваться вместе с предоставленным хостом потоком частичных возможных паролей для формирования множества гибридных режимов. Например, все следующие примеры являются правильными:


  • Протестировать любые 7-символьные печатаемые строки ASCII с разумным количеством позиций маски, обрабатываемых на устройстве (JtR решает как оптимально разделить маску между хостом и устройством):
--mask='?a?a?a?a?a?a?a'

То же самое:

--mask='?a' --min-length=7 --max-length=7

То же, но для диапазона длин от 1 до 8:

--mask='?a' --min-length=1 --max-length=8
  • Также можно использовать диапазоны длин с более сложными масками, где последний компонент маски будет расширен до большей длины:
--mask='start?l?d' --min-length=7 --max-length=14

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

Как посмотреть генерируемые пароли. Как создать словарь

С помощью опции --stdout вы можете вместо запуска взлома показать создаваемые кандидаты в пароли. Это может быть полезно при проверке написанных масок и при генерации словарей.

Например, чтобы показать все кандидаты в пароли для маски '?d?d?d?d':

./john --mask='?d?d?d?d' --stdout

Чтобы сохранить все пароли для маски '?d?d?d?d' (четыре любые цифры) в файл:

./john --mask='?d?d?d?d' --stdout > 4d.txt

Чтобы создать словарь, содержащий все цифры от 1 до 9999 и сохранить его в файл 1-4d.txt:

./john --mask='?d?d?d?d' --min-length=1 --max-length=4 --stdout > 1-4d.txt

Чтобы создать файл с паролями телефонов, начинающихся на «8905143»:

./john --mask='8905143?d?d?d?d' --stdout > beeline.txt

Вы можете вывести кандидаты в пароли с обрезкой по ДЛИНЕ, для этого используйте опцию вида --stdout=ДЛИНА.

Форматы и субформаты хешей

Следующая команды вычисляет MD5 хеш для слова «mial» и сохраняет его в файл hash.txt:

echo -n mial | md5sum | awk '{ print $1 }' > hash.txt

Содержимое файла hash.txt:

cat hash.txt

Вывод:

563fad4d8604ab2f515dc9feee0097d7

Как взломать этот MD5 хеш?

Если запустить примерно такую команду:

./john --mask='?l' --min-length=1 --max-length=8 hash.txt

То будет получена ошибка:

Can't set max length larger than 7 for LM format

В ней говориться, что невозможно установить максимальную длину больше чем 7 для формата LM. Но у нас то формат MD5 — очевидно, что John the Ripper ошибся с определением формата хеша.

Некоторые хеши JtR может определить самостоятельно, без указания типа, но при необходимости вы можете явно указать тип хеша, который нужно взломать.

Из предыдущих частей мы помним, что все возможные форматы можно посмотреть командой:

./john --list=formats

Чтобы было проще ориентироваться в полученном выводе, мы можем использовать команду вида:

./john --list=formats | grep -i --color 'ФОРМАТ ДЛЯ ПОИСКА'

К примеру, я хочу найти точное название формата MD5, тогда запускаю такую команду:

./john --list=formats | grep -i --color md5

Интересны сразу два найденных формата:

  • Raw-MD5
  • raw-MD5-opencl

Слово «Raw» означает «не обработанный, сырой». Многие хеши, например, для шифрования паролей различных систем управления контентами (CMS), обеспечивающие работу веб-сайтов и пр., за основу берут различные функции вычисления контрольных сумм (MD5, SHA1 и прочее) и используют их в комбинации с солью и многократным повторением (итерациями). По отношению к этим типам хеширования, MD5, SHA1 и другие являются «элементарными», то есть более базовыми, ну или «сырыми».

То есть «raw» в названии двух этих форматов означает, что это обычный MD5. А «opencl» означает, что для взлома хеша может использоваться видеокарта.

Когда нашли нужный формат, то посмотрите на его название — в данном случае нужны нам формат называется «Raw-MD5». Это название нужно указать с уже знакомой нам опцией --format=ФОРМАТ. Итак, формат называется Raw-MD5, поэтому я добавляю в строку команды --format=Raw-MD5 и теперь моя команда выглядит так:

./john --format=Raw-MD5 --mask='?l' --min-length=1 --max-length=8 hash.txt

Хеш успешно взломан:

 

Ещё нам нужно знать о том, что JtR поддерживает субформаты (или подформаты). На самом деле, субформаты это замечательнейшая функция, которая позволяет вычислять итерированные и различные комбинированные алгоритмы, которые не предусмотрены оригинальным набором алгоритмов.

Субформатам будет посвящён отдельный раздел. Сейчас же мы только научимся смотреть имя нужного нам формата. Для этого используйте команду вида:

./john --list=subformats | grep -i --color 'ФОРМАТ ДЛЯ ПОИСКА'

Меня по-прежнему интересует MD5, поэтому я запускаю такую команду:

./john --list=subformats | grep -i --color md5

Много всего найдено, прежде всего, меня интересует строка:

Format = dynamic_0   type = dynamic_0: md5($p) (raw-md5)

raw-md5 — означает «сырой md5» - именно то, что мне нужно. Чтобы я наверняка не ошибся, приводится функция (формула) его вычисления: md5($p). Здесь $p означает пароль, а md5() - вычисление MD5 хеша переданной строки.

Когда нашли нужный формат, то посмотрите на его название — в данном случае формат называется «dynamic_0».

Это название нужно указать с уже знакомой нам опцией --format=ФОРМАТ. Новым для нас является то, что эту опцию можно использовать не только с именами форматов, но и с именами субформатов.

Итак, формат называется dynamic_0, поэтому я добавляю в строку команды --format=dynamic_0 и теперь моя команда выглядит так:

./john --format=dynamic_0 --mask='?l' --min-length=1 --max-length=8 hash.txt

Хеш вновь успешно взломан:

Как использовать все ядра ЦП для взлома. Многопоточный запуск John the Ripper

Возьмём чуть более сложный для взлома хеш:

echo -n hackware | md5sum | awk '{ print $1 }' > hash.txt

Посмотрим содержимое файла hash.txt:

cat hash.txt

В этом файле MD5 хеш строки «hackware».

53ab0dff8ecc7d5a18b4416d00568f02

Запустим команду для взлома:

./john --format=dynamic_0 --mask='?l' --min-length=1 --max-length=8 hash.txt

Видно, что:

  1. Центральный процессор используется не на полную
  2. Скорость перебора 52034Kp/s

Чтобы значительно ускорить скорость взлома, используйте опцию --fork=ЧИСЛО, в качестве числа установите количество логических ядер ЦП на вашем компьютере. Например, если 12 логических ядер, то нужно использовать опцию --fork=12:

./john --format=dynamic_0 --mask='?l' --min-length=1 --max-length=8 --fork=12 hash.txt

В результате:

  1. ЦП используется полностью
  2. Скорость перебора стала 24338Kp/s на один поток, но при этом запущено 12 потоков. То есть возросла в 24338/52034*12 = 5,6 раз.

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

Не нужно беспокоится, что система станет неотзывчивой — по умолчанию John the Ripper использует только свободные ресурсы процессора — можно продолжить работать на компьютере как обычно, «тормозов» и «зависаний» не появится.

Просмотр статуса работы John the Ripper

Статус прогресса JtR включает в себя процент завершённой работы, ETA (время завершения работы), скорость перебора кандидатов в пароли, текущий кандидат. Если программа запущена в несколько потоков, то эта информация выводится для каждого из них — это видно на предыдущих скриншотах. Статус работы John the Ripper выводится при переходе к маске большей длины, а также через определённый интервалы времени. Если вы хотите вывести количество проделанной работы, то в любой момент нажмите Enter и немедленно будет выведен статус работы.

Как восстановить работу прерванной сессии John the Ripper

По умолчанию John the Ripper сохраняет прогресс взлома для последней сессии. То есть если работа JtR завершилась внезапно, например, из-за непредвиденной перезагрузки компьютера, то для продолжения последней сессии используйте опцию --restore:

./john --restore

Не нужно указывать опции или файл с хешами — все настройки сохранены в файле сессии.

Если вы хотите, то вы можете использовать именные сессии, благодаря чему вы сможете возобновлять любую из них, а не только самую последнюю, для этого добавьте опцию --session=ИМЯ.

Чтобы восстановить прерванную именную сессию, используйте опцию --restore=ИМЯ. То есть нужно указать имя сессии, которое вы использовали с опцией --session.

Как запустить взлом пароля в John the Ripper на видеокарте

Взлом на видеокарте очень похож на взлом на ЦП. Главное отличие — нужно указать другой формат с опцией --format. Не для всех алгоритмов поддерживается взлом на GPU (OpenCL). Необходимо, чтобы в названии нужного алгоритма присутствовала строка «-opencl». Для поиска подойдёт приведённая выше команда:

./john --list=formats | grep -i --color 'ФОРМАТ ДЛЯ ПОИСКА'

Запускаем уже знакомую команду:

./john --list=formats | grep -i --color md5

Нужный алгоритм называется raw-MD5-opencl, используем его с опцией --format:

./john --format=raw-MD5-opencl --mask='?l' --min-length=1 --max-length=8 hash.txt

Скорость взлома достигла 1670Mp/s! На центральном процессоре, при запуске на всех 12 ядрах, скорость была 292Mp/s.

Конечно же, на такой скорости хеш очень быстро взломан:

Как пользоваться John the Ripper в Windows

Словарь для взлома, который использовался в этой статье, вы можете скачать по ссылке: https://kali.tools/files/passwords/leaked_passwords/rockyou.txt.bz2

Большинство из скриптов, которые используются для извлечения хешей из файлов с паролями, можно запустить и в Windows. Но для этого нужно установить Python, Ruby и Perl. Подробные инструкции вы найдёте в соответствующих статьях:

Кроме скриптов, с John the Ripper поставляются скомпилированные (бинарные) файлы для извлечения хешей. Они должны без проблем запускаться в Cygwin. Основы работы в Cygwin смотрите здесь:

В командах запуска John the Ripper в Windows вам, возможно, понадобится заменить одинарные кавычки на двойные (или сделайте наоборот, если возникает синтаксическая ошибка).

Возможно, в Windows можно не использовать кавычки в некоторых случаях (для масок, например). Но это только если вы запускаете JtR не в Cygwin, а в командной строке (или PowerShell) Windows.

Если у вас возникают какие-либо ошибки при работе с JtR и сопутствующими инструментами в Windows, то пишите эти ошибки в комментариях. Примером ошибок может быть: отсутствие зависимости для скрипта Python или «не найден файл» из-за особенностей файловой системы Cygwin или ошибки синтаксиса. Всё это, скорее всего, можно решить, поэтому спрашивайте.

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


Рекомендуется Вам:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *