比较简单的关于域账户的几种攻击方式
0x01 Pre-Authentication
适用于在域外的时候,对域内的用户名进行枚举。利用Kerberos pre-auth的特性,在AS-REP中:
如果进行请求的用户存在,error-code为:ERR-PREAUTH-REQUIRED
如果请求的用户不存在,error-code为:ERR-PRINCIPAL-UNKNOWN
可利用工具:
https://github.com/ropnop/kerbrute
https://github.com/3gstudent/pyKerbrute
随后获取到有效域内用户名即可利用密码喷射拿到有效凭据开始下一步。
当然密码喷射要查看对应域的锁定策略
0x02 AS-REP Roasting
如果用户开启了“不使用Kerberos预认证”
,在AS-REP阶段,可以在任意一台能访问DC的机器(域内域外均可)上请求该用户TGT,此时DC不会作校验就将TGT和Session Key返回,则可对Session Key(经过用户的RC4-HMAC密码加密)进行脱机暴力破解,进而获得hash以及密码明文。
默认情况下,这个是禁用的
遍历开启此属性
开启此属性需要有GenericWrite权限
- 使用LDAP查询满足条件
(userAccountControl:1.2.840.113556.1.4.803:=4194304)
的用户。 - PowerView:
Import-Module .\PowerView.ps1 Get-DomainUser -PreauthNotRequired -Verbose
Get-ADUser -Filter 'useraccountcontrol -band 4194304' -Properties useraccountcontrol | Format-Table name
请求票据
Import-Module .\ASREPRoast.ps1 Get-ASREPHash -UserName testuser2 -Domain holy.testA | Out-File -Encoding ASCII hash.txt
impacket
python3 GetNPUsers.py pig.com/duck:test123 -dc-ip 10.0.19.0 -usersfile user.txt -format john -outputfile hash
然后可以用 HashCat去 破解
0x03 kerberoasting
由于Kerberos的工作原理,任何用户都可以请求在域内的用户或计算机帐户中具有已注册SPN(HOST或任意)的任何服务的TGS。注意只是请求此票证,而并不会授予对请求用户的访问权限,因为服务会最终确定是否应授予用户访问资源的权限。
由于这一点,并且因为请求SPN实例的TGS的一部分是用服务帐户的明文密码的NTLM哈希进行了加密,所以任何用户都可以请求这些TGS票证,然后离线破解服务帐户的明文密码,而不用担心帐户被锁定。
请求TGS
可以使用GetUserSPNs
或是mimikatz
请求TGS,并导出利用hashcat等进行离线破解。
如impacket内工具:
python3 GetUserSPNs.py pig.com/duck:test123 -dc-ip 10.0.19.0
想要理解原理可以抓包详细查看,所以,AS-REP Roasting、kerberoasting、Pre-Authentication 的区别是什么?