目录
问题一:
存储过程:
密文存储:
问题二:
问题三:
问题四:
LM Hash的加密:
NTLM Hash 的加密:
问题一:
windows登录的明文密码,存储过程是怎么样的,密文存在哪个文件下,该文件是否可以打开,并且查看到密文
存储过程:
在Windows系统中,用户密码不会以明文的形式保存在计算机中,而是通过保存密码的hash值来确保安全性。Windows默认使用NTLM或Kerberos身份认证协议进行加密存储密码。
在Windows本地认证流程中
1.winlogon.exe会接收用户输入的信息。
2.然后将密码交给lsass进程。这个过程中会存一份明文密码,但随后会将明文密码加密成NTLM Hash。
3.加密后的密码哈希值会与存储在SAM(Security Accounts Manager)数据库中的哈希值进行比较认证。
因此,Windows登录的明文密码在系统中并不直接存储,而是存储其加密后的hash值。这样的设计有助于保护用户密码的安全,防止未经授权的访问和泄露。
密文存储:
存储路径:本地用户的所有密码被加密存储在 C:\Windows\System32\config\SAM
文件中。
SAM 文件通常是受到系统保护和权限控制的,普通用户无法直接打开并查看其中的内容。只有具有管理员权限的用户才能够通过特定的工具访问SAM文件(如 mimikatz),可以看到NTML Hash,但不建议直接打开和编辑 SAM 文件,因为这可能会导致系统的安全性问题,并且可能违反用户隐私和安全政策。
问题二:
我们通过hashdump 抓取出 所有用户的密文,分为两个模块,为什么? 这两个模块分别都代表什么
通过hashdump抓取出所有用户的密文时,分为LMhash(LAN Manager Hash)和NThash两个模块的原因主要与它们所代表的安全级别和兼容性有关。
LMhash是微软为了提高Windows操作系统的安全性而采用的散列加密算法,其本质是DES加密。然而,尽管其初衷是为了增强安全性,LMhash却相对容易被破解。这主要是因为它使用的密钥是固定的,且明文密码被限制在14位以内。由于这些安全缺陷,从Windows Vista和Windows Server 2008版本开始,Windows操作系统默认禁用了LMhash。
NThash,即NTLM Hash,是微软在Windows NT 3.1中引入的,旨在替代LMhash并提供更强的安全性。它支持Net NTLM认证协议及本地认证过程,并且其长度为32位,由数字与字母组成,这增加了破解的难度。
因此,hashdump工具在抓取密码哈希时,为了区分这两种不同的哈希算法以及它们所代表的安全级别和兼容性,将结果分为LMhash和NThash两个模块。这样,用户或分析人员可以清楚地看到系统中是否仍在使用较不安全的LMhash,以及哪些用户账户使用了更安全的NThash。这有助于评估系统的整体安全性,并采取必要的措施来加强安全防护。
hashdump抓取的密文分为LMhash和NThash:
LMHash(LAN Manager Hash)
LMHash 是 Windows 系统早期版本中用于存储密码哈希的一种较旧的算法。它将用户密码转换成固定长度(16 字节)的哈希值。然而,由于 LMHash 的弱点和易于破解,现代的 Windows 操作系统通常不再使用 LMHash 存储密码,而是更安全的 NTLM Hash。
NTLM Hash
NTLM Hash 是一种更安全的密码哈希算法,用于在 Windows 系统中存储用户密码的哈希值。NTLM Hash 使用更复杂的算法和更长的哈希值来存储密码,通常是 32 个字符的长度。相比于 LMHash,NTLM Hash 更难以破解,并提供了更高的安全性。
问题三:
为什么第一个模块 永远是一样的aad3
因为LMhash容易被破解,为了保证系统的兼容性,Windows只是将LM Hash禁用了(从Windows Vista和Windows Server 2008版本开始,Windows操作系统默认禁用LM Hash),但仍然会生成LMhash并且是固定值aad3b435b51404eeaad3b435b51404ee
问题四:
这两个模块的加密算法有什么不同,如何加密的
LM Hash的加密:
1.用户的密码转换为大写,密码转换为16进制字符串,不足14字节将会用0来在后面补全。
2.密码的16进制字符串被分成两个7byte部分。每部分转换成比特流,并且长度位56bit,长度不足使用0在左边补齐长度
3.再分7bit为一组,每组末尾加0,再组成一组
4.上步骤得到的二组,分别作为key 为 "KGS!@#$%
"进行DES加密。
5.将加密后的两组拼接在一起,得到最终LM HASH值。
例:Admin@123通过LM Hash加密
1.Admin@123 转换为大写 ADMIN@123
2.ADMIN@123转换十六进制
41444D494E40313233
3.密码不足14字节用0补全
41444D494E403132330000000000
4.分为2组7字节
41444D494E4031
32330000000000
5.将这两组7字节的十六进制转换为二进制
01000001010001000100110101001001010011100100000000110001
00110010001100110000000000000000000000000000000000000000
6.这两组每7bit一组末尾加0
0100000010100010000100101010100010010100011100100000000001100010
0011001000011000110000000000000000000000000000000000000000000000
7.将两组二进制转换为十六进制得到2组8字节编码
40A212A894720062
3218C00000000000
8.将2组8字节编码分别作为DES密钥,KGS!@#$%的16进制作为DES明文进行加密
4B47532140232425
两组结果:
6F08D7B306B1DAD4
B75E0C8D76954A50
9.拼接后得到最后结果
6F08D7B306B1DAD4B75E0C8D76954A50
NTLM Hash 的加密:
1.先将用户密码转换为16进制格式。
2.再将16进制格式的字符串进行ASCII转Unicode编码。
3.最后对Unicode编码的16进制字符串进行标准MD4单向哈希加密。
例:Admin@123通过NT Hash加密
1.Admin@123转换成十六进制
41646D696E40313233
2.将十六进制编码转换成Unicode格式(在每个字节后添加0x00)
410064006D0069006E004000310032003300
3.对Unicode格式的编码做MD4加密,生成32位的十六进制
570a9a65db8fba761c1008a51d4c95ab