

域渗透——利用GPO中的脚本实现远程执行
source link: https://3gstudent.github.io/%E5%9F%9F%E6%B8%97%E9%80%8F-%E5%88%A9%E7%94%A8GPO%E4%B8%AD%E7%9A%84%E8%84%9A%E6%9C%AC%E5%AE%9E%E7%8E%B0%E8%BF%9C%E7%A8%8B%E6%89%A7%E8%A1%8C
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

域渗透——利用GPO中的脚本实现远程执行
17 Oct 2022
0x00 前言
在之前的文章《域渗透——利用GPO中的计划任务实现远程执行》介绍了通过域组策略(Group Policy Object)远程执行计划任务的方法,本文将要介绍类似的另外一种方法:通过域组策略(Group Policy Object)的脚本实现远程执行。
0x01 简介
本文将要介绍以下内容:
- 通过Group Policy Management Console (GPMC) 实现脚本的远程执行
- 通过命令行实现脚本的远程执行
- 新建GPO实现远程执行
- 修改已有的GPO,实现远程执行
0x02 通过Group Policy Management Console (GPMC) 实现脚本的远程执行
1.创建GPO
在域控制器上,位置: Administrative Tools
-> Group Policy Management
如果想要作用于整个域,选择域test.com
,右键,选择Create a GPO in this domain,and Link it here...
,如下图

如果想要作用于指定对象,需要选择提前创建好的OU,右键,选择Create a GPO in this domain,and Link it here...
,如下图

补充:创建OU的位置:Administrative Tools
-> Active Directory Users and Computers
2.配置GPO
选择创建好的GPO,右键,选择Edit...
(1)指定Startup/Shutdown/Logon/Logoff
时要执行的脚本
Startup/Shutdown
的位置为Computer Configuration
-> Windows Settings
-> Scripts(Startup/Shutdown)
,作用于域内计算机的开机和关机事件
Logon/Logoff
的位置为User Configuration
-> Windows Settings
-> Scripts(Logon/Logoff)
,作用于域用户的登陆和注销事件
这里以配置用户test1的登陆脚本为例进行配置,选择Login
,将要执行的脚本上传至域共享文件夹,默认位置为:\\test.com\SysVol\test.com\Policies\{A4C54BE4-A5D1-42F3-8288-529FACD8E5CF}\User\Scripts\Logon
,配置登陆执行的脚本为logon1.bat
,如下图

注:
直接将脚本上传至\\test.com\SysVol\test.com\Policies\{A4C54BE4-A5D1-42F3-8288-529FACD8E5CF}\User\Scripts\Logon
不会生效,必须在Logon
中指定要执行的脚本
(2)等待域组策略更新
默认情况下,域组策略每90分钟更新,随机偏移为0-30分钟,域控制器的组策略每5分钟更新
为了提高测试效率,可在客户端执行命令gpupdate /force
强制更新组策略
(3)等待触发脚本执行
在Computer01上登陆用户test1,发现执行了脚本logon1.bat
0x03 通过命令行实现脚本的远程执行
1.作用于全域
(1)创建一个GPO
Powershell命令:New-GPO -Name TestGPO1
(2)将GPO连到到域test.com
Powershell命令:New-GPLink -Name TestGPO1 -Target "dc=test,dc=com"
注:
两条命令可以简写为一条命令:new-gpo -name TestGPO1 | new-gplink -Target "dc=test,dc=com"
(3)通过SharpGPOAbuse设置执行的脚本
命令示例:SharpGPOAbuse.exe --AddUserScript --ScriptName StartupScript.bat --ScriptContents "cmd.exe /c echo 1 > c:\GPOAbuse.txt" --GPOName "TestGPO1"
这里也可以通过修改bat文件的内容判断用户名实现作用于指定目标,筛选用户test1的命令示例:SharpGPOAbuse.exe --AddUserScript --ScriptName StartupScript.bat --ScriptContents "if %username%==test1 cmd.exe /c echo 1 > c:\GPOAbuse.txt" --GPOName "TestGPO1"
(4)等待域组策略更新
默认情况下,域组策略每90分钟更新,随机偏移为0-30分钟
(5)等待触发脚本执行
(6)删除GPO
Powershell命令:Remove-GPO -Name TestGPO1
2.作用于指定目标
(1)创建OU
Powershell命令:New-ADOrganizationalUnit -Name OUtest2 -Path "DC=test,DC=com"
(2)确认用户test1的位置
cmd命令:dsquery user -name test1
返回结果:
"CN=test1,CN=Users,DC=test,DC=com"
(3)将指定用户test1移动至新创建的OUtest2
cmd命令:dsmove "CN=test1,CN=Users,DC=test,DC=com" -newparent "OU=OUtest2,DC=test,DC=com"
也可以使用cmd命令:dsquery user -name test1 | dsmove -newparent "OU=OUtest2,DC=test,DC=com"
(4)创建一个GPO并将其连接到指定OU
Powershell命令:new-gpo -name TestGPO2 | new-gplink -Target "OU=OUtest2,DC=test,DC=com"
(5)通过SharpGPOAbuse设置执行的脚本
命令示例:SharpGPOAbuse.exe --AddUserScript --ScriptName StartupScript.bat --ScriptContents "cmd.exe /c echo 1 > c:\GPOAbuse2.txt" --GPOName "TestGPO2"
(6)等待域组策略更新
默认情况下,域组策略每90分钟更新,随机偏移为0-30分钟
(7)等待触发脚本执行
(8)删除GPO
Powershell命令:Remove-GPO -Name TestGPO2
(9)将用户test1移除OU至原位置
cmd命令:dsquery user -name test1 | dsmove -newparent "CN=Users,DC=test,DC=com"
(10)删除OU
Powershell命令:
Set-ADOrganizationalUnit -Identity "OU=OUtest2,DC=test,DC=com" -ProtectedFromAccidentalDeletion $false
Remove-ADOrganizationalUnit -Identity "OU=OUtest2,DC=test,DC=com" -Recursive -Confirm:$False
0x04 修改已有的GPO,实现远程执行
默认存在两个组策略,每个文件夹对应一个组策略:
{6AC1786C-016F-11D2-945F-00C04fB984F9}
对应Default Domain Controllers Policy
{31B2F340-016D-11D2-945F-00C04FB984F9}
对应Default Domain Policy
默认可利用的组策略为Default Domain Policy
,这里分为手动修改和通过程序自动实现两部分进行介绍
1.手动修改
(1)获取GPO的guid
Powershell命令:get-GPO -Name "Default Domain Policy"
得到Id为31b2f340-016d-11d2-945f-00c04fb984f9
(2)上传要执行的用户登录脚本
将测试脚本test1.bat上传至\\test.com\sysvol\test.com\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\USER\Scripts\Logon
(3)启用用户登录脚本
创建文件\\test.com\sysvol\test.com\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\USER\Scripts\scripts.ini
,属性为隐藏文件,内容为:
[Logon]
0CmdLine=test1.bat
0Parameters=
(4)修改版本信息
修改文件\\test.com\sysvol\test.com\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\GPT.INI
,将Version
的原有数值加上65536
作为新的数值
具体来说,默认配置下,\\test.com\sysvol\test.com\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\GPT.INI
的Version
值为3
,第一次修改时需要将其修改为65539
(5)更新数据库信息
需要编写程序实现,代码可参考https://github.com/FSecureLABS/SharpGPOAbuse/blob/master/SharpGPOAbuse/Program.cs#L189
当然,这个操作也可以通过修改文件的方式实现,流程较为繁琐,具体思路如下:
- 备份GPO
- 修改Backup.xml
- 修改gpreport.xml
- 还原GPO
(6)等待域组策略更新
默认情况下,域组策略每90分钟更新,随机偏移为0-30分钟
(7)等待触发脚本执行
2.通过程序实现
通过SharpGPOAbuse可以实现,命令示例:SharpGPOAbuse.exe --AddUserScript --ScriptName StartupScript.bat --ScriptContents "cmd.exe /c echo 1 > c:\GPOAbuse.txt" --GPOName "Default Domain Policy"
0x05 直接执行远程脚本
当我们选择直接执行组策略文件夹中的bat文件,会弹框提示无法执行,如下图

这里可以通过修改注册表的方式设置为允许,对应的命令为:reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Associations /v ModRiskFileTypes /t REG_SZ /d .bat /f
该操作也可以通过配置域组策略实现,位置为:User Configuration
-> Administrative Templates
-> Windows Components
-> Attachment Manager
-> Inclusion list for moderate risk file types
,选择Enabled
,后缀名设置为.bat
,如下图

0x06 小结
本文介绍了通过域组策略(Group Policy Object)中的脚本实现远程执行的方法,分享实现细节和利用思路。
Recommend
-
5
ElasticSearch Groovy脚本远程代码执行漏洞分析(CVE-2015-1427) lupin
-
11
域渗透——利用dnscmd在DNS服务器上实现远程加载Dll 0x00 前言 由Shay Ber公开的一个利用方法,在域环境中,使用DNSAdmin权限能够在DNS服务器上实现远程加载Dll。这不算漏洞,但可以作为一个域渗透的技巧,本文将结合自己的...
-
14
域渗透——利用GPO中的计划任务实现远程执行(命令行实现原理与脚本细节) 0x00 前言 在上篇文章
-
8
0x00 前言 在之前的文章《渗透基础——Windows下计划任务...
-
18
0x00 前言 在上篇文章《渗透技巧——通过HTTP协议获得Net-NTLM ha...
-
18
0x00 前言 对于Windows系统,经常会用到远程桌面服务,通过界面对系统进行远程管理。 这其中存在一个不足:使用远程桌面服务进行远程登录(使用另一用户或是踢掉当前用户),无法获取到当前用户的系统状态。 如果想要查看(甚至是...
-
11
渗透技巧——利用tscon实现未授权登录远程桌面 0x00 前言 Windows系统下,tscon可被用来切换远程桌面的会话。正常情况下,切换会话时需要提供登录密码,但通过特殊的利用方法能够绕过验证,不输入密码实现未授权登录。...
-
7
0x00 前言 在以前的文章《在远程系统上执行程序的技术整理》整理过域环境下常用的程序执行方法:at、psexec、WMIC、wmiexec、smbexec和powershell remoting,这次将基于Matt Nelson @enigma0x3的研究,详细介绍在域环境下使用DCOM执行程序的方...
-
5
ssh连接远程主机执行脚本的环境变量问题 11 Nov 2014 • 7 min. read • 33 Comments
-
3
通过GPO禁用Win10在线升级至Win11 原创 微软已经开启通过Windows Update升级到
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK