GPO批量下发恶意程序

admin 2022年5月11日00:10:27评论420 views字数 4944阅读16分28秒阅读模式

GPO批量下发恶意程序


概览


介绍、效果和前提、运维配置GPO、渗透配置GPO、关于组策略更新、攻击指定目标1、攻击指定目标2、开机/关机,登录/注销下发恶意程序、开关机设置、登录注销设置、执行powershell脚本、更改GPT.ini、SharpGPOAbuse。


介绍


GPO是Group Policy Object的缩写,译为组策略对象,作用在于控制用户可以干什么不可以干什么,比如密码必须要符合要求,特定文件夹访问权,安装附加功能或者以管理身份运行某些软件等等,这一套策略就叫组策略对象。


在域控中,组策略相当于中心管理,然后下发域中机器,应用到指定的计算机组或域中所有机器,如果是单台计算机设置组策略,那么就只应用于当前这台机器。


默认情况下,组策略每90分钟刷新一次,随机时间偏移是30分钟,域控上是5分钟刷新一次,从xp开始,用户可以手动gpupdate来刷新。


效果和前提


win2008开始,GPO支持计划任务,可执行命令或程序,通过GPO下发恶意程序,可以达到控制所有机器的目的,但前提是控制了域控,可以配置组策略。


运维配置GPO


最常见方便的,就是在域控直接编辑组策略,打开服务器管理器-选择工具-组策略管理。


在域上右键,选择域中创建GPO,则作用范围就是域内所有机器:


GPO批量下发恶意程序


如果在OU上右键新建组策略,那么应用范围就限制在了这个OU下:


GPO批量下发恶意程序


这里我们建一个GPOPlanMaer组策略,范围是整个域,在该策略上右键选择编辑:


GPO批量下发恶意程序


打开组策略管理编辑器,在用户配置-首选项-控制面板设置-计划任务-新建-即时任务中来新建个任务,如下图:


GPO批量下发恶意程序


这里的即时任务指的是域内机器组策略刷新时,该任务就执行,时间上面提到过,90分钟左右偏移30,或者是用户重新登录,执行gpupdate也可以。


新建即时任务,输入名称:


GPO批量下发恶意程序


然后切换到操作栏,新建一个操作,脚本和参数以下图的whoami为例:


GPO批量下发恶意程序


这里有两个地方需要注意:1,新建操作的程序或脚本那里,如果点击浏览选择cmd程序或者其它二进制程序,点确认时会崩溃,我这个是2016的环境,其它目前不清楚,可以直接手动输入cmd或者powershell。2,新建操作完成后,没有确认按钮,如果直接点叉关闭,默认不会保存,这里需要按回车键。如下图:


GPO批量下发恶意程序


用jixi账号登录,脚本已运行:


GPO批量下发恶意程序


渗透设置GPO


作为渗透人员,图形化可能不太方便,那么可以使用命令行来操作,首先,创建一个组策略:


powershell -c new-gpo -name GPOPlanMaer2


GPO批量下发恶意程序


上图中组策略建好后,图形化中并没有看到,原因是需要把建好的策略链接到指定的域上,这里链接到afa域:


powershell -c new-gplink -name GPOPlanMaer2 -Target 'dc=afa,dc=com'


GPO批量下发恶意程序


此时再刷新就看到了,遗憾的是powershell提供了对GPO的操作,但没有提供对即时任务的操作,意味着我们只能新建策略,但不能给策略添加即时任务。


好在,站在了巨人的肩膀上,提供的脚本地址如下:


https://github.com/3gstudent/Homework-of-Powershell/blob/master/New-GPOImmediateTask.ps1


原理是什么呢,GPO新建的即时任务会在sysvol目录下生成相关的xml文件,操作这个xml就可以了。


命令如下:


Import-Module .New-GPOImmediateTask.ps1New-GPOImmediateTask -TaskName ipconfig -GPODisplayName GPOPlanMaer2 -SysPath '\afa.comsysvolafa.com' -CommandArguments '-c "ipconfig > c:userspublicip.txt"'


GPO批量下发恶意程序


图形化查看下,即时任务已创建:


GPO批量下发恶意程序


手动更新下组策略,成功运行:


GPO批量下发恶意程序


关于组策略更新


最后再拓展下,哪几种情况下组策略会更新。


1,计算机默认情况下都是90分钟更新一次,上下有30分钟的随机时间,而域控不一样,域控比较频繁,是5分钟,那么怎么更新组策略呢,计算机会检查sysvol里面的GPT.ini,如果自己版本不是最新,就会更新过来。


GPO批量下发恶意程序


2,第二种情况就是,用户开机登录的时候,会去检查sysvol里面的GPT.ini文件,自己版本不是最新的话,会更新过来。


3,第三种就是强制更新,执行gpupdate /force命令。


攻击指定目标1


比如要攻击一些指定的目标,或者是部分目标没有上线,需要对这些目标做攻击,但他们没在一个单元内,这时,可以新建一个OU,把这些人移动到新建的OU中,攻击完再移回去即可。


只需要把GPO链接到指定OU就可以了,相关命令如下。


# 在afa.com域下下新建OUNew-ADOrganizationalUnit -Name OUTest1 -Path "dc=afa,dc=com"# 如果想在单元OUTest1下再新建一个OU,写法如下New-ADOrganizationalUnit -Name OUTest2 -Path "ou=OUTest1,dc=afa,dc=com"# 把user1移动到OUTest1单元内dsmove "CN=user1,dc=afa,dc=com" -newparent "OU=OUTest1,dc=afa,dc=com"# 新建GPO链接到新单元内new-gpo -name GPOTest | new-gplink -Target "OU=OUTest1,dc=afa,dc=com"# 然后就是上面的那个powershell新建即时任务的命令,参考上面# 把user1还原回去dsmove "CN=user1,dc=afa,dc=com" -newparent "CN=Computers,dc=afa,dc=com"# 删除OU=OUTest1set-ADOrganizationalUnit -Identity "OU=OUTest1,dc=afa,dc=com" -ProtectedFromAccidentalDeletion $false Remove-ADOrganizationalUnit -Identity "OU=OUTest1,dc=afa,dc=com" -Recursive -Confirm:$False# ProtectedFromAccidentalDeletion:是否阻止对象被删除,false为不阻止# Recursive:递归,子单元也会被删除# Confirm:运行cmdlet前不提示确认信息


攻击指定目标2

上面步骤比较繁琐,有一种更简单的方法,我们可以设置安全筛选,即只要设置GPO权限即可。


1,新建GPO并链接到afa.com域


new-gpo -name TestGPO | new-gplink -Target "dc=afa,dc=com"


GPO批量下发恶意程序


2,查看下该GPO原有的访问成员


Get-GPPermission -name TestGPO -all


GPO批量下发恶意程序


3,取消原有成员的访问权


Set-GPPermission -Name TestGPO -TargetName "xxx" -TargetType group -PermissionLevel none -replace


GPO批量下发恶意程序


按上面命令格式,把已有的组挨个设置下即可,需要注意的是要把domain admins、enterprise admins留下,这两删掉,组策略也会跟着被删。


GPO批量下发恶意程序


下面就可以设置安全筛选了,可以设置某台机器访问,也可以设置某个用户访问,或者是某个组:


# 设置该GPO允许某台机器应用Set-GPPermission -Name TestGPO -TargetName "afa$" -TargetType Computer -PermissionLevel GpoApply# 设置该GPO允许某个用户应用Set-GPPermission -Name TestGPO -TargetName "jixi" -TargetType user -PermissionLevel GpoApply# 设置该GPO允许某个组内应用Set-GPPermission -Name TestGPO -TargetName "" -TargetType group -PermissionLevel GpoApply


需要注意的是设置某个组时,不能是OU:


GPO批量下发恶意程序


重新查看GPO的链接:


GPO批量下发恶意程序


之后就是设置即时任务那一套了。


开机/关机,登录/注销下发恶意程序

上面的都是即时任务,组策略更新就会触发,有时候我们可能不需要触发那么多次,那么可以设置为开机或登录触发。


需要在默认的GPO对应目录增加相关的文件和配置就可以了,域默认GPO的唯一ID:{31B2F340-016D-11D2-945F-00C04FB984F9}


GPO批量下发恶意程序



编辑此策略,在windows设置下可以看到相关的启动脚本设置选项,如下图:


GPO批量下发恶意程序


开关机设置


开关机设置路径为:


C:WindowsSYSVOLsysvolafa.comPolicies{31B2F340-016D-11D2-945F-00C04FB984F9}MACHINE


然后在MACHINE下新建一个scripts文件夹,scripts中再建个shutdown和startup,基本默认都有,没有的话建一下即可。


GPO批量下发恶意程序


startup目录下放启动的执行文件,shutdown目录下放关机的执行文件。


然后把exe或者bat脚本放进去,这里以mspaint.exe为例,复制一份到startup,然后在script目录下新建一个scripts.ini文件,内容如下:


[Startup]0CmdLine=mspaint.exe0Parameters=


ini中内容意思为启动脚本为mspaint程序,启动参数为空,如果要设置关机,把Startup换成Shutdown即可。


GPO批量下发恶意程序


登录注销设置


设置同理,只不过路径有变化:


C:WindowsSYSVOLsysvolafa.comPolicies{31B2F340-016D-11D2-945F-00C04FB984F9}USER


logon是登录,logoff注销。内容写法和上面的开关机是一样的。


需要注意的有两点:1,如果域成员机器做了相关操作,脚本却没有运行,那么可能是远程文件运行警告确认,可以访问域共享目录手动点击一下看能不能执行。2,如果域成员机器可以运行,但做了相关操作,脚本还没有运行,可以去域控试一下有没有远程文件运行警告,我这里测试的如果域控不允许,域内机器也不能执行,域组策略对域控没生效,需要手动打开gepdit.msc域控的本地策略来设置下。


执行powershell脚本


上面说了脚本可以是exe或者bat,但也可以设置为ps,稍微有点区别,设置如下图:


GPO批量下发恶意程序


我这里就不找ps脚本了,还拿刚才的test.bat为例,设置好后,我们可以看下script.ini的变化:


GPO批量下发恶意程序


ps脚本的配置文件是psscripts.ini,内容是一样的,如果设置的首先运行ps脚本,就会有一个scriptconfig配置项,如上图。


更改GPT.ini版本号


注意:上面那些操作如果是通过图形化设置的,那么GPT.ini(域默认策略31B……4F9下的配置文件)的版本号会进行更新:


GPO批量下发恶意程序


可以通过ldapbrower查看:


GPO批量下发恶意程序


这里测试的如果直接修改txt,查出来的版本号还是原来的,实际测试中,为了方便,可以使用ps脚本修改,powerview支持此功能,命令如下:


Get-DomainGPO -Identity "Default Domain Policy" | Set-DomainObject -Set @{'versionnum ber'='666666'}


GPO批量下发恶意程序


SharpGPOAbuse


上面的操作起来可能相对麻烦,相关操作有提供相关的工具,SharpGPOAbuse可以完成上面的任务,地址如下:


https://github.com/FSecureLABS/SharpGPOAbuse


我这里编译运行有点问题,所以去搜了个编译好的,参考地址:


https://github.com/byronkg/SharpGPOAbuse/


使用参考readme即可。


GPO批量下发恶意程序


设置后用户登录可成功触发运行。

原文始发于微信公众号(aFa攻防实验室):GPO批量下发恶意程序

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月11日00:10:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   GPO批量下发恶意程序http://cn-sec.com/archives/952094.html

发表评论

匿名网友 填写信息