Skip to main content

票据传递 Pass The Ticket

在讲解 PTT 之前,我们先来了解一下在 Windows 与 Linux 平台上有关域凭证的文件,它们可以通过工具实现互相转换。

kirbi

我们通过 mimikatz 或者 rubeus 请求与导出的 TGT 或者 TGS票据格式为 .kirbi。对于 mimikatz,我们可以使用命令 sekurlsa::ticket /export 导出所有票据,格式为 .kirbi。

image.png

image.png

 如果使用 rubeus,可以使用 rubeus.exe dump 命令导出目前所有票据。

image.png

image.png

当然,我们可以指定导出哪些票据,用法请学员们自行探索当作小练习。

至于将文本保存为 kirbi 文件,在Windows端,我们可以通过 powershell 命令 [System.IO.File]::WriteAllBytes("C:\windows\tasks\example.kirbi", [System.Convert]::FromBase64String("<ticket>")) 保存 kirbi 文件。在 Linux 端,我们可以通过命令 echo '<ticket>' | base64 -d > example.kirbi 实现。

image.png

ccache

在 Linux端,如果 Linux 主机上有活跃的会话,那么在 /tmp 目录下会产生该用户的凭证缓存文件,credential cache,即ccache文件,格式为 krb5cc_xxx,例如krb5cc_1394201122_MerMmG。ccache 文件中保存了该用户的票据信息,例如 TGT,TGS 等。在 Linux 域主机上,环境变量 KRB5CCNAME 指向了票据的地址,以获得域用户的上下文。我们也可以通过命令 export KRB5CCNAME=<ccache 文件地址> 来手动更改环境变量。

image.png

image.png

我们可以通过 impacket 将票据在 ccache 与 kirbi 形式中互相转换。

image.png

image.png

ccache 文件仅对应域用户以及 root 用户可读。如果作为活跃用户,我们可以通过 kinit 申请新的 TGT,以及通过 kvno [SPN] 申请新的 TGS。

 

keytab

keytab 文件包含 Kerberos 主体名称和凭证,例如NTLM哈希。我们可以使用脚本 (https://github.com/sosdave/KeyTabExtract) 从中提取凭据,提取出了 NTLM 或者 AES256 凭证,那么我们想要获得其他形式的票据自然不是难事。每台 linux 域计算机在 /etc/krb5.keytab 中都有其 keytab 文件,默认情况下可由 root 访问。

image.png

类似于 PTH,一些安全工具例如 impacket 同样支持 使用 keytab 进行认证。

image.png

 

在了解了以上几种凭证文件类型后,我们来讨论如何利用及导入票据。

 

Windows 端票据传递

在 Windows 端,我们主要可以使用 mimikatz 以及 rubeus 等工具来导入票据。

在 mimikatz 终端里,执行命令 kerberos::ptt <ticket 文件> 从而导入 .kirbi 格式票据。

image.png

或者使用 rubeus 的 rubeus.exe ptt /ticket:<base64编码的票据内容或者票据文件> 导入票据。

image.png

 

Linux 端票据传递

而在 Linux 端传递票据的话,我们先需要将 kirbi 文件转换为 ccache文件,然后设置 KRB5CCNAME 环境变量,之后就可以使用无密码票据认证了。

image.png