前言
本文对kerberos协议中的各个角度的攻击方式进行分析总结
对于Kerberos协议的分析可以参考文章:https://xz.aliyun.com/t/8187
正文
我们知道在Kerberos协议中有三方参与,分别是Client
,Server
,KDS
,,并且在KDS
中分别有AS-身份认证服务
和TGS-票据授予服务
,其中AS
的作用就是用来验证Client
端的身份,验证通过后,AS
就会分发TGT票据
给Client
,Client
借助该TGT
票据,向TGS-票据认证服务
发送请求,TGS-票据授予服务
发放ST服务票据
给Client
…..
AS-REQ&&AS-REP
AS-REQ
在AS-REQ
这个阶段,当某个域用户试图访问域中的某个服务时,输入用户名和密码,本机的Kerberos
服务会向KDC
的AS
认证服务发送一个AS-REQ
认证请求。在这一阶段,可能会发生的攻击手法有域用户枚举
等
hash传递攻击
会使用hash传递攻击的原因
1 | (1)在域环境中,用户登录计算机时使用的大都是域账号,大量计算机在安装时会使用相同的本地管理员账号和密码,因此,如果计算机的本地管理员账号和密码也是相同的,攻击者就能使用哈希传递攻击的方法登陆内网中的其他计算机。 |
使用hash传递攻击用很多方法,比如使用mimikatz
,msf-PsExec
,其实作用都差不多,其目的都是通过已获得的hash值传递至其他机器,进行权限认证,进行模拟用户,实现对计算机的控制
PS:实际上我自己有点疑惑,在使用mimikatz
或者msf
进行攻击的时候,并没有抓到AS-REQ
的请求包,因为这个攻击手法是基于NTLM
协议的。
域用户枚举
在Kerberos协议
中在AS
阶段,Client
发送AS-REQ
请求,请求字段中的cname
是否在Kerberos
协议中真实存在,将返回不同的AS-REP
数据包,域用户枚举的攻击手法一般有三种:
1 | (1)msf中的auxiliary/gather/kerberos_enumusers |
但是不管哪一种攻击都需要被攻击的主机需要开启88端口.
先把内网的流量转发出来,然后nmap
扫描是否打开88端口.
然后使用msf中的auxiliary/gather/kerberos_enumusers
进行攻击
本质上用户枚举是通过Kerberos
错误代码来加以利用
1 | KDC_ERR_PREAUTH_REQUIRED 需要额外的预认证 => 目前/已启用 |
看到如下两种情况:
密码喷洒攻击
许多渗透测试人员和攻击者通常都会使用一种被称为“密码喷洒(Password Spraying)”的技术来进行测试和攻击。对密码进行喷洒式的攻击,这个叫法很形象,因为它属于自动化密码猜测的一种。这种针对所有用户的自动密码猜测通常是为了避免帐户被锁定,因为针对同一个用户的连续密码猜测会导致帐户被锁定。所以只有对所有用户同时执行特定的密码登录尝试,才能增加破解的概率,消除帐户被锁定的概率。攻击者首先会从他们已有的密码列表开始尝试,并以最脆弱的密码开始(“Fall2017”,“Winter2018”“123456”等)入手。普通的爆破就是用户名固定,爆破密码,但是密码喷洒,是用固定的密码去跑用户名。
参考:如何通过审计安全事件日志检测密码喷洒(Password Spraying)攻击
1 | Import-Module .\DomainPasswordSpray.ps1 |
利用工具DomainPasswordSpray
,对域用户执行密码喷洒攻击。
PS:在抓包过程中,发现这个攻击手法实际上也不是基于Kerberos
协议的,而且LDAP
协议在发挥作用,DomainPasswordSpray
在默认情况下,将利用LDAP
从域中导出用户列表,然后扣掉被锁定的用户,再用固定密码进行密码喷洒。
从流量可以看到此时正在进行密码喷洒攻击。
AS-REP
在AS-REP
这个阶段,当某个域用户试图访问域中的某个服务时,输入用户名和密码后,,KDC
中的AS-身份认证
收到AS-REQ
之后将会返回一个AS-REP
其中包含的TGT
票据,将成为下一阶段重要的认证凭据。此时可能会发生黄金票据攻击
,AS-REP Roasting攻击
黄金票据攻击
在Kerberos
协议认证过过程中,KDC
返回的AS-REP
其中的TGT
票据。
在生成TGT
票据的过程中,user,domain,timestamp
以及一些权限信息将会经过krbtgt
账户hash的加密。所以换言之,如果TGT
被伪造,就跳过了AS认证
,因为已经有了TGT
票据,就可以直接进行第二次认证,就可以和任意的Server进行通信。而伪造的TGT
票据就叫做黄金票据
KDC
返回的AS-REP
数据包中有两个部分的数据
一部分:Client NTLM-Hash
加密的Login Session-key
一部分:TGT
(krbtgt
域账户NTLM-Hash
加密的Session-Key as
,Client-info
,timestamp
)
使用黄金票据,通常在拿下域控后,用来作权限维持的一种方式。因为krbtgt域账户的密码基本不会更改,即使域管密码被修改,它也不会改变。
创建黄金票据,我们需要知道以下信息:
1 | 要伪造的域用户(这里我们一般填写域管理员账户) |
测试环境:
域:god.org
域成员:192.168.3.14 10.10.10.80
域成员:10.10.10.201
域控:10.10.10.10
在域控下运行mimikatz
获取krbtgt的SID和hash值
1 | mimikatz log "lsadump::dcsync /domain:tide.org /user:krbtgt" |
获取到SID和hash
1 | SID:S-1-5-21-2952760202-1353902439-2381784089(后面的502不要了) |
获得SID
和hash
之后,我们就能在生成票据了,PS:生成票据和导入票据要在管理员权限下进行
这时候我们在一台域用户中进行操作
1 | # 清除票据缓存 |
在导入票据后,票据将被导入至内存中。
在导入票据后,可尝试访问域控
那么其实这么说来,在获得域控后,通过伪造票据实际上,我们可以伪造成任何一个用户,但是一般情况下,我们伪造域控管理员的票据就好了,用于权限提升,权限维持,利用黄金票据做权限维持的杀伤力还是蛮大的。
参考:https://www.anquanke.com/post/id/172900#h2-5
AS-REP Roasting攻击
这个攻击的局限性实在是太大了,个人认为在实战的过程中,应该可行性,不大吧…..
参考文章:
https://blog.csdn.net/shuteer_xu/article/details/106066628
https://blog.csdn.net/qq_36119192/article/details/105076459
TGS-REQ&&TGS-REP
这一阶段可能存在的攻击在TGS-REP阶段
TGS-REP
Client
发起TGS-REQ
请求的目的就是获得一个ST票据
,因为当Client需要访问某服务器中的某服务时,需要"门票"--ST服务票据
,而在TGS-REP
阶段就是为了返回一个ST服务票据
白银票据攻击
回顾一下黄金票据攻击的必要条件:
1 | 要伪造的域用户(这里我们一般填写域管理员账户) |
这样我们可以直接使用这些信息来伪造一个TGT票据来绕过用户身份的认证,因为这些信息是不会变的,域管理员的密码可能会被更改,伪造的这个票据可以让我们伪装成比如域控管理员这样的高权限用户,去请求任何域内服务。这是黄金票据,发生在身份认证阶段。
白银票据则是发生在TGS-REP
阶段,白银票据的利用过程是伪造一个ST服务票据,通过获得服务的服务账号和密码来生成一张可以访问该服务的ST服务票据。白银票据会通过相应的服务账号来伪造ST服务票据,例如:LDAP、MSSQL、WinRM、DNS、CIFS等,范围有限,只能获取对应服务的权限。
注意:但是要注意的一点是,伪造的白银票据没有带有有效KDC签名的PAC。如果将目标主机配置为验证KDC PAC签名,则银票将不起作用。
比如使用白银票据伪造CIFS,和黄金票据的攻击手法一样,就是权限没有那么高
(1)使用mimikatz获得服务账号的NTLM哈希值
1 | privilege::Debug |
(2)进行白银票据攻击
1 | kerberos::golden /domain:xie.com /sid:S-1-5-21-2189311154-2766837956-1982445477(SID) /target:WIN2008.xie.com /service:cifs /rc4:290c699798b47b809500b3bbd4ed3e2f(NTML-HASH) /user:administrator /ptt |