Skip to main content

DACL的利用

随着我们拿下越来越多的用户和主机,我们发现其中一些主体对其他域对象具有特定权限。例如,其中一个用户可以直接重置另一个用户的密码。 如果有意地利用这些权限,我们可以接管更多用户实现域内提权和横向移动。为了理解这种攻击,我们需要知道 DACL 的概念。在 AD 的上下文中,DACL 是访问控制条目 (ACE) 的列表,它指定允许或拒绝哪些用户或组访问特定资源,例如计算机、SMB 共享或用户帐户 . DACL 作为对象的属性存储,用于对对象实施访问控制。

DACL 中的每个 ACE 指定了授予或拒绝特定用户或组的访问权限以及适用于这些权限的权限。在我们的 Lab 种,med-factory 域中的用户 jason 可以在不知道 justin 当前密码的情况下重置 justin 的密码。我们可以在下图中看到 justin 上的 DACL。

image.png

从 DACL 来看,这个 ACE 明确指出 jason 可以重置 justin 的密码。除此之外,本 Lab 中还有着其他可利用的 DACL,我们可以通过利用这些配置不当或者沦陷用户/主机的 DACL 来扩大我们的访问范围。接下来,我们讨论一些比较经典的 DACL 利用。

ForceChangePassword

上文提到,med-factory 中的 Jason 对 justin 具有强制修改密码的权限。我们在 ADCS 的利用中见识到了,作为 ADCS Manager 分组中的 Justin,可以利用配置不当的 ADCS 实现域内提权。不过在那时,我们以白盒的视角去讨论 ADCS 的利用的。在黑盒的渗透下,如果我们拿下 jason,可以进而拿下 justin 以及整个 med-factory 域。

image.png

GenericAll

对象为用户


image.png

GenericWrite

对象为用户


image.png

对象为主机


image.png


更多

考虑到 DACL 利用的情景众多,本实验容纳不下所有的 DACL 利用的案例,大家可以参考 BloodHound 的官方文档 https://bloodhound.readthedocs.io/en/latest/data-analysis/edges.html 来查看特定 DACL 的具体的利用手段,甚至附上了 PowerView 或 Rubeus 的利用步骤与命令,十分实用。

以 WriteDacl 为例,文档分类讲解了对象是组、用户、主机时,利用的思路与步骤是怎样的。根据下图的文档截图,我们可以看到,如果对象是组,那么我们可以赋予当前用户添加成员的权限。如果对象是用户,那么赋予当前用户所有特权,这样,我们可以像 ForceChangePassword 的利用过程一样,修改目标用户的密码。如果对象是主机,同样赋予当前用户所有特权,然后可以阅读该主机的 LAPS 密码 (如果该主机启用了 LAPS),或者进行 RBCD 的利用从而获得远程代码执行。

image.png

作为一个小练习,请学员们完成如下表格,完成后可以当做自己的一个 Cheatsheet。

DACL 对象类型 利用思路 具体步骤
WriteDacl 用户





计算机

GenericAll 用户





计算机

GenericWrite 用户





计算机

ForceChangePassword 用户

WriteOwner 任意

AllExtendedRights 用户





计算机