基本介绍
在Windows 2000之后微软引入了一个选项,用户可以通过Kerberos在一个系统上进行身份验证,并在另一个系统上工作,这种技术主要通过委派机制来实现,无约束委派通过TGT转发技术实现,而这也是我们将本文中讨论的内容
委派介绍
Kerberos委派使服务能够模拟计算机或用户以便使用用户的特权和权限参与第二个服务,为什么委派是必要的经典例证呢,例如:当用户使用Kerberos或其他协议向web服务器进行身份验证时,服务器希望与SQL后端或文件服务器进行交互
Kerberos委托的类型:
- 不受限制的委托
- 受约束的委托
- RBCD(基于资源的受限委派)
SPN介绍
Kerberos身份验证使用SPN将服务实例与服务登录帐户相关联,这允许客户端应用程序请求服务对帐户进行身份验证,即使客户端没有帐户名
无约束委派
该功能最初出现在Windows Server 2000中,但为了向后兼容它仍然存在,如果用户请求在具有不受约束的委托的服务器集上的服务的服务票据时,该服务器将提取用户的TGT并将其缓存在其内存中以备后用,这意味着服务器可以冒充该用户访问域中的任何资源
在计算机帐户上,管理员可以为不受限制的委派设置以下属性
- AD用户和计算机->计算机->信任此计算机来委派任何服务
无约束委托的主要特征是:
- 通常该权限授予运行IIS和MSSQL等服务的计算机,因为这些计算机通常需要一些到其他资源的后端连接
- 当被授予委派权限时这些计算机会请求用户的TGT并将它们存储在缓存中
- 这个TGT可以代表经过身份验证的用户访问后端资源
- 代理系统可以使用这个TGT请求访问域中的任何资源
攻击者可以通过使用用户委派TGT请求任何域服务(SPN)的TGS来滥用不受限制的委派
TGT提取
很明显我们需要在启用了委托的机器上运行我们的攻击,所以我们假设攻击者已经入侵了一台这样的机器
- 假设1:攻击者破坏了运行IIS的DC1$系统的Kerberos身份验证
- 假设2:攻击者有权访问加入域系统(这里是在该系统上运行的powershell窗口)
- 用户:管理员
在现实生活中您可能无法直接访问DC系统,为了简单起见我们在DC安装了IIS,这样您就可以了解要点了,下面继续我们的提取,首先我们需要获取那些支持无约束委托的系统,这可以通过使用PowerShell和AD模块来实现
代码语言:javascript复制Get-ADComputer -Filter {TrustedForDelegation -eq $true} -Properties trustedfordelegation,serviceprincipalname,description
使用powerview也可以达到同样的效果,powerview脚本是PowerSploit框架的一部分,PowerSploit框架是使用PowerShell为攻击性安全而创建的,你能找到它这里
https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1
一旦AD系统遭到破坏,您就可以安装和使用powerview
代码语言:javascript复制Import-Module .powerview.ps1
Get-NetComputer -Unconstrained
现在在目标系统上我们需要在dc1系统上以监控模式运行Rubeus,此后每当用户连接/验证到dc1时,Rubeus将转储该用户的TGT
代码语言:javascript复制rubeus.exe monitor /monitorinterval:10 /targetuser:dc1$ /nowrap
现在让我们等待正版用户连接到运行IIS服务的dc1$,为简单起见让我们使用IWR模块手动完成
代码语言:javascript复制Invoke-WebRequest http://dc1.offense.local -UseDefaultCredentials -UseBasicParsing
如您所见Rubeus现在我们已经从用户IGNITEAdministrator获取了一个新的票证授予票证(TGT)
现在您可以使用这个TGT通过请求对资源的TGS来请求对任何资源的访问,为此您可以使用Rubeus asktgs
文末小结
本文演示了一种称为无约束委托的委托技术,顾名思义对于拥有委托权限的系统如何使用用户的身份验证信息没有限制,安全漏洞使得微软引入了受约束的委托,您将在下一篇文章中读到更多相关内容,感谢阅读