(1)Windows系统下的Hash密码格式
Windows系统下的Hash密码格式为:用户名称:RID:LM-Hash值:NT-Hash值,
例如:Administrator:500:C8825DB10F2590EAAAD3B435B51404EE:683020925C5D8569C23AA724774CE6CC:::表示
用户名称为:Administrator
RID为:500
LM-Hash值为:C8825DB10F2590EAAAD3B435B51404EE
NT-Hash值为:683020925C5D8569C23AA724774CE6CC
(2)Windows下LM-Hash值生成原理
假设明文口令是"Welcome",首先全部转换成大写"WELCOME",再将口令字符串大写转后的字符串变换成二进制串:
"WELCOME" -> 57454C434F4D4500000000000000
技巧:可以将明文口令复制到UltraEdit编辑器中,使用二进制方式查看,即可获取口令的二进制串。
如果明文口令经过大写变换后的二进制字符串不足14字节,则需要在其后添加0x00补足14字节。然后切割成两组7字节的数据,分别经str_to_key()函数处理得到两组8字节数据:
57454C434F4D45 -str_to_key()-> 56A25288347A348A
00000000000000 -str_to_key()-> 0000000000000000
这两组8字节数据将作为DESKEY对魔术字符串"KGS!@#$%"进行标准DES加密
"KGS!@#$%" -> 4B47532140232425。
56A25288347A348A -对4B47532140232425进行标准DES加密-> C23413A8A1E7665F
0000000000000000 -对4B47532140232425进行标准DES加密-> AAD3B435B51404EE
将加密后的这两组数据简单拼接,就得到了最后的LM Hash。
LM Hash: C23413A8A1E7665FAAD3B435B51404EE
Windows下NTLM Hash生成原理
IBM设计的LM Hash算法存在几个弱点,微软在保持向后兼容性的同时提出了自己的挑战响应机制,NTLM Hash便应运而生。假设明文口令是"123456",首先转换成Unicode字符串,与LM Hash算法不同,这次不需要添加0x00补足14字节
"123456" -> 310032003300340035003600。
从ASCII串转换成Unicode串时,使用little-endian序,微软在设计整个SMB协议时就没考虑过big-endian序,ntoh*()、hton*()函数不宜用在SMB报文解码中。0x80之前的标准ASCII码转换成Unicode码,就是简单地从0x??变成0x00??。此类标准ASCII串按little-endian序转换成Unicode串,就是简单地在原有每个字节之后添加0x00。对所获取的Unicode串进行标准MD4单向哈希,无论数据源有多少字节,MD4固定产生128-bit的哈希值,16字节310032003300340035003600-进行标准MD4单向哈希->32ED87BDB5FDC5E9 CBA88547376818D4,就得到了最后的NTLM Hash
NTLM Hash: 32ED87BDB5FDC5E9CBA88547376818D4。
与LM Hash算法相比,明文口令大小写敏感,无法根据NTLM Hash判断原始明文口令是否小于8字节,摆脱了魔术字符串"KGS!@#$%"。MD4是真正的单向哈希函数,穷举作为数据源出现的明文,难度较大。
使用GetHashes获取Windows系统的Hash密码值
GetHashes目前最高版本是v1.4,它是InsidePro公司早期的一款Hash密码获取软件,其公司地址为:http://www.InsidePro.com,该公司还有"SAMInside"、"PasswordsPro"以及"Extreme GPU Bruteforcer"三款密码破解软件。
(1)GetHashes命令使用格式
GetHashes [System key file] Or GetHashes $Local
一般使用"GetHashes $Local"来获取系统的Hash密码值,该命令仅在system权限下才能执行成功。通常根据个人爱好,可以将"GetHashes.exe"工具软件命名为其他名称。
(2)使用GetHashes获取系统Hash值实例
将GetHashes重命名为getpw,然后将其复制到欲获取hash密码值的系统盘中,然后执行"GetHashes.exe $local",顺利获取其密码Hash值,在本案例中使用的是Radmin的Telnet,单击"文本"-"保存为"将结果保存为一个新文件,然后使用UltraEdit编辑器进行编辑,仅仅保存Hash密码值部分,后面可使用LC5导入Hash密码值,即可破解系统的密码值。