DACL的利用
随着我们拿下越来越多的用户和主机,我们发现其中一些主体对其他域对象具有特定权限。例如,其中一个用户可以直接重置另一个用户的密码。 如果有意地利用这些权限,我们可以接管更多用户实现域内提权和横向移动。为了理解这种攻击,我们需要知道 DACL 的概念。在 AD 的上下文中,DACL 是访问控制条目 (ACE) 的列表,它指定允许或拒绝哪些用户或组访问特定资源,例如计算机、SMB 共享或用户帐户 . DACL 作为对象的属性存储,用于对对象实施访问控制。
DACL 中的每个 ACE 指定了授予或拒绝特定用户或组的访问权限以及适用于这些权限的权限。在我们的 Lab 种,med-factory 域中的用户 jason 可以在不知道 justin 当前密码的情况下重置 justin 的密码。我们可以在下图中看到 justin 上的 DACL。
从 DACL 来看,这个 ACE 明确指出 jason 可以重置 justin 的密码。除此之外,本 Lab 中还有着其他可利用的 DACL,我们可以通过利用这些配置不当或者沦陷用户/主机的 DACL 来扩大我们的访问范围。接下来,我们讨论一些比较经典的 DACL 利用。
ForceChangePassword
GenericAll
对象为用户
GenericWrite
对象为用户
对象为主机
更多
考虑到 DACL 利用的情景众多,本实验容纳不下所有的 DACL 利用的案例,大家可以参考 BloodHound 的官方文档 https://bloodhound.readthedocs.io/en/latest/data-analysis/edges.html 来查看特定 DACL 的具体的利用手段,甚至附上了 PowerView 或 Rubeus 的利用步骤与命令,十分实用。
以 WriteDacl 为例,文档分类讲解了对象是组、用户、主机时,利用的思路与步骤是怎样的。根据下图的文档截图,我们可以看到,如果对象是组,那么我们可以赋予当前用户添加成员的权限。如果对象是用户,那么赋予当前用户所有特权,这样,我们可以像 ForceChangePassword 的利用过程一样,修改目标用户的密码。如果对象是主机,同样赋予当前用户所有特权,然后可以阅读该主机的 LAPS 密码 (如果该主机启用了 LAPS),或者进行 RBCD 的利用从而获得远程代码执行。