NTLMv1、NTLMv2 和 Kerberos的介绍

NTLM与Kerberos认证详解

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值