我目前正在尝试在网络上重新创建影子哈希 + 格式(对于 CTF 挑战和可能需要重新创建影子密码或破坏非常简单的密码的事情——我经常使用 Chromebook,所以在网络上使用它很棒对我来说),我不确定 /etc/shadow 中的密码是什么格式。我目前的知识是它当然是一个哈希(取决于$x$
版本),带有盐($x$salt
),然后是哈希$x$salt$hash
在带有自定义字母表的 base64 中——我不确定该信息是否正确或它使用的字母表——我已经有了哈希值,但它使用的编码是欺骗我的部分。
正如您可以尝试的那样,在线哈希编码器不会产生与 /etc/shadow 中使用的哈希值相同的哈希值,这是我当前的格式问题。
这些哈希是使用 crypt(3) 函数创建的。虽然最初这个函数是 libc 的一部分,但现在libxcrypt库在新的 Linux 发行版中提供了它,并附带了一个crypt(5)手册页,在某种程度上描述了它支持的格式。
首先请注意,例如,虽然
$5$
被描述为“SHA-256”,但它并不是真正的普通 SHA-256,而是称为“sha256crypt”的东西,它涉及数千轮 SHA-256(显然它是基于 PBKDF1)作为可以在源码中看到。因此,即使您正确添加了盐,普通的 SHA-256 哈希器也永远不会产生正确的结果。salt 和 hash 都使用 Base64 和稍微自定义的字母表。但是在同一个源代码中,你可以看到至少对于某些算法,盐在使用之前没有被解码——因为
$5$SaLt$hAsH
,整体SaLt$
直接被用作盐。这可能会有所不同——例如,bcrypt确实解码了盐。