PowerView 渗透测试工具使用方法Part.2

Active Directory访问控制是我和我的同事们在过去一年以来一直非常感兴趣的事情。到目前为止,我们发布了BloodHound的 ACL攻击路径更新的功能,以及@ _wald0和我发现了Active Directory DACL 后门(白皮书在这里)。这篇文章将涵盖在外部域中的GPO DACL枚举。

为什么要关心这个问题呢?因为,如果你有了编辑GPO的权限,那么你就可以控制应用了该GPO的任何用户或计算机。如果你的目标是明确的找出GPO所应用的对象,那么请 参阅“PowerView-3.0-tricks”中的这一行代码。

情景三:在一个外部域中枚举GPO编辑权限

解决方案

解释说明

然后,我们实现一个自定义过滤器? {…} (Where-Object),只返回与正则表达式‘^S-1-5-.*-[1-9]d$’匹配的主体(具有权限的对象)的SecurityIdentifier。这只会返回受信主体的安全标识符的相对标识符(RID)大于-1000及其以上的内容,也就是不是类似于“域管理员”内置的那些对象。这个过滤器的目的是为了减少噪声,试图列举非标准域用户的更多“有趣”的错误配置。过滤器的第二部分与ACE中的权限相匹配,表示某种类型的控制关系(通用的所有权限,更改所有者权限等),即某种类型的“对象接管”原语,允许入侵目标对象。有关这种类型的关系或攻击的更多信息,请查看@ wald0's和我的一起发布的白皮书——An ACE Up the Sleeve。

从这里开始,为了给操作人员添加更多的上下文信息,我们通过% {…} (ForEach-Object)处理管道上的每个ACE结果,并通过使用ACE 将SecurityIdentifier 解析为可分辨的名称,解析名称使用的是PowerView的Convert-ADName ,并设置 -OutputType 为DN(专有名称)。我们通过使用New-Object PSObject在管道中间创建一个新的自定义对象,其中包含了我们关心的信息,并将所有内容都传递给fl (Format-List)便于输出显示。

现在你就可以知道哪些帐户可以编辑这些有趣的GPO,你可以对这些帐户执行有针对性的攻击,并且可以使用这些账户来推送恶意的GPO。

下面的内容是 “ PowerView PowerUsage 使用方法 ”系列文章中的第四个场景的介绍。

在信任关系域环境中进行渗透测试的一种思路我已经在前面做了简要的介绍,就是在域对象上枚举DACL/ACE,主体(即拥有用户或组的指定对象的权限)与目标对象位于不同的域中。如上所述,Active Directory对象的大多数ntSecurityDescriptor 属性是:(1)任何域认证用户都可访问,(2)在全局编录中复制。这意味着你可以从当前的受信任域的上下文中查询信任域中的所有对象的DACL,并过滤外部安全主体在你列举的对象上具有给定权限的任何ACE条目。

情景四:查找交叉域的ACE

解决方案

Get-DomainObjectAcl -Domain 'dev.testlab.local' -LDAPFilter '(objectCategory=groupPolicyContainer)' -ResolveGUIDs | ? {

($_.SecurityIdentifier -match '^S-1-5-.*-[1-9]\d$') -and `

($_.ActiveDirectoryRights -match 'WriteProperty|GenericAll|GenericWrite|WriteDacl|WriteOwner')

} | % {

$PrincipalDN = Convert-ADName $_.SecurityIdentifier -OutputType DN

New-Object PSObject -Property @{'ObjectDN'=$_.ObjectDN ; 'PrincipalSID'=$_.SecurityIdentifier; 'PrincipalDN'=$PrincipalDN }

} | fl

解释说明

上述代码片段看起来非常简单。在我们做其他事情之前,我们用PowerView的Get-DomainSid获取外部域的SID(安全标识符)。这样我们可以过滤出ACE信息,其中受信主体(具有权限的对象)的SecurityIdentifier与枚举对象位于同一个域中。这样我们稍后就可以过滤这些交叉信任的ACE关系。

接下来,我们实现一个自定义过滤器?{...} (Where-Object),该过滤器有以下要求:

· 首先,我们需要确保AceType指定了一个为ALLOW的条目。

· 其次,我们再次使用SecurityIdentifier中的 ‘^S-1-5-.*-[1-9]\d$’正则表达式返回只有受信主体的安全标识符的相对标识符(RID)大于等于 -1000 的结果 。

· 第三,通过对先前枚举的外部域SID执行条件为假的正则表达式匹配,这样我们就可以从与对象相同的域中过滤出主体。

· 最后,最后一个规则与ACE中的权限相匹配,这些权限指示某种类型的控制关系(通用所有权限,更改所有者的权限或其他“对象接管”原语),从而使目标对象可以被攻击。有关这种关系或攻击类型的更多信息,请查看 @ _wald0和我在Black Hat 2017 上发布的 “ ACE 套装 ”白皮书。

现在,我们通过%{...} (ForEach-Object) 处理每个ACE结果。与前面提到的提取出特定的属性并创建新的对象相反,现在我们使用PowerView 的 Convert-ADName并将输出类型-OutputType 设置为DN(专有名称)来解析ACE的SecurityIdentifier 为一个专有名称并添加为在管道符上返回的ACE对象的新属性。

在跨越某种类型的信任边界的外部域中枚举ACE

注意:这可能需要一段时间才能运行,因为这个过程会枚举和解析大量对象的安全描述符信息。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171211A0O8XR00?refer=cp_1026

扫码关注云+社区