NTLM简介
NTLM是Windows NT早期版本的安全协议。(LM:LAN Manage)是client 通过 telnet 连接server远程登录的验证方式,本地登录验证也会是NTLM认证的形式。
本地登录验证过程
用户密码储存在
%SystemRoot%\system32\config\sam
文件中,此文件作为储存密码的“数据库”。登录时,先将用户输入的密码转换成NTLM hash然后与本地sam文件中的密码进行对比Windows系统下的hash密码格式为:用户名称:RID:LM-HASH值:NT-HASH值,例如:Administrator:500:C8825DB10F2590EAAAD3B435B51404EE:683020925C5D8569C23AA724774CE6CC:::表示 用户名称为:Administrator RID为:500 LM-HASH值为:C8825DB10F2590EAAAD3B435B51404EE NT-HASH值为:683020925C5D8569C23AA724774CE6CC
winlogon.exe 是用户登录程序,用来管理用户登录和退出
lsass.exe Local Security Authority Service、本地安全权限服务 用于本地安全和登录策略(也有可能是早期计算机上的病毒木马文件)
远程登陆/登录到域
- 如果域控制器是Windows NT 4.0,那么它使用的是NTLM协议进行验证,而Windows 2000 ,Windows 2003大多选择了更加安全可靠的Kerberos协议。Challenge/Response
- 过程
- 第一步进行协商,先确定是v1还是v2
- NTLMv1的Challenge有8位,NTLMv2的Challenge有16位
- Net-NTLM Hash:v1主要的加密算法是DES ,v2主要加密算法是MD5 (Net-NTLM Hash:Net-NTLM Hash 是基于用户密码的NTLM Hash计算出来的,用于在网络环境下 NTLM 认证的 hash。)
- 然后进行质询,服务器询问客户端,客户端给出凭证。 | 服务器收到请求,生成随机数称为Challenge然后使用登录用户名对应的NTLM Hash对Challenge进行加密生成Challenge1 ,同时将Challenge发送给客户端 经过NTLM Hash加密后的Challenge为NET NTLM Hash
- 客户端使用要登陆的账户对应的NTLM Hash对Challenge进行加密生成Response后发给服务端
最后服务端验证Response是否和Challenge1相同NTLM身份验证选项的三个值
默认值为2
0 无身份验证
1 先尝试访问机器的账号与密码,然后使用账号和密码
2 只使用访问机器的账号和密码尝试修改
1、依次单击【开始】→【运行】,输入”Regedit”,单击【确定】,打开注册表编辑器;
2、找到路径:HKEY_LOCAL_MACHINE–>System–>CurrentControlSet–>Control–>Lsa–>LmCompatibilityLevel
- 第一步进行协商,先确定是v1还是v2
加密方式
LM Hash :
明文口令是“Welcome”,首先全部转换成大写“WELCOME”,再做将口令字符串大写转后后的字符串变换成二进制串: “WELCOME” -> 57454C434F4D4500000000000000 如果明文口令经过大写变换后的二进制字符串不足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
NTLM Hash :
首先转换成Unicode字符串,与LM Hash算法不同,这次不需要添加0x00补足14字节 然后进行md4加密得到NTLM Hash