返回
顶部

references:

前言

本文介绍一种Windows Active Directory持久化方式,这个手法很早以前就有了,在此记录一下

AdminSDHolder

AdminSDHolder是AD中的一个对象,它位于cn=AdminSDHolder,cn=System,DC=domain,dc=name

image-20211021215257762

该对象的作用是保证受保护对象的ACL不会被篡改

这个所谓受保护的对象,是硬编码到二进制文件中的,也就是说,当你的AD域创建完成后,受保护的对象就确定下来了

下面有一张表格描述了微软的各个版本的Server中默认的受保护对象(用户组和账户)

1634882959755

那么它是如何保护这些对象的ACL不被篡改呢?

SD Propagation(安全描述符传播)

持有PDC FSMO角色的DC默认情况下每隔1小时会执行一次SD Propagation任务,此任务的大致行为就是将所有受保护对象的ACL和AdminSDHolder的ACL进行对比,如果两者有差异,就是用AdminSDHolder的ACL覆盖掉受保护对象的ACL

下图为AdminSDHolder默认的ACL:

1634883844700

Domain Admins组作为受保护的对象,其ACL应该和AdminSDHolder保持一致

1634883970687

我们对AdminSDHolder的ACL稍微作一下修改以便更直观地理解AdminSDHolder的工作机制

我们向AdminSDHolder的ACL中添加一个用户,并赋予它特殊权限

1634884131573

等待PDC的下一次SD Propagation任务完成之后,我们再观察一下Domain Admins用户组的ACL是否发生了改变

1634884281305

可以看到,sdtest用户此时已经拥有了对Domain Admins的特殊权限

利用

通过上面的解释,我们可以通过修改AdminSDHolder的ACL来达到控制Domain Admins用户组的目的

上面我们只赋予了sdtest用户特殊权限,如果我们给该用户赋予写入权限,那么等下一次SD Propagation完成之后,sdtest用户将拥有修改Domain Admins组成员的权限

1634884662582

1634884743532

1634884702145

但是默认一个小时才进行ACL的检查与覆盖,貌似有点太久了,有没有方法可以强制进行SD Propagation呢?

答案是肯定的

根据微软的官方文档,使用LDAP(rootDSE,DN为空)连接到持有PDC FSMO角色的DC上,然后修改runProtectAdminGroupsTask属性的值为1,即可触发SD propagation

erftghj

对于Windows 2008 R2及以上的版本,使用上图所示方法即可

根据文档,早于Windows 2008 R2的版本需要通过修改fixupInheritance属性来触发SD propagation,参考下图所示方法

1634888737789

后记

上面提到的操作都是基于GUI的,最后肯定要武器化为命令行工具,这一部分的实现不方便放出来,XDM自行摸索吧,也不难

上面触发SD Propagation的工具,可以在此处下载