DNS Enumeration Guide: Complete Domain Reconnaissance
Master DNS enumeration techniques from basic queries to advanced zone transfers, subdomain brute forcing, and DNS security assessment using Kali Linux tools.
DNS Intelligence Gathering
DNS enumeration is a methodology for systematically extracting intelligence from the Domain Name System. Every domain publishes infrastructure data through its DNS configuration — records, subdomains, service mappings — that collectively reveal how an organization's online presence is structured. Querying these records is a core intelligence-gathering technique that maps the hidden architecture behind any domain.
Why Enumerate DNS?
DNS enumeration reveals:
Prerequisites
Before starting, you should understand:
Basic DNS Queries
Using dig
# Basic A record lookup
dig example.com
# Short answer format
dig example.com +short
# Query specific record types
dig example.com A +short # IPv4 addresses
dig example.com AAAA +short # IPv6 addresses
dig example.com MX +short # Mail servers
dig example.com NS +short # Name servers
dig example.com TXT +short # Text records
dig example.com SOA # Start of Authority
dig example.com CNAME +short # Canonical name
# Query a specific DNS server
dig @8.8.8.8 example.com
# Trace the full resolution path
dig example.com +trace
# Reverse DNS lookup
dig -x 8.8.8.8 +short
Using nslookup
# Basic lookup
nslookup example.com
# Query specific record type
nslookup -type=MX example.com
nslookup -type=NS example.com
nslookup -type=TXT example.com
# Use a specific DNS server
nslookup example.com 8.8.8.8
Using host
# Simple DNS lookup
host example.com
# List all records
host -a example.com
# Query specific type
host -t MX example.com
host -t NS example.com
Advanced DNS Enumeration
Zone Transfer Attempt
A DNS zone transfer (AXFR) copies the entire DNS database from a primary server. Misconfigured servers allow anyone to request this:
# Step 1: Find name servers
dig example.com NS +short
# Step 2: Attempt zone transfer from each name server
dig @ns1.example.com example.com AXFR
# Step 3: Using dnsenum for automated testing
dnsenum --enum example.com
# Step 4: Using dnsrecon
dnsrecon -d example.com -t axfr
Subdomain Brute Forcing
Discover subdomains by testing common names against the target:
# Using dnsenum with a wordlist
dnsenum -f /usr/share/wordlists/dns/subdomains-top1million-5000.txt example.com
# Using dnsrecon
dnsrecon -d example.com -D /usr/share/wordlists/dns/subdomains-top1million-20000.txt -t brt
# Using gobuster
gobuster dns -d example.com -w /usr/share/wordlists/dns/subdomains-top1million-5000.txt -t 50
# Using ffuf
ffuf -w /usr/share/wordlists/dns/subdomains.txt:HOST -u http://FUZZ.example.com -fc 400,404,403
Certificate Transparency Logs
Certificate Transparency (CT) logs publicly record all SSL certificates issued:
# Query crt.sh for subdomains
curl -s "https://crt.sh/?q=%25.example.com&output=json" | \
jq -r '.[].name_value' | sort -u
# Save results
curl -s "https://crt.sh/?q=%25.example.com&output=json" | \
jq -r '.[].name_value' | sort -u > ct_subdomains.txt
DNS Enumeration Tools
dnsenum
# Full enumeration
dnsenum example.com
# With custom wordlist
dnsenum -f /usr/share/wordlists/dns/subdomains.txt example.com
# Multi-threaded
dnsenum --threads 10 example.com
# Save output
dnsenum --enum -o results.xml example.com
dnsrecon
# Standard enumeration
dnsrecon -d example.com
# Zone transfer test
dnsrecon -d example.com -t axfr
# Subdomain brute force
dnsrecon -d example.com -D wordlist.txt -t brt
# SRV record enumeration
dnsrecon -d example.com -t srv
# Cache snooping
dnsrecon -d example.com -t snoop -D wordlist.txt
# Save results
dnsrecon -d example.com -j output.json
fierce
# Basic subdomain discovery
fierce --domain example.com
# With custom DNS server
fierce --domain example.com --dns-servers 8.8.8.8
DNS Security Assessment
Email Security Records
# Check DMARC policy
dig _dmarc.example.com TXT +short
# Check SPF record
dig example.com TXT +short | grep "v=spf1"
# Check DKIM (common selector names)
dig selector1._domainkey.example.com TXT +short
dig google._domainkey.example.com TXT +short
DNSSEC Validation
# Check if DNSSEC is enabled
dig example.com +dnssec
# Verify DNSSEC chain
delv example.com @8.8.8.8
Common DNS Misconfigurations
# Check for open recursion
dig @target-server example.com
# Test for cache poisoning vulnerability
# Compare responses from multiple DNS servers
# Look for wildcard DNS records
dig *.example.com A +short
Complete DNS Enumeration Script
#!/bin/bash
DOMAIN=$1
OUTPUT_FILE="${DOMAIN}_dns_enum.txt"
echo "=== DNS Enumeration for $DOMAIN ===" | tee "$OUTPUT_FILE"
echo "\n--- A Records ---" | tee -a "$OUTPUT_FILE"
dig "$DOMAIN" A +short | tee -a "$OUTPUT_FILE"
echo "\n--- MX Records ---" | tee -a "$OUTPUT_FILE"
dig "$DOMAIN" MX +short | tee -a "$OUTPUT_FILE"
echo "\n--- NS Records ---" | tee -a "$OUTPUT_FILE"
dig "$DOMAIN" NS +short | tee -a "$OUTPUT_FILE"
echo "\n--- TXT Records ---" | tee -a "$OUTPUT_FILE"
dig "$DOMAIN" TXT +short | tee -a "$OUTPUT_FILE"
echo "\n--- SOA Record ---" | tee -a "$OUTPUT_FILE"
dig "$DOMAIN" SOA +short | tee -a "$OUTPUT_FILE"
echo "\n--- Zone Transfer Test ---" | tee -a "$OUTPUT_FILE"
for ns in $(dig "$DOMAIN" NS +short); do
echo "Testing $ns..." | tee -a "$OUTPUT_FILE"
dig @"$ns" "$DOMAIN" AXFR +noall +answer 2>&1 | tee -a "$OUTPUT_FILE"
done
echo "\n--- Subdomain Brute Force ---" | tee -a "$OUTPUT_FILE"
dnsenum -f /usr/share/wordlists/dns/subdomains-top1million-5000.txt "$DOMAIN" 2>&1 | tee -a "$OUTPUT_FILE"
echo "\nResults saved to $OUTPUT_FILE"
Frequently Asked Questions
What is the difference between DNS enumeration and DNS scanning?
DNS enumeration is a passive technique that queries existing DNS records. DNS scanning actively probes for vulnerabilities like zone transfers. Both are essential for complete reconnaissance.
How long does DNS enumeration take?
Basic queries take seconds. Subdomain brute forcing with large wordlists can take minutes to hours depending on wordlist size and thread count.
Is DNS enumeration legal?
Querying public DNS records is legal. However, attempting zone transfers or brute forcing on networks you don't own may violate terms of service or laws. Always have proper authorization.
What wordlist is best for subdomain brute forcing?
The SecLists repository provides excellent wordlists. Start with subdomains-top1million-5000.txt for quick scans, and use larger lists for comprehensive enumeration.
Can DNS enumeration find all subdomains?
No. Private or internal subdomains won't appear in public DNS. CT logs and brute forcing find publicly accessible subdomains only.