我的web应用程序使用MySQL
应用程序使用MySQL的密码散列函数存储相关帐户的密码
问题是,它会修剪散列密码,以便只在password字段中存储前10个字符
我想向我的主管证明,修改散列密码可以使不同的密码输入到登录表单上并被应用程序接受。因为这些密码的前10个字符是一样的
为了证明这一点,我计划使用hashcat。我已经下载了相当大的字典文件来帮助我达到目的
那么,有人可以帮我在hashcat中应该使用什么参数吗?
我试着在谷歌上搜索答案,但没有运气
谢谢

最佳答案

对于实际问题的答案,请跳到本答案的最后一部分。其他部分不直接回答你的问题,但你可能会发现,这已不再是必要的阅读他们。
你对系统的描述
你说系统处理密码如下
plaintext passwordhashed passwordfirst 10 characters of the hash
例子:
Topsecret123*E7C95D33E14D3C2A3AE4EAB25C1D98C88593F7AC*E7C95D33E
注意MySQL's PASSWORD() prefixes hashes with a *,因此实际上只包含散列中的9个字符。
在后台回答问题
您问过如何使用hashcat从上面找到方法的散列冲突,但实际上您想知道/显示的是
证明修改哈希密码可以使不同的密码[…]被应用程序接受。
你的重点是»修剪导致多个密码被接受~。但是,您忽略了即使是未经处理的散列也会导致多个密码被接受。
鸽子洞原理
这个解释很简单,你不需要找到散列冲突。每个人都应该了解以下内容:
密码的数量是无限的。
MySQL密码散列的长度是固定的,精确到64位。只能有264个不同的散列。
password hash函数将密码映射到散列。由于密码比散列多,一些密码必须映射到同一散列。
如果没有,您将找到一个压缩函数,它将允许您仅以64位存储任何内容。
有人可能会说,有效密码的数量不是无限的。但是,即使您将有效密码的长度限制为11,并且只包含组[A-Za-z0-9]中的符号(有62个符号),也将有6211个唯一密码:
6211≈5,2×1019密码
264≈1,8×1019散列
因此,仍然有很多碰撞。
哈希冲突
修剪散列并不是冲突问题的根本原因,但它当然极大地增加了冲突的可能性。通常,散列冲突不是问题,因为它们很少发生,所以您不会遇到它们。然而,对于像您这样的强修剪散列,冲突成为一个真正的问题。
发现碰撞
使用Hashcat
hashcat可以使用-m 300计算MySQL密码散列。您可以通过computing SELECT Password("hashcat");并将结果哈希与显示的哈希进行比较来确认这一点。
但是,我找不到方法来修剪这些散列/查找前缀冲突。我想哈什卡特做不到你想要的。您必须为hashcat实现自定义hashmode。最简单的方法是改变here。我不确定,但也许把current implementation of hashcat's MySQL mode改为const int out_len = 40;就足够了。您可能还必须更新同一模块的OpenCL版本。搜索9m00300
使用自定义脚本
或者,查找密码散列对的列表或自己生成一个,然后在该表中查找前缀冲突。这很有趣所以我自己做的
下面的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次尝试中找到冲突(请参见here)。
要查找具有相同哈希值的密码,请按如下方式运行脚本:
./collide.py | sort -k2 | uniq -Df1

脚本在两秒钟内完成并打印出来
23607    47ae310ff
251848   47ae310ff

这里有两个密码(23607251848)具有相同的修剪散列(47ae310ff)。
如果修剪后的散列实际上包含10个十六进制数字,则可以调整脚本并找到共享散列的两个密码18745472873667

关于linux - 在已知哈希的前10个字符的地方使用hashcat,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55739914/

10-13 03:58