域滲透——利用GPO中的計劃任務實現遠程執行
0x00 前言
在之前的文章《滲透基礎——Windows下計劃任務的使用》曾介紹過計劃任務的用法。而在域環境中,通過組策略(Group Policy Object)同樣能夠實現計劃任務的遠程執行,本文將要對這個方法進行介紹,分析利用思路。
0x01 簡介
本文將要介紹以下內容:
·GPO中的計劃任務簡介
·通過Group Policy Management Console (GPMC) 實現計劃任務的遠程執行
·通過命令行實現計劃任務的遠程執行
·新建GPO實現遠程執行
·修改已有的GPO,實現遠程執行
·GPO的常用操作
0x02 簡介
值得閱讀的資料:
http://www.harmj0y.net/blog/redteaming/abusing-gpo-permissions/
https://adsecurity.org/?p=2716
http://www.sicherheitsforschung-magdeburg.de/uploads/journal/MJS_052_Willi_GPO.pdf
GPO全稱Group Policy Objects,用來存儲Active Directory中的策略。
自Windows Server 2008開始,GPO開始支持計劃任務,便於管理域中的計算機和用戶。
默認情況下,域用戶的組策略每90分鐘更新,隨機偏移為0-30分鐘,域控制器的組策略每5分鐘更新。
註:可通過命令實現組策略的強制更新。
默認組策略的保存位置:\SYSVOL\Policies,所有域內主機都能訪問。
註:之前的文章《域滲透-利用SYSVOL還原組策略中保存的密碼》曾介紹過這個文件位置。
默認存在兩個組策略,每個文件夾對應一個組策略:
·對應Default Domain Controllers Policy
·對應Default Domain Policy
如下圖:
0x03 通過Group Policy Management Console (GPMC) 實現計劃任務的遠程執行
在域控制器上,位置: Administrative Tools -> Group Policy Management
如下圖:
選擇域test.local,右鍵,選中第一個,創建GPO,如下圖:
輸入名稱TestGPO1,這會創建一個全局的GPO,作用於所有域用戶。
選擇TestGPO1,右鍵,Edit...
User Configuration -> Preferences -> Control Panel Settings -> Scheduled Tasks
New -> Immediate Task(Windows Vista and later),如下圖:
註:Immediate Task會在每次組策略刷新時執行。
四種計劃任務的區別可參考官方文檔:
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc770904(v%3Dws.11)
註:也可以選擇位置Computer Configuration -> Preferences -> Control Panel Settings -> Scheduled Tasks
接下來,根據提示設置計劃任務即可。
為便於測試,執行的操作為將執行結果輸出到文件,如下圖:
這個組策略對應的ID為,在位置\test.comSYSVOL est.comPolicies\UserPreferencesScheduledTasks下找到文件ScheduledTasks.xml,裡面保存計劃任務的配置信息。
對於域內的主機,可以等待90分鐘使組策略自動更新,也可以在客戶端執行如下命令強制刷新組策略:
gpupdate /force
客戶端默認更新組策略的方式:
讀取域共享目錄中組策略的版本,位置為\Policies\GPT.ini,如果版本高於本地保存的組策略版本,客戶端將會更新本地的組策略。
每次修改組策略,\Policies\GPT.ini中的Version會增加。
0x04 通過命令行實現計劃任務的遠程執行
域控制器系統: Windows Server 2012 R2 x64 域名: test.com
1、創建一個GPO
New-GPO -Name TestGPO1
2、將GPO連到到域test.com
New-GPLink -Name TestGPO1 -Target "dc=test,dc=com"
註:兩條命令可以簡寫為一條命令:
new-gpo -name TestGPO1 | new-gplink -Target "dc=test,dc=com"
通過命令行回顯獲得ID為0bfd3f0c-21a1-4eca-8a5e-1f0bd4dc64dc
3、創建計劃任務
通過Group Policy Management Console (GPMC)創建的計劃任務會自動註冊。
而我目前還沒有找到註冊計劃任務的介面,所以只能尋找一個變通的方法。
好在我最終找到了變通的解決方法,步驟如下:
(1)導出GPO
Backup-Gpo -Name TestGPO1 -Path C: est
(2)創建計劃任務的配置文件ScheduledTasks.xml
路徑為\Policies\DomainSysvolGPOUserPreferencesScheduledTasksScheduledTasks.xml
(3)修改Backup.xml和gpreport.xml
加入計劃任務的配置信息。
(4)還原GPO
Import-GPO -BackupId -TargetName TestGPO1 -Path C: est
完整實現代碼已開源,下載地址如下:
https://github.com/3gstudent/Homework-of-Powershell/blob/master/New-GPOImmediateTask.ps1
註:下篇文章將會詳細介紹原理和腳本實現細節。
腳本命令示例:
腳本自動實現以下操作:
·將TestGPO備份至當前目錄
·修改備份文件夾下的Backup.xml和gpreport.xml
·生成文件ScheduledTasks.xml
·還原TestGPO
4、強制客戶端刷新組策略
Invoke-GPUpdate -Computer "TESTCOMPUTER-01"
註:Windows Server 2008 R2默認不支持該命令,Windows Server 2012支持。
客戶端的防火牆需要允許以下連接:
·Remote Scheduled Tasks Management (RPC)
·Remote Scheduled Tasks Management (RPC-ERMAP)
·Windows Management Instrumentation (WMI-IN)
官方資料:
https://docs.microsoft.com/en-us/powershell/module/grouppolicy/invoke-gpupdate?view=win10-ps
5、刪除GPO
Remove-GPO -Name TestGPO1
註:通過Group Policy Management Console (GPMC)右鍵刪除GPO不會刪除對應的文件夾,Remove-GPO可以。
0x05 利用思路
前提是獲得了域管理員的許可權或者某個組策略的編輯許可權。
通用操作如下:
載入GroupPolicy模塊:
Import-Module GroupPolicy –verbose
獲得所有GPO的內容:
Get-GPO -All
將所有GPO導出為一個HTML報告:
Get-GPOReport -All -ReportType html -Path C:GposReportGposReport.html
將每個GPO單獨導出一個HTML報告:
Get-GPO -All | %{
Get-GPOReport -name $_.displayname -ReportType html -
path ("c:GPOReports"+$_.displayname+".html")
}
查看指定GPO的許可權設置:
Get-GPPermission -Name "TestGPO1" -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"
根據不同情況,有以下兩種利用思路:
1、新建組策略,創建計劃任務實現遠程執行
創建:
New-GPLink -Name TestGPO1 -Target "dc=test,dc=com"
添加計劃任務:
New-GPOImmediateTask -TaskName Debugging -GPODisplayName TestGPO1 -CommandArguments "-c "123 | Out-File C: estdebug.txt"" -Force
強制客戶端刷新組策略:
Invoke-GPUpdate -Computer "TESTCOMPUTER-01"
刪除GPO
Remove-GPO -Name TestGPO1
2、修改已有組策略,創建或者替換計劃任務
創建計劃任務:
創建文件ScheduledTasks.xml
刪除GPO中的計劃任務:
刪除文件ScheduledTasks.xml
0x06 GPO的常用操作
創建OU:
New-ADOrganizationalUnit -Name OUTest1 -Path "dc=test,dc=com"
查看當前域中的所有計算機:
dsquery computer
獲得結果"CN=Computer1,CN=Computers,DC=test,DC=com"
將該計算機加到OU=OUTest1中:
dsmove "CN=Computer1,CN=Computers,DC=test,DC=com" -newparent OU=OUTest1,dc=test,dc=com
查詢OU=OUTest1中的計算機:
dsquery computer OU=OUTest1,dc=test,dc=com
創建GPO並連接:
new-gpo -name TestGPO | new-gplink -Target "OU=OUTest1,dc=test,dc=com"
還原:
將計算機Computer1從OU=OUTest1中移除
dsmove "CN=Computer1,OU=OUTest1,DC=test,DC=com" -newparent CN=Computers,dc=test,dc=com
刪除OU=OUTest1:
set-ADOrganizationalUnit -Identity "OU=OUTest1,dc=test,dc=com" -ProtectedFromAccidentalDeletion $falseRemove-ADOrganizationalUnit -Identity "OU=OUTest1,dc=test,dc=com" -Recursive -Confirm:$False
0x07 小結
本文介紹了利用GPO中的計劃任務實現遠程執行的方法,分析利用思路,通過命令行實現了GPO和計劃任務的創建、修改和刪除。
※Cisco Webex Meetings桌面應用特權提升漏洞分析
※2018年網路安全「金帽子」獎年度評選活動火熱進行中——揭秘豪華評審團
TAG:嘶吼RoarTalk |