重现 /etc/shadow 密码

重现 /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() 使用MD5加密,其中包括几十次 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... */

简而言之,你不能使用 basic 来重现它md5sum,而是通过调用 libc地穴(3)功能,或者使用如下工具来mkpasswd实现同样的效果:

# echo -n toor | openssl passwd -stdin -1 -salt /M
$1$/M$5GK8.h6z8o0WQLEOWC.YI/

此外,crypt() 输出中的 salt 和 hash 都使用稍微修改过的Base64(每字节 6 位),而md5sum以十六进制(每字节 4 位)打印哈希值,这样就解释了输出长度的差异。

相关内容