Устранение распространенных проблем с John the Ripper

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

Введение

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

В этой лабораторной работе вы научитесь устранять некоторые из наиболее частых проблем, возникающих при использовании John the Ripper. Мы рассмотрим такие ошибки, как "No hashes loaded" (Хеши не загружены), разберемся с неверными форматами хешей, устраним узкие места в производительности, обработаем поврежденные файлы сессий и узнаем, где искать помощь, когда вы застряли. К концу этой лабораторной работы вы будете лучше подготовлены к диагностике и эффективному решению проблем с JtR.

Устранение ошибки "No hashes loaded"

На этом шаге мы рассмотрим одну из наиболее распространенных ошибок в John the Ripper: No password hashes loaded (Хеши паролей не загружены). Эта ошибка обычно возникает по двум основным причинам: John уже взломал все хеши в предоставленном файле, или файл имеет формат, который John не может распознать.

Сначала давайте запустим John на допустимом файле хешей. Скрипт настройки уже создал файл с именем shadow.txt в вашем текущем каталоге (~/project), который содержит хеш пароля пользователя в формате, распознаваемом John.

Попробуем взломать его, используя простой список слов (wordlist).

john --wordlist=pass.list shadow.txt

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

Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2-16])
Cost 1 (algorithm [1:descrypt]...
Press 'q' or Ctrl-C to abort, almost any other key for status
password123      (dummyuser)
1g 0:00:00:00 DONE (2023-10-27 10:30) 100.0g/s 100.0p/s 100.0c/s 100.0C/s password123
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Теперь, когда пароль взломан, John сохраняет его в файле john.pot. Попробуем выполнить ту же команду еще раз.

john --wordlist=pass.list shadow.txt

На этот раз вы увидите ошибку.

Using default input encoding: UTF-8
No password hashes loaded (see FAQ)

Это происходит потому, что John проверяет файл john.pot перед началом работы и игнорирует любые хеши, которые уже были взломаны. Вы можете просмотреть содержимое файла john.pot, чтобы убедиться в этом.

cat ~/.john/john.pot

В выводе будет показан хеш и взломанный пароль.

$1$notarealhash$b5gQ1P2kPiyP2t.OqI0kS1:password123

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

echo "this is just a text file" > plain.txt

Теперь попробуйте запустить John на нем.

john plain.txt

Вы увидите ту же ошибку "No password hashes loaded", потому что John не смог найти в файле никаких данных, похожих на хеш пароля. Всегда убеждайтесь, что ваш целевой файл содержит хеши в поддерживаемом формате.

Отладка ошибки "Invalid hash type"

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

Сначала давайте посмотрим, что происходит, когда John сталкивается с файлом, содержащим некорректную строку хеша. Для этой цели у нас есть файл с именем invalid_hashes.txt.

john invalid_hashes.txt

John проанализирует файл и сообщит, что не смог загрузить ни одного допустимого хеша, аналогично ошибке из предыдущего шага.

Using default input encoding: UTF-8
No password hashes loaded (see FAQ)

Теперь давайте используем файл с допустимым хешем, но укажем неверный формат. Наш файл hashes_md5.txt содержит стандартный хеш raw-MD5, но мы сообщим John, что это хеш NT.

john --wordlist=pass.list --format=nt hashes_md5.txt

John выдаст предупреждение или ошибку, потому что данные хеша не соответствуют указанному формату.

Warning: invalid ciphertext ignored: user1:5d41402abc4b2a76b9719d911017c592
No password hashes loaded (see FAQ)

Чтобы исправить это, вы должны предоставить правильный формат хеша. Если вы знаете, что формат — raw-MD5, вы можете указать его напрямую. Это часто быстрее, чем позволять John автоматически определять его.

Давайте выполним команду с правильным форматом.

john --wordlist=pass.list --format=raw-md5 hashes_md5.txt

На этот раз команда успешно взламывает пароль.

Using default input encoding: UTF-8
Loaded 1 password hash (raw-MD5 [MD5 128/128 SSE2-16])
Cost 1 (iteration count) is 1 for all loaded hashes
Press 'q' or Ctrl-C to abort, almost any other key for status
labex            (user1)
1g 0:00:00:00 DONE (2023-10-27 10:35) 100.0g/s 1234Kp/s 1234Kc/s 1234KC/s 123..labex
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Если вы не уверены в типе хеша, вы можете опустить флаг --format и позволить John попытаться определить его автоматически. Однако для неоднозначных или нестандартных хешей указание формата является лучшим способом обеспечить успех.

Устранение узких мест производительности

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

Ключевым показателем производительности в John the Ripper является "кандидаты в секунду" (c/s). Вы можете запустить тестирование (benchmark), чтобы увидеть, насколько хорошо ваша система работает с различными алгоритмами хеширования.

john --test

Эта команда запустит серию тестов. Посмотрите в выводе на показатели c/s для различных алгоритмов.

Benchmarking: descrypt, traditional crypt(3) [DES 128/128 SSE2-16]... DONE
Many salts:	1234K c/s real, 1234K c/s virtual
Only one salt:	1111K c/s real, 1111K c/s virtual

... (многие другие алгоритмы) ...

Benchmarking: raw-MD5 [MD5 128/128 SSE2-16]... DONE
Raw:	45678K c/s real, 45678K c/s virtual

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

Прежде чем тестировать это, давайте очистим файл john.pot, чтобы мы могли повторно взломать хеш из Шага 1.

rm ~/.john/john.pot

Теперь давайте запустим сеанс взлома на shadow.txt с использованием одного ядра. Пока он выполняется, нажмите любую клавишу (например, Enter), чтобы увидеть статус. Обратите внимание на показатель c/s.

john --wordlist=pass.list shadow.txt

Через мгновение нажмите Enter. Вы увидите строку статуса. Затем нажмите Ctrl+C, чтобы остановить его.

Теперь попробуем снова с двумя параллельными процессами.

john --fork=2 --wordlist=pass.list shadow.txt

На этот раз John будет использовать два ядра процессора для выполнения задачи. Если вы проверите статус, общий показатель c/s должен быть значительно выше, почти вдвое больше, чем при использовании одного ядра. Это может значительно сократить время, необходимое для сеанса взлома.

Другие советы по повышению производительности включают:

  • Использование целевых списков слов (wordlists): Меньший, более релевантный список слов работает быстрее, чем огромный, общий.
  • Указание формата: Как показано в Шаге 2, использование --format позволяет избежать накладных расходов на автоматическое определение.

Обработка поврежденных файлов сеанса

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

Давайте начнем новый сеанс. Мы назовем его my_session.

john --session=my_session --wordlist=pass.list corrupt_me.txt

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

Session aborted

Вы можете увидеть созданный файл сеанса.

ls ~/.john/
john.log  john.pot  my_session.rec

Теперь давайте смоделируем поврежденный файл, добавив к нему некоторые мусорные данные.

echo "THIS IS CORRUPTED DATA" >> ~/.john/my_session.rec

Поскольку файл сеанса поврежден, давайте попробуем возобновить нашу работу.

john --restore=my_session

John не сможет разобрать файл восстановления и, скорее всего, завершится с сообщением об ошибке. Точная ошибка может варьироваться, но она будет указывать на проблему с файлом .rec.

Error in recovery file: ~/.john/my_session.rec

Когда это происходит, единственным решением является удаление поврежденного файла сеанса. Это означает, что вы потеряете прогресс для этого конкретного сеанса и вам придется начать его заново. Однако любые пароли, которые уже были успешно взломаны, находятся в безопасности в файле john.pot.

Давайте удалим плохой файл.

rm ~/.john/my_session.rec

Теперь вы можете начать сеанс снова с самого начала. Это важный шаг устранения неполадок для восстановления после неожиданных сбоев или отключений системы во время попытки взлома.

Обращение за помощью к сообществу John the Ripper

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

Основным местом для поддержки сообщества является список рассылки john-users. Перед публикацией рекомендуется поискать в архивах, чтобы узнать, был ли ваш вопрос уже отвечен.

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

  1. Версия John the Ripper: Различные версии имеют разные функции и ошибки.
  2. Точная команда: Полная команда, которую вы использовали для запуска John.
  3. Полный вывод: Весь вывод команды, включая любые сообщения об ошибках.
  4. Операционная система: ОС, которую вы используете (например, Ubuntu 22.04, Windows 10).
  5. Образец хеша: Пример хеша, который вы пытаетесь взломать (если он не является конфиденциальным).

Вы можете узнать свою версию John the Ripper с помощью флага --version. Давайте запустим его сейчас.

john --version

Вывод будет выглядеть примерно так:

John the Ripper 1.9.0-jumbo-1 [linux-gnu 64-bit x86_64 AVX2 AC]

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

Резюме

В этой лабораторной работе вы получили практический опыт устранения некоторых из наиболее распространенных проблем с John the Ripper.

Вы узнали, как:

  • Диагностировать ошибку No hashes loaded, проверяя файл john.pot на наличие уже взломанных паролей и проверяя формат входного файла.
  • Решать проблемы с типом хеша, используя флаг --format для указания правильного алгоритма.
  • Устранять узкие места в производительности, запуская тесты производительности (benchmarks) и используя опцию --fork для параллельной обработки.
  • Восстанавливаться после неудачной попытки взлома, удалив поврежденный файл сеанса (.rec).
  • Собирать необходимую информацию, такую как версия JtR и вывод команды, для эффективного обращения за помощью к сообществу.

С этими навыками вы теперь лучше подготовлены к более эффективному использованию John the Ripper и решению возникающих проблем.