哈希介绍
Windows操作系统通常使用两种方法对用户的明文密码进行加密处理,在域环境中,用户信息存储在ntds.dit中,加密后为散列值,Windows操作系统中的密码一般由两部分组成,一部分为LM Hash,另外一部分为NTLM Hash,在Windows操作系统中,Hash的结构通常如下
sername:RID:LMHASH:NTHASH
LM Hash的全名为"LAN Manager Hash" 是微软为了提高windows操作系统的安全性而采用的散列加密算法,其本质是DES加密,尽管LM Hash比较容易被破解,但是为了保证系统的兼容性,Windows只是将LM Hash禁用了(从windows vista和windows server 2008版本开始,windows默认禁用LM Hash)LM hash明文密码被限定在14位以内,也就是说,如果要停止使用LM Hash,将用户的密码设置至14位以上即可,如果LM Hash被禁用了,攻击者通过工具抓取的LM Hash通常为"ad3435b51404eead3b435b51404ee"(表示LM Hash为空值或被禁用)
LM Hash加密原理
将明文口令转换为其大写形式假设这里以明文Admin@123为例,转换为大写格式为:ADMIN@123
将字符串大写后转换为16进制字符串转换后41 44 4D 49 4E 40 31 32 33
密码不足14字节要求用0补全,1Byte=8bit,上面的16进制字符串共9个字符,还差5个字符 那么我们使用 00 00 00 00 00补全为41 44 4D 49 4E 40 31 32 33 00 00 00 00 00
将上述编码分成2组7字节
41 44 4D 49 4E 40 31 第一组
32 33 00 00 00 00 00 第二组
将每一组7字节的十六进制转换为二进制,每7bit一组末尾加0,在转换成十六进制组成得到2组8字节的编码
第一组
十六进制: 41 44 4D 49 4E 40 31
转换为二进制01000001010001000100110101001001010011100100000000110001
七个为一组末尾补0
01000000
10100010
00010010
10101000
10010100
01110010
00000000
01100010
合并后为0100000010100010000100101010100010010100011100100000000001100010
在转换成十六进制
40A212A894720062
第二组步骤和第一组一样这里不讲赘述
将以上步骤得到的两组8字节的编码,分别作为DES加密key为魔术字符串"KGS!@#$%"进行加密
KGS!@#$%的16进制为4B47532140232425
最后使用DES算计器加密即可(此LM是可逆的,可破解)
NTLM Hash原理
将明文口令转换成十六进制的格式:如Admin@123
转换成Unicode格式,即在每个字节之后添加0x00
Admin@123转16进制:41646D696E40313233
添加00:410064006D0069006E004000310032003300
对Unicode字符串作为MD4加密,生成32位的十六进制数字串即是NTLM加密,该加密不可逆只能哈希破解