Как-то у меня появилась необходимость подобрать пароль к пользовательской записи на linux системе, имя пользователя я знал, а вот пароль надо было восстановить старый. Хоть я и имел доступ с правами root'а и мог просто изменить пароль на данного пользователя, но мне стало интересно как можно этот пароль восстановить. После поисков и Интернете и на различных форумах я наткнулся на программку John the Ripper и решил воспользоваться ей.
Итак, согласно википедии:
John The Ripper (JTR)— свободная программа, предназначенная для восстановления паролей по их хешам. Основное назначение программы — аудит слабых паролей в UNIX системах. Программа также может выполнять аудит NTLM хешей, Kerberos, и др. Существуют реализации под различные ОС. Весьма популярна из-за поддержки большого количества хешей, автораспознавания хеша и настраиваемого взломщика. Также поддерживает модули, предоставляющие поддержку MD4 хешей, LDAP и MySQL паролей.
Однако, прежде чем начать разбираться с самим JTR, давайте остановимся на самих паролях в *nix системах.
Немного о паролях.
В Linux пароли шифруются в алгоритме «DES», также есть такая фишка как «salt», это 2е любые буквы, которые являются ключом к паролю, другими словами, с помощью «salt» и шифруется пароль. Подробнее об этом написано в статье «пароли в UNIXе».
Пароли в большинстве случаев хранятся в следующих файлах:
/etc/passwd
/etc/shadow
Хотя могут и лежать в каком-нибудь /etc/shadow.old или /etc/passwd.tmp. Сделав листинг директории /etc/, сразу можно все понять. Просто иногда хитрые админы меняют названия файлов :). passwd файл, это как раз то что нам надо, но в большинстве случаев пароли хранятся в shadow (в тени), в этом случае в passwd видим следующую ситуацию:
root:*:0:0:System Administrator:/root:/bin/csh
rfindd:*:66:1:Rfind Daemon and Fsdump:/var/rfindd:/bin/sh
Внимание! Это на самом деле fake, и никаких паролей здесь нет! А вот если видим такую ситуацию:
root:9IDv/CqdFuqWo:0:0:System Administrator:/root:/bin/csh
john:653MWdpUGN3BM:66:1:John Nikolsen, 2-nd west:/home/john:/bin/sh
То можно заметить, что данный пример более похож на правду. Давайте разберемся на примере с пользователем «john»:
john:653MWdpUGN3BM:66:1:John Nikolsen, 2-nd west:/home/john:/bin/sh
- john — имя пользователя.
- 653MWdpUGN3BM — пароль зашифрованный в DES.
- 66:1 — номер пользователя в системе: номер рабочей группы (у root всегда 0:0).
- John Nikolsen, 2-nd west — информация о пользователе (обычно Имя, Фамилия…).
- /home/john — Домашний каталог.
- /bin/csh — shell.
Во Free BSD пароли хранятся в файле /etc/master.passwd, а в остальном технология такая же как и в LINUX, хотя используется более стойкий алгоритм шифрования MD5. В Open BSD, для шифрования используется алгоритм Blowfish.
Ну а теперь о самом JTR и как им пользоваться.
Режимы.
JTR может работать в следующих режимах:
- Brute force
- Перебор по словарю (wordlist mode)
- Incremental mode
- Single mode (одиночный режим)
Рассмотрим каждый из режимов подробно.
Brute force:
john passwd
(Я в дальнейшем буду использовать passwd как имя файла с паролями, указанной выше структуры)
Данный способ является самым простым, и не очень эффективным, так как JTR начинает перебирать все символы от фонаря, что конечно очень долго… хотя многое зависит от мощности вашего компьютера и от сложности пароля.
Перебор по словарю (wordlist mode):
john -w:wordlist passwd
где wordfile — имя файла со словарем. Также можно и так:
john -w:wordlist -rules passwd
-rules, включает правила синтаксиса для словаря. С вариантом по словарю, пароли подбираются на много быстрее чем в варианте с «Brute force».
Incremental mode:
john -i passwd
Авторы JTR говорят, что это самый сильный способ перебора, 95 символов. А вот таким способом:
john -i:alpha passwd
JTR перепробует 26 символов, от «a», до «zzzzzzzz». Если с wordlist не получилось, советую запускать данный способ.
Single mode (одиночный режим):
john -single passwd
Рекомендуется начать перебирать пароль с данной опцией. Намного быстрее чем wordlist mode, но рассчитан на хиленькие пароли. При переборе нескольких файлов с данной опцией, возможно подобрать пароли быстрее чем просто 1 passwd файл
Опции.
Теперь давайте рассмотрим несколько полезных опции для JTR. Опции можно запускать в любых режимах:-w, -i, -single.
Перебор для конкретного пользователя:
john -w:wordlist -rules -users:0 passwd
Перебирает пароль к конкретному пользователю (в нашем случае root). Что бы указать пользователя, надо после ":" указать UID (номер пользователя в системе).
Смотрим подобранные пароли.
john -show passwd
Показывает уже подобранные пароли, в указанном файле.
Разбиваем файл на куски.
john -w:wordlist -salts:5 passwd
john -w:wordlist -salts:-5 passwd
Иногда бывает полезно (если есть 2 компьютера). Число «5» это количество «salts» (паролей). JTR будет отчитывать с самого верху. В первом примере (на 1ом компе), берется первые 5 пользователей, во втором примере "-5" (на 2ом компе), перебираются все, кроме 5и первых.
Люблю shells.
john -w:wordlist -rules -shells:sh,csh,tcsh,bash passwd
В данном случае, будут перебираться только те пользователи, которые имеют указанные в вышеприведенном примере shell'ы(оболочки).
Несколько passwd файлов.
Если у вас есть несколько файлов с паролями в DES, то их можно всех вместе поставить на расшифровку данным способом:
john -single passwd passwd1 passwd2
Количество файлов по-моему не ограничено :). Способ с несколькими файлами, работает на всех режимах и опциях, просто укажите имена файлов в конце (как в примере).
Unshadow files.
unshadow passwd shadow
Если у вас пароли в shadow, то данной командой, их можно восстановить (требует shadow файл).
Ну вот вроде и все. В данной статье были описаны практически все самые полезные примеры, которым можно найти применение. За более подробной информацией можно обратиться к документации прилагаемой к JTR.