Введение
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. Перед публикацией рекомендуется поискать в архивах, чтобы узнать, был ли ваш вопрос уже отвечен.
Когда вам нужно обратиться за помощью, предоставление четкой и полной информации является ключевым моментом. Вот что вам следует всегда включать в свой запрос:
- Версия John the Ripper: Различные версии имеют разные функции и ошибки.
- Точная команда: Полная команда, которую вы использовали для запуска John.
- Полный вывод: Весь вывод команды, включая любые сообщения об ошибках.
- Операционная система: ОС, которую вы используете (например, Ubuntu 22.04, Windows 10).
- Образец хеша: Пример хеша, который вы пытаетесь взломать (если он не является конфиденциальным).
Вы можете узнать свою версию 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 и решению возникающих проблем.


