AS-REP Roasting攻击是一种针对域用户账号hash进行离线爆破的攻击方式,它利用了Kerberos协议中的特定漏洞。
攻击原理
AS-REP Roasting攻击主要基于Kerberos协议中的预身份验证(Preauthentication)机制。Kerberos预身份验证是Kerberos身份验证的第一步(AS_REQ & AS_REP),它的主要作用是防止密码的离线爆破。默认情况下,预身份验证是开启的,这意味着在请求Kerberos票据时,域控制器(KDC)会要求客户端进行额外的验证步骤,并记录密码错误的次数以防止在线爆破。
然而,当某个域用户账号被设置为“不要求Kerberos预身份验证”时,这个保护机制就被绕过了。此时,攻击者可以使用指定用户向域控制器的Kerberos端口(通常是88端口)请求票据,而域控制器不会进行任何验证就将TGT(票据授予票据)和该用户Hash加密的Login Session Key返回给攻击者。攻击者随后可以对这个加密的Login Session Key进行离线破解,如果字典足够强大,就有可能破解出用户的明文密码。
AS-REP Roasting攻击条件
- 域用户设置了“Do not require Kerberos preauthentication(不需要kerberos预身份验证) ”,这个设置默认是没有勾选的。
- 需要一台可与域控进行通信的主机/用户。
如下域控对普通域用户yuwin7设置了 “不要求kerberos预身份验证”选项
AS-REP Roasting利用
域内利用
假设获取了一个普通域用户权限,登录后执行如下操作
Rubeus.exe
1. 获取所有“不要求kerberos预身份验证”的域用户及hash
在域内该工具会通过LDAP查询具有 'Do not require Kerberos preauthentication' 属性的域用户,如下获取到用户yuwin7
Rubeus.exe asreproast
#将该hash保存到hash.txt中
Rubeus.exe asreproast /format:hashcat /outfile:hash.txt
2. 使用hashcat离线爆破
准备一个明文的密码字典pass.txt
hashcat -m 18200 hash.txt pass.txt --force
#-m hash类型 18200代表 | Kerberos 5, etype 23, AS-REP | Network Protocol
成功爆破出明文密码为yuwin7,此时成功获取了一个域账号yuwin7:yuwin7.com
域外利用
假设目前获取的机器未加入域,但是能访问域控。对于非域内的机器,无法通过LDAP来发起用户名的查询。所以无法通过Rubeus.exe获取不需要kerberos预身份验证的用户,只能通过枚举用户名的方式来获得,如使用kerbrute工具枚举域用户。
如下枚举出yuwin7和yuwin2012两个账号。
kerbrute_windows_amd64.exe userenum --dc 192.168.10.2 -d test.lab user.txt
当枚举出的域账号刚好被设置了“不需要kerberos预身份验证”属性,则可以获取其AS-REP Hash,即使当前执行查询的主机不在域内,只要能和DC通信,便可以获取到该域账户AS-REP Hash。使用 ASREPRoast.ps1
获取域用户yuwin7的AS-REP Hash
powershell -exec bypass -Command "Import-Module .\ASREPRoast.ps1; Get-ASREPHash -UserName yuwin7 -Domain test.lab -Server 192.168.10.2"
#输出结果到文件
powershell -exec bypass -Command "Import-Module .\ASREPRoast.ps1; Get-ASREPHash -UserName yuwin7 -Domain test.lab -Server 192.168.10.2 | Out-File -Encoding ASCII hash.txt"
获取到AS-REP Hash后,同样使用hashcat对其爆破即可
hashcat.exe -m 18200 hashe.txt pass.txt --force