密码破解之Salt型密码
1.Salt概念
在密码保护技术中,salt是用来修改口令散列的随机数据串。可将salt加入散列,即使系统的另一用户也选用了同一口令,也可通过唯一辨识用户口令来避免冲突。也可加入salt,使用口令散列匹配策略为进攻系统的攻击者制造困难,因为,在口令散列中增加salt可防止攻击者使用字典单词来检验整个系统。
SALT值属于随机值。用户注册时,系统用来和用户密码进行组合而生成的随机数值,称作salt值,通称为加盐值。
背景:系统通常把用户的密码如MD5加密后,以密文形式保存在数据库中,来防止黑客偷窥。
产生:随着对MD5密文查询工具的出现,而很多用户的密码又设置简单,单纯的对用户密码进行MD5加密后保存,用密文很容易就能反查询得到某用户的密码,
原理:为用户密码添加Salt值,使得加密的得到的密文更加冷僻,不宜查询。即使黑客有密文查询到的值,也是加了salt值的密码,而非用户设置的密码。salt值是随机生成的一组字符串,可以包括随机的大小写字母、数字、字符,位数可以根据要求而不一样。
用途:当用户首次提供密码时(通常是注册时),由系统自动添加随机生成的salt值,然后再散列。而当用户登录时,系统为用户提供的代码撒上同样的加盐值,然后散列,再比较散列值,已确定密码是否正确。
其它:经过添加salt值处理的密码,即使用户设置的原密码是相通的,数据库中的密文却是不同的。
2.口令破解原理
密码破解,作为黑客常用的攻击手段之一,在攻击的初步阶段实现了账号口令的暴力猜测,为深入攻击做准备。使用精心的构造口令字典、性能强筋ed运算系统,能够快速、有效的完成口令强度较低的账户的破解。无论口令加密采用DES算法、MD5算法,还是其他机制,因为它们具有单向不可逆的特性,要想从算法本身去破解,难度相当大,通常只存在理论上的可能性。由于各种加密算法都是公开的,虽然逆向猜解不可行,但从正向猜解却是很现实的。因为,设置口令的用户是人,人们在设置口令时,习惯使用一些容易记忆且带有明显特征的口令,如用户名、生日、电话号码、亲友姓名等,这就给我们破解口令带来机会。 我们可以制作一个字典文件:里面的条目都是经常用作口令的字串。猜解口令时,就从字典文件中读出一个条目作为口令,使用与系统口令加密算法相同的方法进行加密,得到的字串与口令文件中的条目进行比较,如果相同,则猜解成功;否则,继续下一次尝试。最终结果可能得到了真正的用户口令,也可能字典文件条目用尽而不能破解。
口令破解的方法主要是字典法,利用字典文件进行口令猜解。常见的口令猜解模式主要是:
字典模式:即使用指定的字典文件进行口令猜解。
混合模式:即指定字典规则,对字典条目进行某种形式的变化,增加字典内容,提高猜解的效率。
暴力模式:即遍历所有可能的密钥空间,进行口令猜解。
实验工具
(1)John theRipper
Windows Credentials Editor v1.2 (WCE)这款软件,简单方便,直接在cmd下执行就好。除了抓HASH,还能注入HASH攻击,提升为域管理员权限。命令:–l ist logon sessions and NTLM credentials (default).它的意思是,列出曾经登录过得用户HASH。
进入本实验工具目录“D:\1、信息安全\2、网络安全\08网络对抗课程\10.密码破解之Salt型密码散列本地破解实验”,将“Tools.rar”文件“解压到当前文件夹”。
打开一个命令提示符,进入实验工具目录中解压后的“john179j5\run”子目录,运行John.exe,查看可用参考数,如下图所示:
D:
cd D:\1、信息安全\2、网络安全\08网络对抗课程\10.密码破解之Salt型密码散列本地破解实验\john179j5\run\
john
“--format”参数用来指定索要破解的密码的类型,如下图所示:
在所支持的破解类型中,其中有一个类型名为“dynamic_n”,接着运行命令 “John –subformat=LIST”来查看各类支持的动态破解类型。
比如常见的 Discuz 论坛,其带 Salt 的加密机制为: md5(md5($pass).$salt) 对应的是“dynamic_6”这种破解类型。
1.3查看破解速度。 破解速度取决于主机的机器性能以及所要破解的类型,这里以“dynamic_6”这种破解类型为例。
* john --format=dynamic_6 –test (请一定注意命令的书写格式)
在实验工具目录下(即D:\1、信息安全\2、网络安全\08网络对抗课程\10.密码破解之Salt型密码散列本地破解实验中)找到要破解的密码文档“salt_6.txt”,内容如下所示:
每一行都是一个目标用户的密码散列信息,格式为:用户名:最终的 hash 值$salt
1.5使用如下命令进行简单模式的密码破解。
john --format=dynamic_6 --single D:\1、信息安全\2、网络安全\08网络对抗课程\10.密码破解之Salt型密码散列本地破解实验\salt_6.txt
1resu破解结束后,可以使用如下命令查看已经破解成功的密码。
john --format=dynamic_6 --show D:\1、信息安全\2、网络安全\08网络对抗课程\10.密码破解之Salt型密码散列本地破解实验\salt_6.txt
1resu使用如下命令进行字典模式的密码破解。命令为:
john --format=dynamic_6 --wordlist= D:\1、信息安全\2、网络安全\08网络对抗课程\10.密码破解之Salt型密码散列本地破解实验\pass-1w.dic D:\1、信息安全\2、网络安全\08网络对抗课程\10.密码破解之Salt型密码散列本地破解实验\salt_6.txt
just4me这里使用了“pass-1w.dic”这个字典
在命令提示符中输入如下命令:
john --format=dynamic_6 --incremental=Digits D:\1、信息安全\2、网络安全\08网络对抗课程\10.密码破解之Salt型密码散列本地破解实验\salt_6.txt
这里我们使用“Digits”字符组合模式来进行暴力破解。关于“Digits”模式的设置可以查看 John 工具目录中的“Join.ini”配置文件中的“[Incremental:Digits]”部分的设置,默认如下:
从中可以看到,“Digits”字符集合暴力破解的密码最长为 8。
注:若要终止程序的运行,可以按“Ctrl+C”。
38947829使用如下命令查看所有已经破解成功的密码。使用命令为:
john --format=dynamic_6 --show D:\1、信息安全\2、网络安全\08网络对抗课程\10.密码破解之Salt型密码散列本地破解实验\salt_6.txt
user1:1resu
user2:just4me
user3:38947829