# 小 bb

去年 10 月份左右写的文章,之前给了朋友发公众号,一直忘记同步到博客 - -,今天闲暇之余,顺便给贴回来。不过好久没搞 windwos 的学习和研究了。可恶。

# 什么是组策略?

组策略(Group Policy)是 Microsoft Windows 系统管理员为用户和计算机定义并控制程序、网络资源及操作系统行为的主要工具。通过使用组策略可以设置各种软件、计算机和用户策略。

使用组策略可以给同工作组的计算机或用户强加一套统一的标准,如用户的桌面环境,计算机启动,关机注销等所执行的脚本文件、软件分发、安全设置等。

组策略在部分意义上是控制用户可以或不能在计算机上做什么,例如:施行密码复杂性策略避免用户选择过于简单的密码,允许或阻止身份不明的用户从远程计算机连接到网络共享,阻止访问 Windows 任务管理器或限制访问特定文件夹。这样一套配置被称为组策略对象(Group Policy Object,GPO),即相对于组策略而言,实质的设置就是对象。

更详细的解释则是组策略的配置存储于组策略对象中,组策略对象(GPO)由两部分组成,分别是组策略容器(GPC)和组策略模板(GPT),GPT 是具体的配置模板,包含实际的配置文件,GPC 是组织 GPT 的一种容器,可以将其视作组织管理具体配置的容器。

# 组策略执行顺序及继承原则

默认情况下,Microsoft Windows 每 90 分钟刷新一次组策略,随机偏移 30 分钟。在域控制器上,Microsoft Windows 每隔 5 分钟刷新一次。在刷新时,它会发现、获取和应用所有适用这台计算机和已登录用户的组策略对象。(即在域中,每隔 5 分钟就重新刷新组策略)。从 Windows XP 开始,用户可以从命令行提示符使用 gpupdate 命令手动启动组策略刷新。

根据作用范围不同的组策略可以划分为多种,并且他们拥有自己的执行顺序和继承原则。

# 执行顺序

每台运行 Windows 系统的计算机都有本地组策略,如果计算机在工作组环境下,将只应用本地组策略。如果计算机加入域,则除了受到本地组策略的影响,还可能会受到站点(简单的理解就是域中的工作组,https://blog.51cto.com/guozhengyuan/1349009),域和 oU 的组策略影响。对于这些在不同位置设置的组策略总体上,组策略按如下顺序应用: (如果策略有冲突,则后应用的生效)
1、首先应用本地组策略。
2、如果有站点组策略,则应用之。
3、然后应用域组策略。
4、如果计算机或用户属于某个 OU, 则应用 OU 上的组策略。
5、如果计算机或用户属于某个 OU 的子 OU, 则应用子 OU 上的组策略一
6、如果同个容器下链接了多个组策略对象,则按照链接顺序逐个应用。

因为域控的本地组策略是 OU 策略,所以它会覆盖域策略的设定,最终生效的是 OU 上的策略。
(即如果我们在域控的本地组策略设置了密码复杂度要求,然后又在域组策略上禁止了密码复杂度要求。
那么最终起效果的将会是域控的本地策略。)

常见的域下,我们一般只有本地组策略和域组策略。因此当他们冲突时,就是域策略起效。

# 继承关系

组策略设置内部是一个分层结构,父传子、子传孙,以此类推,这被称为 “继承”。它可以控制阻止或施行策略应用到每个层级。如果高级别的管理员创建了一个具有继承性的策略,而低层级的管理员策略与此相悖,此策略仍将生效。
在组策略偏好设置已配置并且同等的组策略设置已配置时,组策略设置将会优先。

# 过滤

利用 WMI 过滤器可以允许管理员只应用组策略到特定情况,例如特定型号、内存、已安装软件或任何 WMI 可查询条件的特定情况的计算机。

# 本地组策略

实际利用中,本地组策略的可用性比较小,基本只用于权限维持。

本地组策略(Local Group Policy,缩写 LGP 或 LocalGPO)是组策略的基础版本,它面向独立且非域的计算机。LGP 允许本地组策略管理单个用户和组,并允许使用 “GPO Packs” 在独立计算机之间备份、导入和导出组策略 —— 组策略容器包含导入策略到目标计算机的所需文件。

使用命令 gpedit.msc 打开

image-20220427093323888

如图,可以看到,在 LGP 中存在针对计算机和用户的策略。这里若使用计算机配置来做脚本的话,则是以 system 权限来启动的,用户设置则是以当前登录用户权限启动。

image-20220427093335471

# 利用本地组策略做权限维持

从这里我们可以看到存在脚本和 powershell 脚本的形式来
这里我们做了以下测试,发现,文件可以不在 C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup 目录下,只需要指定路径添加脚本即可。

image-20220427093356052

image-20220427093400337

然后是 powershell 形式的 (只能引用 ps1 脚本,不推荐使用,因为会被 defend 杀,我这里自己的 ps 是免杀的情况下也被拦截)

image-20220427093405743

# 域组策略介绍

顾名思义啊,就是在域中的组策略。通过它能方便统一的对域内主机和用户进行统一的管理。
但是在介绍域组策略时,先介绍一些概念:

# 什么是 OU(组织单位)

OU 是用户、组和计算机的容器对象,它提供了一个通过链接组策略对象 (GPO) 来委托管理权限和管理的框架。
创建 OU 有多个原因:1. 可以通过组策略对象 (GPO) 集中进行管理 2. 可以在 OU 上分配管理权限给其他用户来进行委派。

简单的理解就是:域中的对象的集合,某台计算机或者某台计算机上的某个用户是属于这个组织单位的。我们将他们加到同一个 OU 中,就能对其进行统一的管控。这里一般是利用 GPO (组策略对象,即具体的组策略规则) 来管控的或者进行委派等操作。

前面讲了,在安装域后,域控上会默认创建一个 Domain Controllers 的组织单位,里面只含有域控。

image-20220427093432520

# 什么是容器(泛型容器)

从上图中,我们可以看到,活动目录中,不仅存在 OU 还有容器,而 OU 和容器之间的主要区别在于管理功能。容器的管理功能有限。例如,不能将 GPO 直接应用于容器。
一句话总结就是:弱化版的 OU。

内置容器:存放默认组

image-20220427093459459

计算机容器:域中的机器。

image-20220427093507862

# 组策略容器(GPC)

前面讲了组策略对象(GPO)由组策略容器(GPC)和组策略模板组成(GPT)

活动目录以容器的概念来组织和管理策略,组策略容器存储了每一个组策略详细的基本信息,如策略名称、标识组策略的 GUID、组策略链接到的层级(即作用的对象)、策略模板的具体路径、策略应用的筛选过滤等,客户端可以从组策略容器中获取到关于该策略的所有元信息以及具体配置路径。
组策略容器位于 LDAP 数据库中的 “CN=Policies, CN=System, DC=< 域名>, DC=com” ,该节点下是以 GUID 命名的各个组策略容器
通过 adsi 编辑器,然后连接到默认上下文。

image-20220427093522643

组策略容器中,有几个重要的属性配置:

displayname:组策略的可读名称;

gPCFileSysPath:组策略模板(GPT)所在的具体路径,即客户端查找具体的配置信息的物理路径,位于域控的 SYSVOL 共享中;

gPCMachineExtensionNames:客户端执行该组策略所需的客户端扩展程序;

image-20220427093532539

值得注意的是,当某个对象应用了某个指定的组策略时,该对象的 gPLink 属性将包含指向该组策略容器的完整 DN

# 分号后的 0 或者 1 表示该条策略应用时是否强制,0 表示非强制,1 表示强制

[LDAP://CN={GPO_GUID}, CN=Policies, CN=System, DC=< 域名 >, DC=com;0/1]

如下图,域控制器这个 OU 对象应用了一个策略,而 glink 指向的就是这条策略 GPC。

image-20220427093540261

# 组策略模板(GPT)

组策略模板是组策略具体的策略配置信息
这里主要涉及两个文件夹:
SYSVOL 目录是 AD 域中的一个共享文件夹,该文件夹在 AD 活动目录安装时候被创建。通常用来存放组策略数据 和 一些脚本 配置文件,这些策略和脚本将用于传递给域成员机器。 此外,域控机器之间因为要自动同步域数据,SYSVOL 文档允许该域内的所有 DC 机之间进行复制,并且所有的 AD 用户都可以访问它
在域中,用户登录(计算机)时,会首先在 SYSVOL 文件查找 GPO 和启动脚本。同时,为了保证系统的正常运行,必须为 SYSVOL 保留足够的空间缓存,而且不能随意删除、改动该文件夹,要不然会出现一些组策略无法启用等报错信息
该目录由于针对的是域内所有机器和用户,所以域内中的合法用户均可以访问和执行该目录的文件。
而 NETLOGON 目录的挂载点位于 SYSVOL\domain\SCRIPTS, 主要存放的是一些脚本信息,是 AD 活动目录安装时候自动创建的,是在 sysvol 下面的一个子目录文件夹。

image-20220427093558330

image-20220427093600918

image-20220427093604071

GPT 位于 SYSVOL 共享下的 DOMAIN_NAME\Policies 目录下的各个 GUID 文件夹内。

GPT 在 SYSVOL 共享中以容器的形式组织目录结构,以 GUID 标识为目录名的各个组策略配置目录包含以下内容:

  • Macheine 目录:包含针对计算机的策略配置;
  • User 目录:包含针对用户的策略配置;
  • gpt.ini 文件:该组策略对象的一些配置信息(如版本信息、策略名称);

Machine 目录和 User 目录存放着具体的策略配置信息文件,根据设置了不同的组策略配置拥有不同的目录结构,如 Scripts 目录包含开关机和登入登出的执行脚本、Applications 目录包含关于软件的配置、Preferences 目录包含首选项配置。

image-20220427093613841

# 组策略管理工具

在域中,可以通过组策略管理这个工具来管控整个域的组策略。
下图中可以看到这个策略的作用路径是 ruyue.com,也就是说这个域内的全部机子和用户都会作用这个策略。

image-20220427093637804

域中的两个默认策略及相应的 GPT 路径。

image-20220427093646392

# 域组策略利用

# 环境准备

首先新建一个测试用的组织单位(OU)

image-20220427093835204

然后往 OU 中填充对象,这里可以新建(会真实创建一个用户)或者拖拽已经存在的用户进去。

image-20220427093841242

然后回到组策略管理器新建一个 GPO

image-20220427093851495

然后就可以编辑具体的组策略规则了。

image-20220427093916551

# GPP 漏洞(系统版本较低才行)

https://larry.ngrep.me/2016/12/14/windows-2008-gpp/

https://cloud.tencent.com/developer/article/1861363

https://blog.csdn.net/weixin_39816448/article/details/112219408

https://www.cnblogs.com/mrhonest/p/13594730.html

https://cloud.tencent.com/developer/article/1838769

# 登录自启脚本

注意:如果想要其它机器应用,exe 路径必须是网络路径,即前面讲的那个共享目录的路径
\192.168.152.128\sysvol\ruyue.com\Policies{D1D4D9D9-CF13-43FC-99E5-941CB9793A5C}\User\Scripts\Logon

这里其实就和前面的本地策略设置是一模一样的。

image-20220427094002884

然后客户端更新组策略,重启。

image-20220427094010018

# 计划任务

https://www.cnblogs.com/Drunkmars/p/mars41.html#_label3_2_2_2
注意:如果想要其它机器应用,exe 路径必须是网络路径,即前面讲的那个共享目录的路径
\192.168.152.128\sysvol\ruyue.com\Policies{D1D4D9D9-CF13-43FC-99E5-941CB9793A5C}\User\Scripts\Logon

image-20220427094030497

这里因为没用确定的按钮,所以修改完成后,直接按 enter 保存即可。(保存后注意看,如果那个小三角形不是绿色的说明配置有问题,只有绿色的才是正常的,通常出现黄标是配置的时候选错权限,比如明明是用户配置却非要设置成 system 权限去运行)

image-20220427094036395

客户端更新组策略

image-20220427094050505

使用命令 gpresult /r 可以看到应用详情,如图,这里就应用了两个 GPO,其中 Default Domain Policy 是优先级最高的。然后才是你的电脑我养猪。

image-20220427094057134

image-20220427094102603

走非 exe,powershell 上线 (如果是即使任务的话 ps 执行时会有一闪而过的框)

image-20220427094109835

# 命令行实现 GPO 和计划任务的创建

# 加载组策略模块

Import-Module GroupPolicy –verbose

image-20220427094139393

# 获取所有的组策略内容

Get-GPO -All

image-20220427094147666

# 查看指定组策略的权限

image-20220427094155724

# 创建一个组策略对象 GPO 并将指定对象链接到该 GPO 中

这里新建了一个组策略,然后将整个域都链接到这个 GPO 中,该 GPO 的地位就相当于 Default Domain Policy

image-20220427094206739

到这里,和我们通过组策略管理器操作的没什么不同,只是作用对象不同而已。

image-20220427094214715

# 为该 GPO 创建计划任务,以影响所有的域对象

这里作者是通过导出 GPO 然后修改,再还原 GPO 来完成的。
即备份 GPO 对象,然后手动进行修改里面的内容,再还原回去。

# 备份

需要注意的是,这里路径 test 是文件夹,必须自己提前创建一个。
Backup-Gpo -Name TestGPO1 -Path C:\test

image-20220427094507861

image-20220427094511181

# 往备份中加入计划任务 xml

路径为 \<gpo id>\DomainSysvol\GPO\User\Preferences\ScheduledTasks\ScheduledTasks.xml

这里 xml 是我自己手动新建一个后找到的,主要修改下图的两处,uid 随机生成一个

image-20220427094543996

image-20220427094548081

到备份文件夹下的 DomainSysvol\GPO\User 下新建目录 Preferences\ScheduledTasks
然后把修改好的 xml 放进去即可。即将计划任务 xml 放在这个文件夹中 C:\wenjianjia {DCF27E51-8FB9-428A-ADD3-2F97ECCDD281}\DomainSysvol\GPO\User\Preferences\ScheduledTasks

# 修改 Backup.xml 和 gpreport.xml

主要是往这里加入计划任务的注册信息。
https://beta.4hou.com/technology/15365.html
根据 3student 大佬的思路,就是新建两个组策略,一个含计划任务,一个不含,然后导出,对文件进行比对。
这里存在计划任务的 Backup.xml 中多了一个标签

image-20220427094648582

其值为,并且均是固定值。也就是说,在我们的 Backup.xml 中插入这样以下代码。

<UserExtensionGuids><![CDATA[[{00000000-0000-0000-0000-000000000000}{CAB54552-DEEA-4691-817E-ED4A4D1AFC72}][{AADCED64-746C-4633-A97C-D61349046527}{CAB54552-DEEA-4691-817E-ED4A4D1AFC72}]]]></UserExtensionGuids>

然后 gpreport.xml 的修改就是如图,很明显多了一大段的标签。我们就往里加就好,然后注意修改 guid

image-20220427094718895

# 还原 GPO

直接还原

Import-GPO -BackupId <backupid> -TargetName TestGPO1 -Path C:\test
Import-GPO -BackupId {DCF27E51-8FB9-428A-ADD3-2F97ECCDD281} -TargetName Rookie -Path C:\wenjianjia

image-20220427094748830

image-20220427094754133

# 滥用组策略权限委派

组策略的权限存在被利用的可能性,组策略的权限即组策略的 DACL 配置,即权限委派。如果组策略对象的修改或完全控制权限被分配给了某个用户,当该用户被攻击者拿下之后,攻击者利用该用户权限可以修改并配置特定的组策略来渗透攻击受该组策略作用的用户或计算机。
如下,组策略对象 你的电脑我养猪 委派给用户组 Authenticated Users (认证用户)编辑设置,删除,修改的权限,所以域内任意用户都可以随意更改该组策略的相关配置,因此这是一个有风险的组策略权限委派,在攻击者拿到任意域用户后,可以利用当前用户对该组策略进行修改,从而拿下被这个组策略影响的设备和用户。

具体利用流程:
这里需要使用 powesploit 中的 powerview 模块
https://github.com/PowerShellMafia/PowerSploit/tree/dev/Recon
①加载组策略模块,Import-Module GroupPolicy –verbose。检索可能存在风险的 ACL 配置,通过指定 DN 可以检索可能存在风险的组策略权限配置。
②利用 Get-NetOU 查找应用了该组策略的 OU。
③通过 Get-NetComputer 和 Get-NetUser 查找属于该 OU 的成员,即可确定该权限配置可能影响的用户和计算机

# 查找存在权限问题的组策略,获取其 guid

这里就发现这个组策略对象的权限委派有点问题,这里只要是域认证用户都能修改这个组策略。所以我们就可以利用这个去拿下应用了这个组策略对象的机子。
首先需要 Import-Module GroupPolicy –verbose

image-20220427094904312

image-20220427094909003

image-20220427094913555

# 通过 id 查找 ou 和 ou 中的用户和计算机

这里就用到了 poweview 这个模块了。

Import-Module C:\Users\administrator\Desktop\PowerView.ps1
 Get-NetOU -GUID d1d4d9d9-cf13-43fc-99e5-941cb9793a5c

image-20220427094935075

使用 dsquery 来获取

image-20220427094954067

利用 powerview 来获取

Get-NetUser -ADSpath "LDAP://OU=cleave777,DC=ruyue,DC=com"

Get-Netcomputer -ADSpath "LDAP://OU=cleave777,DC=ruyue,DC=com"

image-20220427095002496

image-20220427095013874

由此可确定,存在风险的组策略权限委派是:名为 你的电脑我养猪 的组策略分配给认证用户组编辑权限,应用该组策略的计算机对象为 exchange,因此,拿下任意域用户可以间接拿下 exchange 这台计算机(直接下发策略之类的)。