Воспроизведите пароли /etc/shadow
Я пытаюсь вручную воспроизвести хеш-пароль /etc/shadow из открытого текста и соли. Давайте возьмем в качестве примера следующую теневую запись:
user:$1$/M$5GK8.h6z8o0WQLEOWC.YI/:16764:0:99999:7:::
незашифрованный пароль здесь "toor". Я попытался добавить (и предварительно добавить) соль к паролю и хэшировать его, используя MD5, но я не получаю тот же результат, что и в файле паролей. Существуют ли какие-либо другие преобразования, которые система выполняет с открытым текстом для вывода хэша? команда, которую я использовал для генерации хэша:
echo -n "/Mtoor"| md5sum
Что-то еще, что я заметил, хеш, сохраненный в файле, отображает до 176 бит, тогда как традиционный md5 отображает до 128 бит.
1 ответ
Как заметил @otus, хеши не являются необработанными MD5 - crypt () использует MD5Crypt, который включает в себя несколько десятков итераций MD5 (точное количество фактически зависит от самого хэша), некоторое смещение битов и некоторую пиковую пыль.
/* Then just as many characters of the MD5(pw,salt,pw) */
/* On a 60 Mhz Pentium this takes 34 msec */
/* Then something really weird... */
Короче говоря, это не то, что вы можете воспроизвести с помощью основных md5sum
, а скорее вызывая функцию libc crypt (3) или используя такие инструменты, как mkpasswd
которые делают то же самое:
# echo -n toor | openssl passwd -stdin -1 -salt /M
$1$/M$5GK8.h6z8o0WQLEOWC.YI/
Кроме того, и соль, и хеш в выводе crypt () кодируются с использованием слегка модифицированной Base64 (6 бит на байт), в то время как md5sum
печатает хеш в шестнадцатеричном формате (4 бита на байт), чтобы учесть разницу в длине вывода.