我正在读一本书,它给了我一个简单的 Python 脚本来破解/etc/shadow
使用该crypt()
函数加密的密码。然后它会挑战您修改 Python 程序以使用现代 Linux 中使用的较新的 Crypt3 SHA-512 算法。
我被困在输出存储在/etc/shadow
. 我有一个用户test1
使用的密码password
和/etc/shadow
如下所示:
cat /etc/shadow | grep test1
test1:$6$sRgBNCzw$A3IHWJz./hdhPa1FHuN.Kn.P/2InPqGjZxxGnNUxY2I2b0t4xpogCKWkq9.Ra.XDaFSpNOb5UYhwjQMzBWrtp.:16792:0:99999:7:::
我的脚本的最简单形式如下所示:
import hashlib
dk = hashlib.pbkdf2_hmac('sha512',b'password',b'sRgBNCzw',5000)
检查dk
看起来像这样:
>>> dk
'.YQ\xf0\xf1\x1f\x08\x0e\x9c\xa9-E\x90\x89\xebZ\xb1\x04ao:\x00;\x9a\xcb?\xaa\x04H\x14\xb6&\x9c\x0e}#\xbd\xf5\xe6\xa5\xd6\xda|xu\x1e\xa1\xd1\x95D\x94\x15\x19 \xccEX\\\xf0g\x97|\\\xee'
我猜这是 Python 将二进制 blob 表示为文本的最大努力。但是,我需要将其与 Crypt3 函数的散列值进行比较,即:
A3IHWJz./hdhPa1FHuN.Kn.P/2InPqGjZxxGnNUxY2I2b0t4xpogCKWkq9.Ra.XDaFSpNOb5UYhwjQMzBWrtp.
现在只看影子文件中的散列值,我可以看到它看起来像 base64,所以我使用它:
binascii.b2a_base64(binascii.hexlify(dk))
得到这个:
'MmU1OTUxZjBmMTFmMDgwZTljYTkyZDQ1OTA4OWViNWFiMTA0NjE2ZjNhMDAzYjlhY2IzZmFhMDQ0ODE0YjYyNjljMGU3ZDIzYmRmNWU2YTVkNmRhN2M3ODc1MWVhMWQxOTU0NDk0MTUxOTIwY2M0NTU4NWNmMDY3OTc3YzVjZWU=\n'
进一步阅读告诉我,Crypt3 函数使用了 base64 的略微修改版本,它取消了填充和“=”。
任何人都可以帮助我如何让我的哈希与/etc/shadow
使用 Python 的哈希相匹配吗?