windows protocol
搜索文档…
组策略

0x00 前言

这篇文章主要介绍组策略相关的一些内容

0x01 组策略基本介绍

组策略可以控制用户帐户和计算机帐户的工作环境。他提供了操作系统、应用程序和活动目录中用户设置的集中化管理和配置。有本机组策略和域的组策略。本机组策略用于计算机管理员统一管理本机以及所有用户,域内的组策略用于域管统一管理域内的所有计算机以及域用户。 在本文中侧重点讲的是域内的组策略。
打开组策略管理(gpms.msc),可以看到在域林里面有一条条的组策略。如下图,我们可以看到Default Domain PolicyDefault Domain Controller Policy财务桌面壁纸三条组策略。其中前两条是默认的组策略,财务桌面壁纸那条组策略是我自己加进去。
image-20200410144349818
对于组策略,我们一般关心两点。
  • 这条组策略链接到哪里。
  • 这条组策略的内容是啥。
Default Domain Policy为例。

1. 组策略链接

image-20200410144416703
在右边的作用域里面,我们可以看到他链接到test.local整个域,也就是说在test.local域内的所有计算机,用户都会受到这条组策略的影响。链接的位置可以是站点,域,以及OU(特别注意,这里没有组,只有OU,至于为啥,可以返回去看组和OU的区别)。又比如说财务桌面壁纸这条组策略。他就链接到财务这个OU。
image-20200410144516378
加入财务这个OU的所有计算机以及用户会受到影响。

2. 组策略内容

image-20200410151038040
我们右键保存报告,可以将组策略的内容导出为htlm。对于Default Domain Policy这条组策略,
image-20200410151230668
我们可以看到他配置的一些内容,设置密码最长期限为42天,最短密码长度为7个字符等。如果我们想配置这条组策略的内容,在组策略条目上右键编辑,我们就可以打开组策略编辑器。
image-20200410144703620
我们可以看到左边分为计算机配置以及用户配置。在里面的配置分别作用于计算机和用户。
在配置底下又分为策略以及首选项。首选项是Windows Server 2008发布后用来对GPO中的组策略提供额外的功能。策略和首选项的不同之处就在于强制性。策略是受管理的、强制实施的。而组策略首选项则是不受管理的、非强制性的。
对于很多系统设置来说,管理员既可以通过策略设置来实现,也可以通过策略首选项来实现,二者有相当一部分的重叠。
大家自已自己每个条目点一点,看看组策略具体能干嘛,在后面,我们会罗列一些渗透中用于横向或者后门的条目。

3. 组策略更新

默认情况下,客户端更新组策略的方式主要有
  1. 1.
    后台轮询,查看sysvol 里面GPT.ini,如果版本高于本地保存的组策略版本,客户端将会更新本地的组策略。轮询的时间是,默认情况下,计算机组策略会在后台每隔 90 分钟更新一次,并将时间作 0 到 30 分钟的随机调整。域控制器上的组策略会每隔 5 分钟更新一次。
  2. 2.
    计算机开机,用户登录时,查看sysvol 里面GPT.ini,如果版本高于本地保存的组策略版本,客户端将会更新本地的组策略。
  3. 3.
    客户端强制更新,执行gupdate /force
    域控强制客户端更新,执行 Invoke-GPUpdate -Computer "TEST\win10" -Target "User"
    如果域控制器强制客户端刷新组策略,那么不会比较域共享目录中组策略的版本

0x02 组策略高级介绍

1. 组策略存储

每条组策略,可以看做是存储在域级别的一个虚拟对象。我们叫做GPO,每个GPO有唯一标志。用来标识每条组策略(或者说每个GPO)
image-20200410153230340
那GPO 在域内的怎么存储的,他分为两个部分。
  • GPC
  • GPT
GPC 位于LDAP中,CN=Policies,CN=System,<BaseDn>底下,每个条目对应一个GPC。
image-20200410153948374
其中包含GPO属性,例如版本信息,GPO状态和其他组件设置
GPC 里面的属性gPCFileSysPath链接到GPT里面。GPT 是是一个文件系统文件夹,其中包含由.adm文件,安全设置,脚本文件以及有关可用于安装的应用程序的信息指定的策略数据。GPT位于域\Policies子文件夹中的SysVol中。基本上组策略的配制信息都位于GPT里面。
Default Domain Policy为例。他对应的GPC是CN={31B2F340-016D-11D2-945F-00C04FB984F9},CN=Policies,CN=System,DC=test,DC=local,displayNameDefault Domain Policy
image-20200410154717388
通过gPCFileSysPath关联到GPT\\test.local\sysvol\test.local\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}这个文件夹。GPT里面包含了一些策略数据。
image-20200410154956079
那在LDAP 是如何体现链接呢。
在域,站点,OU上面有个属性gPLink来标识链接到这里的组策略
image-20200414171349070
image-20200414171440480
在域,站点,OU上面同样还有个属性gPOptions来标识组策略是否会继承。
image-20200415095424791
举个例子,财务这个OU位于test.local 这个域内, Default Domain Policy 这条组策略链接到 test.local 这个域,所以默认情况底下,OU 会继承,这条组策略也同时会作用于财务这个OU,如果我在财务这边选择组织继承,就不会作用域财务这个OU,在LDAP上下的体现就是财务这个OU的属性
image-20200415095342828

2. WMI筛选

在之前,我们通过链接,将组策略链接到站点,工作组,OU。然后作用于链接对象的计算机,用户。但是如果有新的需求,我要作用于部分计算机,用户。比如说作用于所有WIN7 的电脑,这个时候微软提供了另外一项技术,叫WMI筛选。他复用了windows 本身的wmic 技术,每一个建立的WMI筛选器都可以连接到不同的现有组策略对象,一旦产生关联与应用之后,只要组织单位中的目标计算机符合WMI筛选器所设置的条件,那么这项组策略对象将会生效。
举个例子,作用于所有大于Windows 8.1的电脑。
1
Select BuildNumber from Win32_OperatingSystem WHERE BuildNumber >= 9200
Copied!

0x03 组策略相关的ACL

我们主要关心以下权限。有个需要注意的是,底下有一些权限是对某个属性的WriteProperty,但是 不管啥属性的WriteProperty,拥有(WriteDacl,WriteOwner,GenericWrite,GenericAll,Full Control)这 些权限,都包括了对某个属性的WriteProperty。为了方便阐述,底下就只写对某个属性的 WriteProperty。不列举出这些通用权限。建议大家对域内的ACL有一定了解,再来看这一小节

1. 创建GPO的权限

创建GPO的权限其实就是对CN=Policies,CN=System,<BaseDn>具备CreateChild的权限。
我们可以用adfind 查询域内具备创建GPO的权限。
1
adfind -b CN=Policies,CN=System,DC=test,DC=local -sddl+++ -s base -sdna -sddlfilter ;;"CR CHILD";;;
Copied!
image-20200414170108360

2. GPO链接的权限。

之前我们说到在域,站点,OU上面有个属性gPLink来标识链接到这里的组策略。所以我们只要遍历所有的域,站点,OU 上面的所有ACE,如果有对gPLink属性或者gPOpptions属性的修改权限,就可以修改这个这个域/站点/OU链接的OU。这里使用adfind 来演示枚举,其他工具可以自行考证。
  1. 1.
    枚举域内的所有站点,OU
  2. 2.
    遍历站点
Configuration Naming Contex中的过滤规则是(objectCategory=organizationalUnit)
1
adfind -b CN=Configuration,DC=test,DC=local -f "(objectCategory=site)" -s subtree -dn
2
adfind -sites -f "(objectCategory=site)" -dn
Copied!
  • 遍历OU
    以adfind 以例
过滤规则是(objectCategory=organizationalUnit)
1
adfind -b DC=test,DC=local -f "(objectCategory=organizationalUnit)" dn
Copied!
  1. 1.
    遍历所有的域,站点,OU 上面的所有ACE。这里遍历财务这个OU
对gLink或者gPOpptions的WriteProperty权限
1
adfind -b OU=财务,DC=test,DC=local -sddl+++ -s base -sdna -sddlfilter ;;;gPlink;;
2
adfind -b OU=财务,DC=test,DC=local -sddl+++ -s base -sdna -sddlfilter ;;;gPOpptions;;
Copied!

3. 修改现有的GPO的权限

修改现有GPO的权限。
我们主要关心两个
  • GPC 链接到GPT 的权限
  • 修改GPT的权限
上面提到过,GPC 与 GPT之间的关联是GPC有个属性gPCFileSysPath关联到GPT。
image-20200415105156017
我们只需要查找对这个属性的WriteProperty就行。
1
adfind -b CN=Policies,CN=System,DC=test,DC=local nTSecurityDescriptor -sddl+++ -s subtree -sdna -sddlfilter ;;;gPCFileSysPath;; -recmute
Copied!
修改GPT的权限,由于GPT 是文件夹的形式,并不在LDAP里面,因此我们得使用一款能查看文件夹ACL的工具,这里我使用系统自带的icacls。
1
icacls \\test.local\sysvol\test.local\scripts\*
2
icacls \\test.local\sysvol\test.local\policies\*
Copied!
image-20200415110930015
我们看到小明对31B2F340-016D-11D2-945F-00C04FB984F9这条组策略的GPT 具有完全控制的权限,前面我们又说到基本上组策略的配制信息都位于GPT里面。因为可以修改GPT,就等同于可以随意修改组策略配置。
可以使用adfind 查看这条组策略的名字
1
adfind -b CN={31B2F340-016D-11D2-945F-00C04FB984F9},CN=Policies,CN=System,DC=test,DC=local -s base displayName
Copied!

0x04 SYSVOL 漏洞(MS14-025)

在早期的版本,某些组策略首选项可以存储加密过的密码,加密方式为AES 256,虽然目前AES 256很难被攻破,但是微软选择公开了私钥:)。
image-20200415100741776
主要存在于以下组策略首选项中
  • 驱动器映射
  • 本地用户和组
  • 计划任务
  • 服务
  • 数据源
如果想复现这个漏洞,在SERVER 2008R2底下。以计划任务为例
image-20200415101923899
然后我们在普通成员机器上就可以通过查看GPT看到加密后的密码
image-20200415102141448
进行解密,解密脚本网上挺多的,大家可以自行查找
image-20200415112939966
在实际渗透,我们可以通过以下命令来快速搜索
1
findstr /S cpassword \\test.org\sysvol\*.xml
Copied!

0x05 利用组策略扩展

在拿到域控之后,有时候可能网络ACL 到达不了目标电脑,可以通过组策略进行横向。下面列举几种横向的方法。

1. 在“软件安装”下推出.msi

image-20200413122553325

2. 推出特定的启动脚本

image-20200413122651991

3. 计划任务

image-20200413124430704

0x06 组策略后门的一些思路

组策略很适合用于留后门,下面列举几种留后门的方式

1. 将域帐户添加到本地管理员/ RDP组,

image-20200413124529048

2. 添加特权

可以通过组策略给某个用户授予特权。 我们用的比较多的有SeEnableDelegationPrivilege特权,详情可以看这个地方 SeEnableDelegationPrivilege

3. 降级凭据保护

image-20200413160253061

4. 甚至更改现有的安全策略以启用明文密码提取。

微软很早就更新了补丁来防止获取高版本windows的明文密码,但是可以修改注册表... 使 \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest下的UseLogonCredentiald的键值为1
image-20200414190236767

5. 组策略ACL 后门

在我们之前组策略相关的ACL里面有提到三种特权
  1. 1.
    创建GPO的权限
  2. 2.
    GPO链接OU的权限。
  3. 3.
    修改现有的GPO的权限
除了在渗透中可以用于发现域内的安全隐患,也可以用于留后门,比如赋予某个用户创建GPO ,以及链接到域的权限,那么这个用户其实就等效于域管了。或者赋予某个用户拥有对某条GPO修改的权限,比如拥有修改Default Domain Policy的权限,那么这个用户就可以授予别的用户SeEnableDelegationPrivilege的权限,这个后门相对比较灵活,大家可以自己扩展。

0x08 引用

最近更新 1yr ago