Есть ли у кого-нибудь указатель на код (или только на алгоритм), который Cisco использует для генерации хэшей паролей для таких вещей, как «включить секрет»?
Я не пытаюсь ни во что взломать; Я пытаюсь создать соответствующую строку «включить секрет», учитывая пароль в виде открытого текста, не расшифровать существующую строку «enable secret» с хешированным паролем. Мне это нужно для автоматического генератора конфигурационных файлов, над которым я работаю (Генератор конфигурации Netomata).
По сути, мне нужен аналог Cisco для команды "htpasswd", используемой для веб-серверов.
Например, когда я помещаю следующую команду с паролем в виде открытого текста в конфигурацию Cisco:
enable secret foobar
затем, когда я выполняю команду 'show config' (при условии, что у меня включено "шифрование пароля службы"), я вижу что-то вроде этого:
enable secret 5 $1$pdQG$0WzLBXV98voWIUEdIiLm11
Мне нужен код, который переводит «foobar» в «5 $ 1 $ pdQG $ 0WzLBXV98voWIUEdIiLm11», чтобы я мог сгенерировать уже хешированные пароли в моем инструменте генерации конфигураций, вместо того, чтобы вставлять пароли в открытом виде в сгенерированные конфигурации и ждать, пока маршрутизатор выполнит сгенерировать хеш.
Я предполагаю, что цифра «5» в хешированном результате - это какой-то идентификатор алгоритма хеширования. Если есть другие алгоритмы хеширования, которые Cisco в настоящее время или исторически использовала, то я хотел бы также иметь код для этих алгоритмов.
Согласно этот сайт, утилита командной строки OpenSSL, по-видимому, обеспечивает необходимые вам функции:
$ openssl passwd -1 -salt pdQG -table foobar
foobar $1$pdQG$0WzLBXV98voWIUEdIiLm11
$
И предположительно в самой библиотеке есть эквивалентная функция.
Я не уверен, требует ли IOS, чтобы вы использовали определенные значения соли, но технически нет причин, по которым это должно быть, если строка, которую вы указываете в своей команде «enable secret», является действительным дайджестом пароля MD5. Если у вас есть возможность протестировать, мне было бы интересно узнать ваши результаты.
Похоже, что Cisco требует 4-значную соль. По умолчанию без "-salt
поваренная соль"аргумент, openssl
сгенерирует 8-символьную соль.
Ты можешь использовать openssl
для генерации Cisco-совместимого хэша «открытого текста» с соответствующей случайной 4-символьной солью, однако, вот так:
openssl passwd -salt `openssl rand -base64 3` -1 "cleartext"
"openssl rand -base64 3
Подкоманда генерирует 3 случайных байта и затем кодирует их в формате base64, что дает вам 4 печатных символа (именно то, что вам нужно для Cisco-совместимой соли).
Спасибо Murali Suriar за ответ (в другом месте на этой странице), который помог мне встать на правильный путь к этому решению.
5 Я считаю, что это относится к тому факту, что это тип 5, который использует MD5, что означает, что вам понадобится 300 playstation 3s. Тип 7 легко взломать, и у них даже есть скрипты на веб-сайты для этого. Возможно, лучше спросить об этом на Stackoverflow.
Вот отличная ссылка http://haxcess.com/2008/10/21/cisco-password-recovery/
Итог - хеш разбит на несколько частей
-> Indicates MD5 algorithm
| -> Salt
| | -> Salt + Password Hash
| | |
$1$mERr$RchIrJirmCXltFBZ2l50l/
Вот решение Perl, которое в прошлом творило для меня чудеса. Заведите этого ребенка в петлю и дайте ему побежать.
#!/usr/bin/perl
use Crypt::PasswdMD5;
my $hash = unix_md5_crypt('password','salt')
«5» означает, что открытый пароль был преобразован в пароль cisco типа 5. Пароль типа 5 - это алгоритм на основе MD5 (но я не могу сказать вам, как его вычислить, извините). Тип 7, который используется, когда вы вводите «пароль включения», является хорошо известным обратимым алгоритмом. "сервисное шифрование пароля" просто убедитесь, что пароль не будет храниться в открытом виде (тип 0)
Взгляните на http://en.wikipedia.org/wiki/Crypt_(Unix)#MD5-based_scheme и удачи :)
РЕДАКТИРОВАТЬ: вы также можете посмотреть http://www.h4x3d.com/md5-and-crypt-password-generator/, http://www.koders.com/c/fid530E8983791E1CB2AB90EAA69A68789FA2A83A6D.aspx и http://www.cryptgenerator.de/
Это старый вопрос, но я ищу аналогичное решение ...
В python вы можете сгенерировать хэши типа 5 в стиле cisco с помощью passlib.hash.md5_crypt
:
>>> from passlib.hash import md5_crypt
>>> cleartext = "foobar"
>>> cisco_type5_hash = md5_crypt.using(salt_size=4).hash(cleartext)
>>> cisco_type5_hash
'$1$qVo5$2M9hwNJKOaeCsnDlx3aDS0'
>>>
В наши дни cisco имеет гораздо более сильный хеш-код SCRYPT типа 9, но на момент написания этой статьи не существует реализаций с открытым исходным кодом хэша паролей cisco типа 9.