Linux 使用hashcat,其中hash的前10个字符是已知的
我有一个使用MySQL的web应用程序 应用程序使用MySQL中的密码哈希函数来存储相关帐户的密码 问题是,它会修剪散列密码,以便只将前10个字符存储到密码字段中 我想向我的主管证明,修改散列密码可以在登录表单上输入不同的密码,并被应用程序接受。因为这些密码的前10个字符相同 为了证明这一点,我计划使用hashcat。我已经下载了相当大的字典文件来帮助我达到目的 那么,有没有人可以帮助我在hashcat中应该使用的参数是什么 我试着用谷歌搜索答案,但没有成功Linux 使用hashcat,其中hash的前10个字符是已知的,linux,bash,shell,hashcat,Linux,Bash,Shell,Hashcat,我有一个使用MySQL的web应用程序 应用程序使用MySQL中的密码哈希函数来存储相关帐户的密码 问题是,它会修剪散列密码,以便只将前10个字符存储到密码字段中 我想向我的主管证明,修改散列密码可以在登录表单上输入不同的密码,并被应用程序接受。因为这些密码的前10个字符相同 为了证明这一点,我计划使用hashcat。我已经下载了相当大的字典文件来帮助我达到目的 那么,有没有人可以帮助我在hashcat中应该使用的参数是什么 我试着用谷歌搜索答案,但没有成功 感谢您回答实际问题,请跳到本答案的最
感谢您回答实际问题,请跳到本答案的最后一部分。其他部分不会直接回答您的问题,但您可能会发现,阅读这些部分后,这不再是必要的
您对系统的描述 您说过系统会按如下方式处理密码
明文密码
➜ <代码>哈希密码➜ <代码>哈希的前10个字符
示例:Topsecret123
➜ <代码>*E7C95D33E14D3C2A3AE425C1D98C88593F7AC➜ <代码>*E7C95D33E
请注意,实际上您只包含散列中的9个字符
在后台回答问题 您曾问过如何使用hashcat从上面找到该方法的哈希冲突,但实际上您想知道/显示的是 证明哈希密码可以使应用程序接受不同的密码[…] 您的重点是»修剪导致接受多个密码«。但是,您忽略了即使是未修剪的哈希也会导致接受多个密码 鸽子洞原理 解释非常简单,您不必找到散列冲突。每个人都应该理解以下几点:
- 密码的数量是无限的
- MySQL密码哈希具有固定长度,精确到64位。只能有264个不同的哈希
- 密码散列函数将密码映射到散列。由于密码多于散列,一些密码必须映射到同一散列。
如果没有,您会发现一个压缩函数,它允许您仅以64位存储任何内容李>
[A-Za-z0-9]
(有62个符号)中的符号,也会有6211个唯一密码:
#! /usr/bin/python3
import hashlib as hl
def mySqlPwHash(password):
return hl.sha1(hl.sha1(password.encode()).digest()).hexdigest()[:9]
for number in range(0, 300000):
password = str(number)
print(password, "\t", mySqlPwHash(password))
6211≈ 5,2×1019个密码264≈ 1,8×1019散列 因此,还必须有很多碰撞 散列冲突 修剪散列不是冲突问题的根本原因,但它当然会极大地增加冲突的可能性。通常,哈希冲突不是问题,因为它们很少发生,所以您不会遇到它们。然而,对于像您这样的强修剪散列,冲突成为一个真正的问题
发现碰撞 使用Hashcat hashcat可以使用
-m300
计算MySQL密码哈希。您可以通过将结果散列与显示的散列进行比较来确认这一点
但是,我找不到一种方法来修剪这些散列/查找前缀冲突。我猜hashcat不能做你想做的事。您必须为hashcat实现一个自定义hashmode。实现这一点的最简单方法是更改。我不确定,但只要换成9
就足够了。您可能还必须更新同一模块的OpenCL版本。搜索m00300
使用自定义脚本
或者,查找密码哈希对列表或自己生成一个,然后在该表中查找前缀冲突。这很有趣,所以我自己做了
以下python程序为一些数字密码生成修剪过的哈希:
#! /usr/bin/python3
import hashlib as hl
def mySqlPwHash(password):
return hl.sha1(hl.sha1(password.encode()).digest()).hexdigest()[:9]
for number in range(0, 300000):
password = str(number)
print(password, "\t", mySqlPwHash(password))
我选择生成300000个散列,因为有169个经过修剪的散列,我们可以期望在中找到冲突√(169)=262'144次尝试(参见)
要查找具有相同哈希的密码,请按如下方式运行脚本:
./collide.py | sort -k2 | uniq -Df1
只用了两秒钟,脚本就完成并打印出来了
23607 47ae310ff
251848 47ae310ff
这里有两个密码(23607
和251848
)具有相同的修剪散列(47ae310ff
)
如果修剪后的散列实际上包含10个十六进制数字,您可以调整脚本,并找到共享散列的两个密码
1874547
和2873667
,47fc464b2f
,以获得实际问题的答案,请跳到此答案的最后一节。其他部分不会直接回答您的问题,但您可能会发现,阅读这些部分后,这不再是必要的
您对系统的描述 您说过系统会按如下方式处理密码
明文密码
➜ <代码>哈希密码➜ <代码>哈希的前10个字符
示例:Topsecret123
➜ <代码>*E7C95D33E14D3C2A3AE425C1D98C88593F7AC➜ <代码>*E7C95D33E
请注意,实际上您只包含散列中的9个字符
在后台回答问题 您曾问过如何使用hashcat从上面找到该方法的哈希冲突,但实际上您想知道/显示的是 证明哈希密码可以使应用程序接受不同的密码[…] 您的重点是»修剪导致接受多个密码«。但是,您忽略了即使是未修剪的哈希也会导致接受多个密码 鸽子洞原理 解释是如此简单以至于