【域渗透】AS-REPRoasting攻击

一般kerberos请求当中中AS-REQ 的 cname 字段处写上用户名,还需要在AS-REQ的padta字段中填写一段数据,这段是由用户(administrator)hash作为加密算法的密钥,加密时间戳加密后的数据。在kerberos设计中,padata这个字段的值是可选的,如果不填写padata,意思就是想让KDC不经过认证将这个账户(administrator)的TGT返回,即使没有提供账户密码,默认情况下是需要提供认证后返回TGT,当设置了如下图所示属性,不需要提供认证也会返回TGT,但是不知道账户密码的情况下,是无法解密AS-REP里面与TGT相关的session key所以也没办法利用。

第一部分为TGT,第二部分为encpart(session key)

但是可以通过离线爆破去解决这个问题,向域控制器的88端口发送AS_REQ请求,会返回使用用户hash加密session-key,通过离线暴力破解 enc-part 可还原明文密码。

查找设置了(不要求kerberos预认证的用户)可以通过ldap过滤查找userAccountControl:1.2.840.113556.1.4.803:=4194304,powerview已实现。

Import-Module .\powerview.ps1
Get-DomainUser -PreauthNotRequired -Properties distinguishedname -Verbose

通过工具获取到 hash( RC4-HMAC AS-REP),然后进行离线爆破github:https://github.com/HarmJ0y/ASREPRoast

Import-Module .\ASREPRoast.ps1
Get-ASREPHash -UserName join -Domain redteam.com -Server DCIP | Out-File -Encoding ASCII hash.txt

然后使用hashcat对获取到的HASH进行爆破,注意一点就是需要将上面获取到的hash,改为hashcat能识别的格式,在$krb5asrep后面添加$23进行拼接, 然后使用该命令进行爆破

hashcat -m 18200 hash.txt pass.txt --force

针对域外机器想要利用的话可以通过kerberos枚举的方式进行利用,后续利用方式与上述一样不再测试

如果 KDC 给出的是 KRB_ERROR 响应,且 error-code 为 UNKNOWN_PRINCIPLE,则说明账号不存在

如果 KDC 给出的是 KRB_ERROR 响应,且 error-code 为 PREAUTH-REQUIRED,则说明目标账号是存在的,但是因为我们没有提供 authenticator,所以导致出现了错误

如果 KDC 给出的是 KRB_ERROR 响应,且 error-code 为 CLIENT_REVOKED,则说明账号存在,但是账号被禁用了

如果 KDC 给出的是 AS-REP 响应,则说明账号存在,并且账号关闭了 pre authentication,此时我们应该可以直接从 AS-REP 响应中获取到这个账号的 TGT

参考文章:

https://attack.mitre.org/techniques/T1558/004/

http://www.harmj0y.net/blog/activedirectory/roasting-as-reps/

posted @ 2021-09-09 13:56  aoaoaoao  阅读(392)  评论(0编辑  收藏  举报