Passive intelligence gathering without touching the target — DNS, WHOIS, subdomain enumeration, Certificate Transparency, technology fingerprinting, ASN mapping.
61
72%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./packages/decepticon/decepticon/skills/standard/recon/passive-recon/SKILL.mdPassive reconnaissance gathers intelligence without directly interacting with the target's systems. This leaves no logs, no alerts, and no fingerprints on the target. Always exhaust passive methods before transitioning to active techniques.
# Full passive workflow for <TARGET>
whois <TARGET>
dig <TARGET> ANY +noall +answer
subfinder -d <TARGET> -o subdomains.txt
amass enum -passive -d <TARGET> -o amass_subs.txt
curl -s "https://crt.sh/?q=%25.<TARGET>&output=json" | python3 -c "import sys,json; [print(x['name_value']) for x in json.load(sys.stdin)]" | sort -u
httpx -l subdomains.txt -sc -cl -ct -title -tech-detect -o httpx_<TARGET>.txt
curl -sI https://<TARGET>whois example.comExtract: Registrar, creation/expiration dates, nameservers, registrant organization, abuse contacts.
whois -h whois.radb.net -- '-i origin AS12345'
whois <IP_ADDRESS>Extract: ASN ownership, IP ranges allocated, network name, organization.
# ASN lookup via Team Cymru
whois -h whois.cymru.com " -v <IP_ADDRESS>"
# All prefixes for an ASN
whois -h whois.radb.net -- '-i origin AS12345' | grep route
# Using amass for ASN intelligence
amass intel -asn <ASN_NUMBER># All record types
dig example.com ANY +noall +answer
# Specific records
dig example.com A +short
dig example.com AAAA +short
dig example.com MX +short
dig example.com NS +short
dig example.com TXT +short
dig example.com CNAME +short
dig example.com SOA +short
# Reverse DNS
dig -x <IP_ADDRESS> +short# Enumerate nameservers first
dig example.com NS +short
# Attempt zone transfer (AXFR)
dig @ns1.example.com example.com AXFRNote: Zone transfers are a grey area — they are a DNS protocol feature but unauthorized transfers may violate ROE. Confirm scope before attempting.
# Basic enumeration
subfinder -d example.com -silent
# Save to file for large results
subfinder -d example.com -o subdomains.txt
# Multiple sources with verbose
subfinder -d example.com -all -v
# Recursive enumeration
subfinder -d example.com -recursive# Passive-only enumeration (no DNS brute force)
amass enum -passive -d example.com -o amass_subs.txt
# With additional intelligence sources
amass enum -passive -d example.com -src -ip
# Intel mode — discover root domains from ASN/org
amass intel -org "Target Corp"
amass intel -asn 12345 -whois -d example.com# Using a wordlist if available
for sub in $(cat /usr/share/wordlists/subdomains.txt); do
dig +short "$sub.example.com" | grep -v "^$" && echo "$sub.example.com"
donedev., staging., test., admin., vpn., mail. reveal internal structure*.amazonaws.com, *.azurewebsites.net CNAME targets reveal cloud usagecurl -s "https://crt.sh/?q=%25.example.com&output=json" | \
python3 -c "import sys,json; [print(x['name_value']) for x in json.load(sys.stdin)]" | \
sort -u*.example.com) indicate broad subdomain usagecurl -sI https://example.comLook for:
Server: Web server software and versionX-Powered-By: Backend frameworkX-CDN, CF-RAY: CDN identificationStrict-Transport-Security: HSTS configurationContent-Security-Policy: CSP reveals allowed domains / integrations# Probe all subdomains with tech detection
httpx -l subdomains.txt -sc -cl -ct -title -tech-detect -o httpx_results.txt
# Filter live hosts with specific status codes
httpx -l subdomains.txt -mc 200,301,302,403 -title -tech-detect
# JSON output for parsing
httpx -l subdomains.txt -sc -title -tech-detect -json -o httpx.jsonhttpx is critical for:
curl -s https://example.com | grep -Ei '(wp-content|drupal|joomla|next|react|angular|vue)'# subfinder → httpx → nuclei pipeline
subfinder -d <TARGET> -silent | httpx -silent -sc -title -tech-detect | tee live_<TARGET>.txt
cat live_<TARGET>.txt | awk '{print $1}' | nuclei -severity critical,high -silent
# CT logs → dedup → resolve
curl -s "https://crt.sh/?q=%25.<TARGET>&output=json" | \
python3 -c "import sys,json; [print(x['name_value']) for x in json.load(sys.stdin)]" | \
sort -u | httpx -silent -o ct_live_<TARGET>.txt
# amass + subfinder → merge → dedup
cat amass_subs.txt subdomains.txt | sort -u > all_subs_<TARGET>.txtNormalize all subdomain sources into a single format for downstream tools:
# Standard format: one subdomain per line, no protocol, no trailing dot
cat all_subs_<TARGET>.txt | \
sed 's|https\?://||; s|/.*||; s|\.$||' | \
tr '[:upper:]' '[:lower:]' | sort -u > normalized_subs_<TARGET>.txt# SecurityTrails API (if available)
curl -s "https://api.securitytrails.com/v1/domain/<TARGET>/subdomains" \
-H "APIKEY: $ST_KEY" | python3 -m json.tool
# VirusTotal passive DNS
curl -s "https://www.virustotal.com/api/v3/domains/<TARGET>/resolutions?limit=40" \
-H "x-apikey: $VT_KEY" | python3 -c "
import sys, json
data = json.load(sys.stdin)
for r in data.get('data', []):
attrs = r['attributes']
print(f\"{attrs.get('date','?')} {attrs.get('host_name','?')} -> {attrs.get('ip_address','?')}\")
"Boundary: Passive recon covers technical infrastructure (DNS, subdomains, WHOIS, ASN, CT logs, web fingerprinting). For human and organizational intelligence (email harvesting, employee enumeration, GitHub secret scanning, breach data, social media, Google dorking, Wayback Machine), use the dedicated
osintskill.
After completing passive recon, hand off discovered domains and infrastructure data to the osint skill for:
| Problem | Cause | Solution |
|---|---|---|
| subfinder returns 0 results | API keys not configured | Run with -all flag; add API keys to ~/.config/subfinder/provider-config.yaml |
| crt.sh timeout | Rate limiting | Wait 30s and retry; use local CT log mirror if available |
| httpx hangs on large list | Too many concurrent requests | Add -threads 25 -timeout 5 |
| amass very slow | Default config too aggressive | Use -passive flag only; set timeout with -timeout 10 |
| WHOIS blocked | Rate limited by registrar | Try alternative WHOIS server: whois -h whois.verisign-grs.com <TARGET> |
*.TARGET resolves → if yes, filter out wildcard IPs from subdomain results# Detect wildcard DNS
WILDCARD_IP=$(dig +short nonexistent-random-string.<TARGET>)
if [ -n "$WILDCARD_IP" ]; then
echo "WILDCARD detected: $WILDCARD_IP — filtering results"
grep -v "$WILDCARD_IP" resolved_subs.txt > filtered_subs.txt
fiosint skill → Email, employee, GitHub, breach, social media, dorkingBefore moving to active reconnaissance, you must have:
references/dns-techniques.md — DNS record types, subdomain tool comparison, CT deep dive, ASN/BGP intel, passive DNS databases. Read when you need detailed technique reference beyond this skill's quick-reference commands.scripts/parse_subdomains.py — Parse and deduplicate subdomain results from multiple tools. Usage: python scripts/parse_subdomains.py recon/*.txt -d <TARGET> -o recon/all_subs.txte34afba
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.