Расширенные опции командной строки John the Ripper

Kali LinuxBeginner
Практиковаться сейчас

Введение

John the Ripper — это быстрый инструмент для взлома паролей, доступный для множества версий Unix, macOS, Windows и DOS. Его основная цель — обнаружение слабых паролей Unix. Помимо нескольких типов хэшей паролей crypt(3), наиболее часто встречающихся в различных системах Unix, из коробки поддерживаются хэши Kerberos AFS и Windows LM, а также сотни других типов хэшей и шифров в версии с расширенными возможностями от сообщества.

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

Подробное изучение опции --format

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

Сначала перечислим доступные форматы хэшей, которые поддерживает John the Ripper. Это даст вам представление о многогранности инструмента.

john --list=formats

Вы увидите длинный список форматов. Например, crypt для традиционных Unix-хэшей, raw-md5 для обычных MD5-хэшей, nt для Windows NT-хэшей и многие другие.

Теперь давайте попробуем взломать пароль из нашего файла passwords.txt, нацелившись на известный формат. У нас есть пользователь user1 с SHA512 crypt-хэшем. Мы можем явно указать John использовать формат sha512crypt.

john --format=sha512crypt /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt

Если пароль для user1 (который в нашей настройке password123) находится в списке слов, John его взломает.

Далее попробуем взломать LM-хэш (user5) и NT-хэш (user6) из файла passwords.txt. John часто может автоматически определять форматы, но явное указание их с помощью --format может быть быстрее и надежнее, особенно при работе со смешанными типами хэшей или менее распространенными форматами.

john --format=lm /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt
john --format=nt /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt

Вы можете увидеть вывод, похожий на этот, указывающий на процесс взлома:

Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2])
Press 'q' or Ctrl-C to abort, almost any other key for status
password123      (user1)
1g 0:00:00:00 DONE (2023-10-27 10:00) 100% (ETA: 10:00) 1.000g/s 1.000p/s 1.000c/s 1.000C/s password123
Session completed

Этот шаг демонстрирует важность опции --format для эффективного и точного взлома паролей.

Использование опции --rules с пользовательскими правилами

На этом шаге вы изучите опцию --rules, которая позволяет John the Ripper применять набор предопределенных или пользовательских правил к словам из списка слов (wordlist). Правила — это мощные преобразования, которые могут применяться к словам, такие как добавление цифр, изменение регистра или дублирование символов, что значительно увеличивает шансы на взлом паролей, являющихся вариациями распространенных слов.

John поставляется с несколькими встроенными наборами правил, такими как Wordlist (по умолчанию), Single и Jumbo. Вы можете перечислить доступные наборы правил, используя:

john --list=rules

Эта команда выведет список наборов правил.

Теперь давайте используем пользовательский файл правил. В настройках мы создали простой пользовательский файл правил с именем custom_rules.txt, который содержит такие правила, как :$[0-9] (добавить цифру) и Az (сделать первую букву заглавной).

Попробуем снова взломать user1, но на этот раз с использованием наших пользовательских правил. Предположим, пароль user1 был Password123 (заглавная P, затем 123). Наш список слов содержит только password. Правило Az сделает первую букву заглавной, а :$[0-9] добавит цифру.

john --wordlist=/home/labex/project/wordlist.txt --rules=/home/labex/project/custom_rules.txt /home/labex/project/passwords.txt --format=sha512crypt

Эта команда применит правила из custom_rules.txt к каждому слову в wordlist.txt перед их попыткой против хэшей. Например, password может стать Password, password0, password1 и т. д., а затем Password0, Password1 и т. д.

Вы также можете комбинировать правила с опцией --stdout (которую мы рассмотрим на следующем шаге), чтобы увидеть, какие слова генерируются вашими правилами:

john --wordlist=/home/labex/project/wordlist.txt --rules=/home/labex/project/custom_rules.txt --stdout

Эта команда выведет все слова, сгенерированные путем применения custom_rules.txt к wordlist.txt, в ваш терминал. Это полезно для отладки ваших наборов правил.

Опция --rules является мощной функцией для повышения эффективности атак по спискам слов путем генерации распространенных вариаций паролей.

Понимание опций --session и --restore

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

Когда John the Ripper запускается, он автоматически создает файл сеанса (обычно john.rec в каталоге запуска) для сохранения своего состояния. Однако использование опции --session позволяет указать пользовательское имя для этого файла сеанса, что полезно при одновременном выполнении нескольких задач по взлому или когда вы хотите вести отдельные журналы сеансов.

Давайте начнем сеанс взлома для user1 и укажем имя сеанса:

john --session=my_cracking_session /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt --format=sha512crypt

Дайте процессу взлома поработать несколько секунд, затем нажмите Ctrl+C, чтобы прервать его. Вы увидите сообщение о том, что сеанс был сохранен.

Теперь перечислите файлы в текущем каталоге, чтобы увидеть файл сеанса:

ls -l /home/labex/project/

Вы должны увидеть файл с именем my_cracking_session.rec (или аналогичный, в зависимости от версии и конфигурации John).

Чтобы возобновить прерванный сеанс, используйте опцию --restore с именем сеанса:

john --restore=my_cracking_session

John продолжит работу с того места, где остановился. Это невероятно полезно для управления крупномасштабными операциями по взлому или когда вашу систему необходимо перезагрузить.

Если вы не указываете имя сеанса с помощью --session, John будет использовать файл сеанса по умолчанию. Использование --restore без имени сеанса попытается восстановить сеанс по умолчанию.

john --restore

Этот шаг демонстрирует, как эффективно управлять и возобновлять ваши усилия по взлому паролей, гарантируя, что прогресс не будет потерян.

Эксперименты с опцией --stdout для перенаправления вывода

На этом шаге вы узнаете об опции --stdout, которая чрезвычайно полезна для генерации списков слов или тестирования наборов правил без фактической попытки взлома. При использовании с --stdout John the Ripper будет выводить сгенерированные кандидатные пароли в стандартный вывод (standard output), который затем может быть перенаправлен в файл или передан другому инструменту.

Это особенно мощно в сочетании со списками слов и правилами. Вы можете использовать John для создания высоко настроенных списков слов на основе существующих и конкретных правил.

Давайте сгенерируем список слов, применив наш custom_rules.txt к wordlist.txt и перенаправим вывод в новый файл с именем generated_wordlist.txt:

john --wordlist=/home/labex/project/wordlist.txt --rules=/home/labex/project/custom_rules.txt --stdout > /home/labex/project/generated_wordlist.txt

После выполнения команды проверьте содержимое вновь созданного файла:

cat /home/labex/project/generated_wordlist.txt

Вы должны увидеть слова, такие как password, Password, password0, password1 и т. д., сгенерированные правилами.

Вы также можете использовать --stdout для генерации перестановок одного слова. Например, чтобы сгенерировать вариации слова "test":

echo "test" | john --pipe --rules=/home/labex/project/custom_rules.txt --stdout

Здесь echo "test" | john --pipe передает слово "test" на стандартный ввод John, а --pipe указывает John читать со стандартного ввода. Затем --stdout выводит вариации, к которым были применены правила.

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

Знакомство с другими полезными флагами командной строки

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

  1. --show: Эта опция отображает взломанные пароли из предыдущего сеанса. После взлома паролей John сохраняет их в файле john.pot. Вы можете просмотреть их, используя:

    john --show /home/labex/project/passwords.txt

    Это покажет все пароли, которые John успешно взломал из файла passwords.txt.

  2. --incremental: Это мощный режим для атак методом полного перебора (brute-force attacks). John будет генерировать пароли на основе наборов символов и длин. Вы можете указать режим (например, alnum, digits, all).

    ## Эта команда будет выполняться долго, поэтому мы просто продемонстрируем ее использование.
    ## НЕ позволяйте ей работать слишком долго. Нажмите Ctrl+C, чтобы остановить ее через несколько секунд.
    john --incremental=digits /home/labex/project/passwords.txt --format=raw-md5

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

  3. --fork=<N>: Эта опция позволяет John использовать несколько ядер процессора или потоков для взлома, где <N> — количество используемых форков (процессов). Это может значительно ускорить взлом на многоядерных системах.

    john --fork=2 /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt --format=sha512crypt

    Это позволит попытаться взломать пароли, используя 2 ядра процессора.

  4. --mask: Эта опция позволяет выполнять атаки по маске (mask attacks), где вы определяете конкретный шаблон для пароля. Например, ?l?l?l?d?d попробует все комбинации из 3 букв и 2 цифр.

    ## Эта команда будет выполняться долго, поэтому мы просто продемонстрируем ее использование.
    ## НЕ позволяйте ей работать слишком долго. Нажмите Ctrl+C, чтобы остановить ее через несколько секунд.
    john --mask=?l?l?l?d?d /home/labex/project/passwords.txt --format=raw-md5

    Эта команда пытается взломать пароли, соответствующие указанной маске.

Это лишь некоторые из множества расширенных опций, доступных в John the Ripper. Изучение страницы man john или john --help откроет еще больше возможностей для специализированных задач аудита и взлома паролей.

Резюме

В этой лабораторной работе вы получили практический опыт работы с несколькими расширенными опциями командной строки John the Ripper. Вы научились точно указывать форматы хешей с помощью --format, применять мощные преобразования к спискам слов с помощью --rules и пользовательских файлов правил, а также управлять длительными сеансами взлома с помощью --session и --restore. Кроме того, вы изучили универсальность --stdout для генерации пользовательских списков слов и кратко коснулись других полезных флагов, таких как --show, --incremental, --fork и --mask.

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