Windows密码基础
Hash
Hash,一般翻译为“散列”,也直接音译为“哈希”;
Hash就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数;
常用Hash算法:MD4,MD5,SHA-1
LM-Hash
- 假设密码 Welcome,首先转换为WELCOME
- 再将大些的口令转换为二进制串:57454C434F4D4500000000000000 得到二进制0101011101000101010011000100001101001111010011010100010100000000000000000000000000000000000000000000000000000000
- 如果二进制字符串不满足14字节(一个字节8位),则需要在其后添加0x00补足14字节。然后切割成两组7字节的数据,分部经str_to_key()函数处理得到两组8字节数据:
str_to_key(57454C434F4D45) -> 56A25288347A348A
str_to_key(00000000000000) -> 0000000000000000
- 将两组8字节数据作为DESKEY对魔术字符串"KGS!@#$%"进行标准DES加密
KGS!@#$% 对应 4B47532140232425
前者对key进行加密得到 C23413A8A1E7665F
后者对key进行加密得到 AAD3B435B51404EE
最终得到C23413A8A1E7665FAAD3B435B51404EE
弱点:密码不区分大小写;密码最长为14个字符;密码被分成2串7个字符进行存放,大于7个字符吃密码破解实际上是破解2个7个字符内的密码;
NTML-Hash
-
假设口令 123456,首先转换为Unicode字符串:123456 –> 310032003300340035003600
-
对所获取的Unicode字符串进行标准MD4单向Hash,无论数据源有多少字节,MD4固定产生128-bit的哈希值,16字节:
310032003300340035003600 进行标准MD4单向哈希 -> 32ED87BDB5FDC5E9CBA88547376818D4
优点:明文口令大小写敏感,无法根据NTLM-Hash判断原始口令是否小于8字节;MD4作为单向哈希函数,穷举作为数据源出现的明文难度较大。
SAM文件
C:\Documents and Settings\Administrator\桌面>GetHashes.exe $Local
Administrator:500:AAD3B435B51404EEAAD3B435B51404EE:32ED87BDB5FDC5E9CBA88547376818D4:::
Guest:501:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0:::
HelpAssistant:1000:D71F436A4CA0F66032CF193259EBA28E:3FCFD7291382076C41E98EE85A37FC78:::
SUPPORT_388945a0:1002:AAD3B435B51404EEAAD3B435B51404EE:7D5CF46F6842ADC70CF6C4512160FDA2:::
组成:
用户名称:RID:LM-Hash:NTLM-Hash
Administrator:500:AAD3B435B51404EEAAD3B435B51404EE:32ED87BDB5FDC5E9CBA88547376818D4
AAD3B435B51404EEAAD3B435B51404EE:为空密码