Kerberos认证

Kerberos认证

认证流程:

image-20250924160840930

其中包含三次加密的过程:

注意:AS_REP包含两部分Login Session Key和 TGT

1.在AS_REP阶段,用用户密码的哈希值加密用户与TGS通信的会话密钥,然后发送 Login Session Key

2.在AS_REP阶段,AS会生成TGT (包含用户身份、TGS Session Key、有效期等),用DC的krbtgt账户哈希加密后发送给用户

3.在TGS_REP阶段,用户用TGT向票据授予服务器(TGS)申请服务票据(ST)时,TGS 会生成 “用户与目标服务通信的会话密钥(Service Session Key)”,并用目标服务的账户哈希加密成ST后返回给用户

攻击手法:

1.用户名枚举: 用户存在与不存在进行AS的预认证时回显不一样,所有可以枚举出有效的域内用户名

2.AS_REP Roasting攻击:当被攻击用户设置了“不需要Kerberos预身份认证”时,AS_REP可以伪造用户任意的请求票据,然后AS返回的Login Session Key使用该用户密码的哈希加密的,即可枚举爆破明文密码

3.黄金票据攻击: TGT都是利用krbtgt账户的哈希加密后生成的,如果我们能拿到krbtgt的哈希值,即可伪造任意用户的票据去向TGS发起请求

4.kerberoast攻击:针对的是注册了SPN的域用户,先利用一个低权限的域用户去枚举注册了SPN的用户,然后请求ST服务票据,ST是用该服务账户的哈希加密的,再去枚举爆破用户的哈希

5.白银票据攻击:如果未配置PAC,就可以伪造ST来访问服务

6.委派:域内用户权限委派给服务账户,使得服务账号能以用户的权限在域内开展活动,在域内只有机器账户和服务账户才有委派属性,域用户可以通过注册SPN也能成为服务账号,主要攻击手法有非约束委派攻击,约束委派攻击,基于资源委派攻击

7.非约束委派攻击:服务账号可以获取被委派用户的TGT,并将TGT缓存到LSASS进程中,从而服务账号可使用该TGT, 模拟该用户访问任意服务。非约束委派的设置需要SeEnableDelegation特权

d5dd4d70d45fd285ae84097476be64e2

配置了非约束性委派属性的机器账号的userAccountControl 属性有个Flag位 WORKSTATION_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION,其对应的数是0x81000=528384。
配置了非约束性委派属性的服务账号的userAccountControl 属性有个Flag位 NORMAL_ACCOUNT | TRUSTED_FOR_DELEGATION, 其对应的数是0x80200=524800。

可以利用这个特性去寻找非约束委派的账户

从攻击角度来说:如果攻击者拿到了一台配置了非约束委派的机器权限,可以诱导管理员来访问该机器,然后可以得到管理员的TGT,从而模拟管理员访问任意服务,相当于拿下了整个域环境。

adfind查询非约束委派

非约束委派的主机:

1
2
AdFind.exe -b "DC=redteam,DC=club" -f "(&(samAccountType=805306369)
(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName

非约束委派的用户:

1
2
AdFind.exe -b "DC=redteam,DC=club" -f "(&(samAccountType=805306368)
(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName

诱导管理员来访问是比较困难的,还可以利用Spooler打印机服务让DC主动连接被控的服务,从而拿到域管理员的TGT,从而dcsync拿哈希接管整个域

8.约束委派攻击:相比于约束委派,严格限制了服务账号可以代表用户访问的服务,这种限制通过 AD 账号的 msDS-AllowedToDelegateTo 属性实现

原理:

f665a3233aac4ab5203126dba08c1c36

user访问serviceA,向DC发起kerberos认证,域控返回user的TGT和ST1票据,user使用ST1票据对
serviceA进行访问如果配置了serviceA到serviceB的约束委派,则serviceA能使用S4U2Proxy协议将用户发给自己的可转发的ST1票据以用户的身份发给DC。域控返回serviceA一个用来访问serviceB的ST2票据,这样serviceA就能以用户的身份对serviceB发起访问

攻击原理:

由于服务用户 只能获取某个用户(或主机)的服务的ST1而非TGT , 所以只能模拟用户访问特定的服务 ,但是如果能拿到约束委派用户(或主机)的密码或者Hash,就可以伪造S4U的请求,伪装成服务用户以任意用户的权限申请访问指定服务的ST2

image-20251007193602127

攻击过程:

使用命令查询约束用户(即可以被我们恶意访问的服务)

1
2
AdFind.exe -b "DC=redteam,DC=club" -f "(&(samAccountType=805306368)(msds-
allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto

然后用服务账号的ntml或者密码去请求tgt

1
tgt::ask /user:websec /domain:redteam.club /NTLM:XXXXX

再利用tgt去伪造S4U请求代域管用户发起访问的请求获取st(这一步是利用kekeo或者Rubeus工具实现)

1
2
tgs::s4u /tgt:TGT_websec@REDTEAM.CLUB_krbtgt~redteam.club@REDTEAM.CLUB.kirbi
/user:Administrator@reteam.club /service:cifs/ad1.redteam.club

最后把st导入内存就可以访问该服务了

基于资源的约束委派:

与传统的约束委派相比,它不再需要域管理员权限去设置相关属性。RBCD把设置委派的权限赋予了机器自身,既机器自己可以决定谁可以被委派来控制我,所以一般自己创造一个完全可控的机器用户,再去打约束委派

GenericWrite,具有这个权限就可以自己配置可控机器用户到目标用户的委派。

内网渗透-委派攻击详解-先知社区


Kerberos认证
http://fearless-123.github.io/2025/09/24/渗透/kerberos认证/
作者
fearless123
发布于
2025年9月24日
许可协议