LDAP
adLDAP (389/tcp) AD'nin dizin servisidir ve enumerasyonun ana kaynagidir. Anonim ya da kimlikli ldapsearch ile naming context, kullanicilar, gruplar, SPN'ler, ACL'ler, LAPS, delegation ozellikleri okunur. BloodHound veri toplama buradan beslenir.
Komutlar
ldapsearch -x -H ldap://{{DC_IP}} -s base namingcontexts ldapsearch -x -H ldap://{{DC_IP}} -b 'DC={{DOMAIN}}' '(objectClass=*)' ldapsearch -x -H ldap://{{DC_IP}} -D '{{USER}}@{{DOMAIN}}' -w '{{PASS}}' -b 'DC={{DOMAIN}}' '(objectClass=user)' sAMAccountName description memberOf ldapsearch -x -H ldap://{{DC_IP}} -D '{{USER}}@{{DOMAIN}}' -w '{{PASS}}' -b 'DC={{DOMAIN}}' '(&(objectClass=user)(servicePrincipalName=*))' sAMAccountName servicePrincipalName ldapsearch -x -H ldap://{{DC_IP}} -D '{{USER}}@{{DOMAIN}}' -w '{{PASS}}' -b 'DC={{DOMAIN}}' '(&(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=4194304))' sAMAccountName nxc ldap {{DC_IP}} -u {{USER}} -p '{{PASS}}' --users --groups nxc ldap {{DC_IP}} -u {{USER}} -p '{{PASS}}' -M get-desc-users nxc ldap {{DC_IP}} -u {{USER}} -p '{{PASS}}' -M laps bloodhound-python -d {{DOMAIN}} -u {{USER}} -p '{{PASS}}' -ns {{DC_IP}} -c All --zip windapsearch -d {{DOMAIN}} --dc {{DC_IP}} -u '{{USER}}@{{DOMAIN}}' -p '{{PASS}}' --da rpcclient -U '' -N {{DC_IP}} -c 'enumdomusers' Port 389 - LDAP (Dizin Enumerasyonu)
LDAP, AD’nin tum nesnelerini (kullanici, grup, bilgisayar, GPO, ACL) barindiran dizin servisidir. Enumerasyonun kalbidir.
1. Enum - Naming Context (Base DN)
Her sorgu bir base DN ister. Once RootDSE’den namingcontexts cek; bu sana DC=corp,DC=local gibi domain DN’ini verir. Bu degeri sonraki tum -b parametrelerinde kullanirsin. Bu adim anonimdir ve neredeyse her zaman calisir.
2. Enum - Anonim vs Kimlikli Bind
Eski/yanlis yapilandirilmis DC’ler anonim bind’e izin verir ve tum dizini dokebilirsin. Modern DC’lerde anonim bind kapalidir; bos sonuc alirsan kimlikli bind (-D user@domain -w pass) ya da NetExec’e gec. ad-enum-nocreds ile ad-enum-creds farki tam burasidir.
3. Attack Relevance - LDAP Filtreleri
LDAP, saldiri yuzeyini dogrudan gosterir:
servicePrincipalName=*-> Kerberoastable hesaplar (ad-kerberoast).- UAC bit
4194304-> AS-REP roastable (ad-asrep). descriptionalani -> sik sik gomulu parola/ipucu (ad-cred-harvest).ms-Mcs-AdmPwd-> LAPS yerel admin parolasi (ad-laps).
4. Attack - BloodHound Beslemesi
bloodhound-python -c All LDAP’tan kullanici/grup/ACL/session verisini cekip graf olusturur. Bu, ACL abuse (ad-acl-abuse), delegation ve en kisa Domain Admin yolunu bulmanin temelidir.
Gotchalar
- Base DN yanlissa ‘No such object’ alirsin - once namingcontexts dogrula.
- Bitwise UAC filtrelerinde OID (1.2.840.113556.1.4.803) tam yazilmalidir.
- DC_HOST cozumlenemezse /etc/hosts’a ekle; LDAP IP ile, ama bazi sorgular FQDN ister.
- description alanini her zaman tara - en kolay quick win.