白银票据与黄金票据探究
0x00 前言
在域渗透时,肯定会接触到两个最常见的概念,白银票据和黄金票据,而这两个票据主要是围绕着Kerberos这个认证协议所产生的。
0x01 Kerberos认证
Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。
整个认证过程需要以下设备:
- 客户端(Client)
- 服务端(Server)
- 认证端(KDC)
一张图演示下流程:
如图中显示的,步骤主要分三个来回认证步骤:
K(c,tgs):session_key(client与tgs之间的通信)
K(c,s):session_key(client与server之间的通信)
步骤一:Client –〉DC(KDC(as));客户端向认证服务器(AS)发送一个认证请求(KRB_AS_REQ)。
发送内容① :[Pre-authentication data(client is ntlm_hash for Timestamp),Client name & realm(DomainName\Username),Server Name(KDC TGS NAME)]
步骤二:DC(KDC(as)) –〉Client ;认证服务器(AS)认证通过后(对比用户名是否在本地数据库中),给客户端发送加密后的Session Key和TGT凭证(KRB_AS_REP)。Session_key = K(c,tgs)
发送内容②:[Client_ntlm_hash(K(c,tgs))],[Krbtgt_ntlm_hash(k(c,tgs),Client_name(DomainName\Username),TGT_EndTime)]
步骤三:Client –〉DC(KDC(tgs));客户端拿着自己加密的Session_key和TGT凭证向票据生成服务器(TGS)发起一个认证请求(KRB_TGS_REQ)。
发送内容③ :[Session_key(Authenticator([DomainName\Username,ServerName(DomainName\Server)]))],[TGT]
步骤四:DC(KDC(tgs)) –〉Client ;票据生成服务器(TGS)认证通过后,给客户端发送加密后的Session_key和ticket票据(KRB_TGS_REP)。Session_key = K(c,s)
发送内容④ :k(c,tgs)加密[Session_key],[Server_ntlm_hash(Tiket(K(c,s),Client_Name(domainName\Username),TGT_EndTime))]
步骤五:Client –〉Server ;客户端拿着自己加密的Session_key和ticket票据,去访问服务器(无双向认证的话,认证通过后, 即可访问,若双向认证,认证通过后继续走到步骤六)。
发送内容⑤:K(c,s)加密[Authenticator([DomainName\Username,ServerName(DomainName\Server)])],[Tiket]
步骤六:Server–〉Client ;服务器认证通过后,放行,并且给客户端发送一个加密的Authenticator,用于让客户端识别是否访问正确的服务端。
发送内容⑥:K(c,s)加密[Authenticator]
0x02 DC域控和Krbtgt_hash
kerberos认证服务器称KDC,它是由 Authentication Service 和 Ticket Granting Service 组成,但是它会访问 AD数据库,在认证中会需要到。
Krbtgt这个账号的密码,储存在域控服务上。下面我们使用Mimikatz对该账号进行密码抓取:
1 |
|
0x03 黄金票据
黄金票据主要是发生在kerberos的第三和第四步骤上。
1 |
|
在第三步骤时,客户端拥有两个数据,一个是自己账号ntlm_hash加密的session_key、一个是TGT凭证,而这个TGT凭证是kertgt的ntlm_hash加密的信息。
而当我们知道kertgt的ntlm_hash时,我们是不是就可以伪造TGT凭证,发送给票据生成服务器(TGS)?
如第三步骤中需要发送的内容:
1 |
|
这样,我们就可以访问域内任意一台服务器
伪造方法:
1 |
|
1 |
|
在网上还找见一个方法:
1 |
|
然后再导入这个test.kribi文件。
1 |
|
然后即可访问其它域成员默认共享目录。
0x04 白银票据
白银票据主要是发生在第五步骤上。
1 |
|
在第四步骤时,票据生成服务器(TGS)给我们发了上面的数据,在第五步骤时,我们需要发送下面的数据。
1 |
|
从需要发送的数据上看,只要我们有了server_ntlm_hash,我们就可以伪造Tiket的,这个也就是白银票据。
伪造方法:
1 |
|
1 |
|
可以伪造的服务:
服务类型 | 服务名 |
---|---|
WMI | HOST、RPCSS |
PowerShell Remoting | HOST、HTTP |
WinRM | HOST、HTTP |
Scheduled Tasks | HOST |
Windows File Share (CIFS) | CIFS |
LDAP operations including | LDAP |
Mimikatz DCSync | LDAP |
Windows Remote Server Administration Tools | RPCSS、LDAP、CIFS |
0x05 白银票据与黄金票据的不同点
- 访问权限不同
Golden Ticket: 伪造 TGT,可以获取任何 Kerberos 服务权限
Silver Ticket: 伪造 TGS,只能访问指定的服务
- 加密方式不同
Golden Ticket 由 Kerberos 的 Hash 加密
Silver Ticket 由服务账号(通常为计算机账户)Hash 加密
- 认证流程不同
Golden Ticket 的利用过程需要访问域控,而 Silver Ticket 不需要
0x06 心酸的复现篇
域控:win2008,192.168.3.118
域成员1:win2003,192.168.3.119
域成员2:winxp,192.168.3.138
域成员3:win2012,192.168.3.129
伪域成员:win7,192.168.3.156
复现开始!
win2003 —白银票据—〉winxp ,报错_无法伪造
ERROR kuhl_m_kerberos_ptt_data ; LsaCallAuthenticationPackage KerbSubmitTicketMe ssage : c000000d
win2003 —白银票据—〉win2012 ,报错_无法伪造
ERROR kuhl_m_kerberos_ptt_data ; LsaCallAuthenticationPackage KerbSubmitTicketMe ssage : c000000d
winxp —白银票据—〉win2003,成功_无法利用
Golden ticket for ‘administrator@shiyan.com‘ successfully submitted for current session
\\win2003.shiyan.com\C$
弹出登录框。。。。。
换目标。。。。
————————————–优雅的分割线————————————-
启动 win7,打开我的电脑,鼠标右键,修改计算机名称,加入域 shiyan.com ,彭!报错!
无法与域“shiyan.com”的Actice Directory域控制器(AD DC)连接。
继续各种百度配置中。。。
无法与域“shiyan.com”的Actice Directory域控制器(AD DC)连接。
好吧, 我放弃了!!!
————————————–优雅的分割线————————————-
win2012 —白银票据—〉winxp,成功_无法利用
Golden ticket for ‘administrator@shiyan.com‘ successfully submitted for current session
\\winxp.shiyan.com\C$
弹出登录框。。。。。
各种瞎几把调试本地安全策略。。。。
然后巨坑的一步来了!!!没错,巨坑的一步来了。。。
直接无障碍,域内随便访问了。。。。。
不搞了,不搞了。。。太菜了。。。
0x07 参考文章
[1]https://vonjk.red/2019/02/04/kerberos-%E7%99%BD%E9%93%B6%E7%A5%A8%E6%8D%AE/
[2]https://sakuxa.com/2019/04/03/02-Windows%E8%AE%A4%E8%AF%81%E4%B9%8BKerberos/
[3]http://1ypt0.top/2019/04/21/%E8%AE%A4%E8%AF%81%E7%90%90%E7%A2%8E/
[4]https://www.tttang.com/archive/974/
[5]https://klionsec.github.io/2016/08/10/ntlm-kerberos/?tdsourcetag=s_pcqq_aiomsg
[6]https://blog.csdn.net/include_heqile/article/details/88663612