XHack Logo
XHack
Products
Services
Compliance
Pricing
Resources
Company
Sign upLogin
XHack Logo
XHackOffensive Security

Certified offensive security team delivering penetration testing evidence written for your auditor.

OSCP+OSCPC-AI/MLPenCASA
support@xhack.io

24/7 SOC Operations

XHack Status
Under attack? Get help now
Services
  • VAPT Services
  • Red Teaming
  • SOC Services
  • Threat Intelligence
  • Incident Response
  • Managed Testing
Pricing
  • Platform Plans
  • Services Pricing
Compliance
  • SOC 2
  • PCI DSS
  • ISO 27001
  • GDPR
  • HIPAA
  • ISO 42001
  • AI Maturity Assessment
  • TX-RAMP
  • NBFC / SECP
  • All Frameworks
Products
  • Vulnerability Assessment
  • GitGuard
  • AI Probe
  • SOC Dashboard
  • AI Agent
  • Cloud Investigation
Comparison
  • XBOW vs XHack
  • Horizon3 vs XHack
  • Strix vs XHack
  • Pentera vs XHack
Resources
  • Platform Tour
  • All Features
  • Install the Agent
  • XHack AI
  • Documentation
  • Blog
  • Case Studies
  • Documents
  • FAQ
Company
  • About Us
  • Our Team
  • Certifications
  • Security and Trust
  • VAPT Explained
  • Contact

© 2026 XHACK (SMC-PRIVATE) LIMITED. All rights reserved.

Registered with the SECP, CUIN 0361945. Verify

Security & TrustVulnerability DisclosurePrivacy PolicyTerms of ServiceRefund Policy
Blog/Security

Subdomain Enumeration for Bug Bounty: Which Layer to Run and What Each One Costs

XHack

XHack

Author

October 25, 2026

15 min read

Subdomain Enumeration for Bug Bounty: Which Layer to Run and What Each One Costs

Table of contents

24

Subdomain Enumeration Is Four Jobs, Not One Tool

Layer 1 of Subdomain Enumeration: Free Passive Sources Are Mostly Keyed

The free ones break

Other aggregators

Layer 2 of Subdomain Enumeration: Certificate Logs, Tested on Our Own Domain

What a wildcard certificate hides

Stale names are free wordlist seeds

Layer 3 of Subdomain Enumeration: Brute Force Costs Resolvers, Not the Target

The limits you will hit

Wildcard DNS makes every guess look real

What the program rules say

Layer 4 of Subdomain Enumeration: Permutations Turn Found Names Into New Guesses

Match Subdomain Enumeration to the Scope

Subdomain Enumeration Tools Maintained in October 2026

A List of Names Is Not a Finding

Where XHack Fits in Subdomain Enumeration

FAQ: Subdomain Enumeration for Bug Bounty

What is subdomain enumeration in bug bounty?

Which subdomain enumeration tool should I run first?

Why does subdomain enumeration miss subdomains?

Do bug bounty programs allow subdomain enumeration by brute force?

How many sources does subfinder use for subdomain enumeration?

Is subdomain enumeration worth it on every bug bounty program?

The Bottom Line on Subdomain Enumeration

By Salman Khan, OSCP+, Founder of XHack, SRT (Synack Red Team member)

Read this in 30 seconds: Most subdomain enumeration guides hand you a tool list. The better question is which of four different jobs this program needs, because each one finds different names and costs different things.

  • Free passive tools are mostly keyed tools. subfinder has 58 source modules, and in its current code 37 require an API key, 5 accept an optional one and 15 need none. We counted them on October 25, 2026.
  • Free sources decay. subfinder’s own keyless test skips 14 sources, because they fail in its test runs, are blocked or now demand a key.
  • Certificate logs shrink fast. Our own domain has 89 certificate rows in crt.sh but only 9 distinct names, and one is a wildcard that hides every host behind it.
  • Brute force loads resolvers, not the target. Google Public DNS throttles above a default 1,500 queries per second per IP, and dnsx ships with its DNS rate limit switched off.
  • Scope decides whether subdomain enumeration pays. A wildcard puts every subdomain in play, and a fixed list of hosts leaves nothing to find.

Subdomain enumeration is four jobs sharing one name, and running them in the wrong order wastes your API keys, your resolvers and your standing with the program.

This guide splits subdomain enumeration into its four layers, shows what each layer finds and misses, and ties each one to the kind of scope you are working. Our recon automation post covers rates and a sample pipeline, so this one goes deeper on the subdomain enumeration step itself.

We did not run these tools for this article. Every number comes from the tools’ source code and documentation, the platforms’ own pages, or one passive lookup against our own domain.

Subdomain Enumeration Is Four Jobs, Not One Tool

A tool list hides the real choice in subdomain enumeration. Each layer asks a different question of a different source, and each one fails in a different way.

LayerWhat it asksTouches the target?Main costWhat it misses
1. Passive sourcesThird-party datasets: scanners, DNS history, search indexesNoAPI keysHosts no source has indexed yet
2. Certificate logsPublic records of issued TLS certificatesNoFreeHosts with no certificate, and names behind a wildcard certificate
3. Brute forceA resolver: does this guessed name exist?Not the web server. Resolvers ask the domain’s name serversResolver capacity, wordlist qualityAny name your list lacks
4. PermutationVariations of names you already foundSame as brute forceCPU and DNS queriesNames unlike anything you found

Verifying which names answer, and probing the live ones, comes after all four. That is a separate step and our recon automation guide covers it.

The four layers of subdomain enumeration for bug bounty, from passive sources to permutation, with what each one asks, costs and misses
Four layers, four different costs

Layer 1 of Subdomain Enumeration: Free Passive Sources Are Mostly Keyed

subfinder is the usual first tool for subdomain enumeration. Its README calls it a passive subdomain enumeration tool that uses curated online sources, and it adds that many sources need API keys to work.

We counted how many. In subfinder’s current source code, each of the 58 source modules declares whether it needs a key:

  • 37 require a key.
  • 5 accept an optional key.
  • 15 need none, including crt.sh, Wayback Archive, Common Crawl and ThreatMiner.
  • 1 module we could not classify.

That count comes from the dev branch on October 25, 2026. The latest tagged release is v2.17.0 from October 8, so a few modules may differ.

The arithmetic matters. Run subfinder with no keys and you query about 20 of its 58 sources, roughly a third.

The free ones break

subfinder’s test suite for keyless sources skips 14 of them, and the comments say why. Two appear blocked in the test environment, one moved to a new address, two sit behind bot protection or return a 403, and two now return errors without a key. The other seven are flaky, unavailable or under-resourced.

Those are test-run conditions, not proof that every user sees the same failures. They do show that a free source can stop working with no announcement, so a clean run on a single day is weak evidence that a name does not exist.

Other aggregators

OWASP Amass describes itself as network mapping and asset discovery using open source information and active reconnaissance. Version 5.1.2 shipped on October 25, 2026, and the v5.1.1 notes mention a new asset database with schema changes. Its Docker Compose example sets up a PostgreSQL database, so expect more setup than a single binary.

BBOT bundles several layers in one preset. Its README shows bbot -t example.com -p subdomain-enum for the full run and -rf passive for passive sources only. The README also claims BBOT finds 20 to 50 percent more subdomains than other tools. That is the vendor’s number and we did not test it.

For subdomain enumeration, two aggregators with different sources beat running one twice. That is our judgment, not a measured result.

Layer 2 of Subdomain Enumeration: Certificate Logs, Tested on Our Own Domain

Every publicly trusted certificate goes into public logs, and crt.sh is the usual search page. That makes certificate transparency the best free source for subdomain enumeration of names that have ever had a certificate.

We queried it for our own domain, xhack.io, with one request and no contact with our servers. We then resolved each name with ordinary DNS lookups. The results, counts only:

  • 89 certificate rows came back.
  • Those rows hold 9 distinct names, a drop of roughly ten to one, because every renewal, and each precertificate and certificate pair, repeats the same names.
  • 1 of the 9 is a wildcard (*. followed by the domain). The other 8 are plain names.
  • 6 of the 8 resolve today. One of those is a CNAME to a third-party service.
  • 2 no longer resolve: a staging-style name and a doubled www name that looks like a typo.

We are withholding the hostnames on purpose. The pattern is what matters.

Certificate transparency results for one real domain: 89 certificate rows, 9 distinct names, 6 resolving, 2 stale and 1 wildcard certificate that hides the hosts behind it
89 rows became 9 names, and one of them hides the rest

What a wildcard certificate hides

A wildcard certificate covers every host under the domain with one entry. The log shows the wildcard and nothing about which hosts use it. So CT cannot tell us how many hosts sit behind ours, and it will not tell you either.

That is our reading of how the logs work, not a statement from a source. It is also why a short CT list from a company with a wildcard certificate should not be read as a short attack surface.

Stale names are free wordlist seeds

The two names that no longer resolve are still useful. A staging-style name tells you the company’s naming habit. That habit is exactly the input layer 4 needs, so keep names that stopped resolving instead of deleting them.

Layer 3 of Subdomain Enumeration: Brute Force Costs Resolvers, Not the Target

Brute force in subdomain enumeration takes a wordlist, builds word.example.com for each entry and asks a resolver whether it exists. The load lands on the DNS infrastructure in between.

puredns is the common tool. It uses massdns for bulk lookups and, per its README, can resolve thousands of queries per second with a good list of public resolvers. Its own documentation warns that raw results get polluted: some public resolvers return bad answers and wildcards inflate the output. It filters those by checking answers against trusted resolvers, and its defaults are 8.8.8.8 and 8.8.4.4.

The limits you will hit

Two numbers decide how fast you can go:

  • Google Public DNS throttles each client above a default of 1,500 queries per second per IP address, and allows short bursts above it.
  • dnsx has a DNS rate option, -rl, that is disabled by default. Nothing caps the query rate unless you set it.

So you can hit a resolver’s limit with nothing more than a wordlist and default settings.

Wildcard DNS makes every guess look real

RFC 4592 explains why. A wildcard record is a template: when no record matches a queried name, the server synthesizes an answer from the wildcard. Names that really exist override it.

On a domain with wildcard DNS, every guessed name therefore answers for the record types the wildcard holds, and a brute-force list returns thousands of fakes. That is one reason puredns and dnsx include wildcard filtering.

We tested our own domain with a random label that cannot exist, and it did not resolve. So xhack.io has no wildcard record at the top level, and brute force against it would not produce that noise.

What the program rules say

We did not read every program’s rules, and the platform guidance we did read speaks about HTTP request rates. Intigriti’s guidance on aggressive scanning says some programs allow automated tools only at 2 to 10 requests per second. None of it names DNS brute force.

That silence is not permission. If a program bans automated tools outright, ask support before you run layer 3, and keep your DNS rate low either way.

Layer 4 of Subdomain Enumeration: Permutations Turn Found Names Into New Guesses

Brute force guesses from a generic list. Permutation, the last layer of subdomain enumeration, guesses from your list of real names, which is far more targeted.

If you found api.example.com, a permutation tool tries api2, api-stage, dev-api and similar variations. AlterX describes itself as a customizable subdomain wordlist generator that uses a small pattern language, and its latest release is v0.1.0 from December 2025. BBOT folds target-specific mutations into its full preset.

The names from layer 2 are the best seeds, including the ones that stopped resolving. Our own stale staging-style name is exactly the kind of input that produces a hit on a different host.

Every permutation is still a DNS query, so it runs under the same limits as layer 3.

Match Subdomain Enumeration to the Scope

The scope entry decides how much subdomain enumeration is worth your time. Reading it takes a minute and saves hours.

Scope as listedRunWhy
Fixed hostnames onlyNone. Test the listed hosts.New names are not in scope, and testing them can cost you the reward
Wildcard such as *.example.comLayers 1 and 2 always. Layers 3 and 4 if the rules allow automation.The asterisk puts every subdomain in scope unless the brief carves some out
Wildcard with exclusionsSame layers, then filter results through the exclusionsOut-of-scope hosts in your list are a risk, not a bonus
HackerOne Open ScopeLayers 1 and 2, limited to assets the program ownsOpen Scope rewards owned assets by impact even when they are unlisted
IP rangesReverse DNS and host discovery insteadThere is no domain to enumerate. See our host testing guide

Bugcrowd’s scope guidance, published in 2017, says an asterisk means all subdomains are in scope unless the out-of-scope section says otherwise, and that going out of scope can mean no reward and a hit to your reputation. HackerOne lists Wildcard as its own asset type, described as a way to specify multiple domains or subdomains, and tells programs to use it for wildcard scopes.

Our post on how to choose a bug bounty program shows where the scope rating and wildcard counts appear on each platform. Our methodology guide puts this work in phase 2.

Which subdomain enumeration layers to run for each kind of bug bounty scope: fixed hosts, wildcard, wildcard with exclusions, Open Scope and IP ranges
Match the layer to the scope entry

Subdomain Enumeration Tools Maintained in October 2026

Dates and licenses for these subdomain enumeration tools come from each project’s GitHub repository, read on October 25, 2026.

ToolJobLicenseLatest release
subfinderPassive sourcesMITv2.17.0, October 8, 2026
AmassPassive and active, asset databaseApache 2.0v5.1.2, October 25, 2026
BBOTPassive, brute force and mutationsAGPL-3.0v3.0.2, August 24, 2026
dnsxDNS toolkit with brute force and wildcard handlingMITv1.3.1, August 31, 2026
AlterXPermutation wordlistsMITv0.1.0, December 11, 2025
purednsBrute force with wildcard filteringGPL-3.0v2.1.1, April 11, 2023
massdnsBulk resolver behind purednsGPL-3.0v1.1.0, March 9, 2024
assetfinderPassive sourcesMITNo GitHub release

Two notes on that table. The puredns repository saw activity in February 2026 even though its last release is from 2023, which in our reading means slow maintenance rather than abandonment. And assetfinder has no GitHub release and its last commit was in June 2024, so we would not build a workflow on it.

A List of Names Is Not a Finding

Subdomain enumeration produces a list, and a list is worth nothing until you check it. The check with the clearest payoff is dangling DNS: a name that still points at a third-party service nobody uses anymore.

Our own domain shows the shape. One of the six live names is a CNAME to a third-party service. That is the kind of record a takeover check starts from. The community repository can-i-take-over-xyz lists services and whether each can be claimed.

Reporting it carries its own rule. HackerOne’s own program closes a subdomain takeover report without a takeover proof of concept as not applicable. The repository advises claiming the name discreetly, serving a harmless file on a hidden page and serving nothing on the index page. Some programs accept a dangling-record report without a claim, so read the policy first.

Where XHack Fits in Subdomain Enumeration

A short note before the pitch: we build an agent that does recon, so discount this section accordingly.

XHack AI is not a bug bounty platform, and it does not choose your program or read its scope for you. You give the agent your scope file, your rate limit and the techniques the program bans, and it works inside those limits. For subdomain enumeration it runs up to 12 sub-agents in parallel by default, which is useful on a wide wildcard where breadth is the bottleneck.

Section 6 of our terms says you test only what you are authorized to test, and section 10.1 says AI output can be incomplete or wrong. So you still check every host the agent lists against the program’s scope before it goes anywhere near a report.

XHack does not store your agent chats and cannot access them, so your scope notes and unreported findings stay with you. Our guide to the XHack AI agent for bug bounty has the detail.

Individual plans are $20 Starter, $49 Professional and $150 Elite per month. There is a 7-day free trial, one per person. The agent finds vulnerabilities from the start, and exploitation unlocks once your identity is verified.

FAQ: Subdomain Enumeration for Bug Bounty

What is subdomain enumeration in bug bounty?

Subdomain enumeration is the process of finding the hostnames that belong to a target domain, such as api.example.com, so you know which assets to test. It combines passive sources, certificate logs, brute force and permutation. On a wildcard scope, subdomain enumeration is usually the first real step of recon.

Which subdomain enumeration tool should I run first?

Run a passive tool first, such as subfinder, because it sends nothing to the target and you can run it before you have read the rate rules. Add certificate logs next, then brute force only if the program allows automation. For subdomain enumeration, a first run without API keys uses about 20 of subfinder’s 58 sources.

Why does subdomain enumeration miss subdomains?

Each layer of subdomain enumeration has a blind spot. Passive sources only know what they indexed, certificate logs hide names behind a wildcard certificate, and brute force only finds names in your wordlist. Free sources can also stop working without notice, so one clean run does not prove a name is absent.

Do bug bounty programs allow subdomain enumeration by brute force?

The rules we read cover HTTP request rates, such as the 2 to 10 requests per second Intigriti says some programs allow, and do not name DNS brute force. If a program bans automated tools, ask its support before running it. Keep the DNS rate low in any case, since Google Public DNS throttles above 1,500 queries per second per IP.

How many sources does subfinder use for subdomain enumeration?

subfinder has 58 source modules. In its current code, 37 require an API key, 5 accept an optional key and 15 need none, with one module we could not classify. Counts can shift between releases, so check with subfinder -ls on your own install.

Is subdomain enumeration worth it on every bug bounty program?

No. If a program lists fixed hostnames only, subdomain enumeration finds names that are out of scope, and testing them can cost you the reward. It pays on wildcard scopes and on HackerOne Open Scope, where unlisted owned assets can still be rewarded.

The Bottom Line on Subdomain Enumeration

Subdomain enumeration is a ladder, and you climb only as far as the scope and the rules allow. Start subdomain enumeration with the free layers that touch nothing, add resolver-heavy layers only when the program permits them, and keep every name that stopped resolving as input for the next round.

Before you run any subdomain enumeration, read the scope entry, set your DNS rate and write the exclusions into a file your tools check. After that, a name without a verification is only a list, so check the dangling ones first.


Categories

Security

Next

CVE-2026-110447: A Nextcloud Collabora Command Injection Fixed as a Tidy-Up Commit

On this page

Subdomain Enumeration Is Four Jobs, Not One Tool

Layer 1 of Subdomain Enumeration: Free Passive Sources Are Mostly Keyed

The free ones break

Other aggregators

Layer 2 of Subdomain Enumeration: Certificate Logs, Tested on Our Own Domain

What a wildcard certificate hides

Stale names are free wordlist seeds

Layer 3 of Subdomain Enumeration: Brute Force Costs Resolvers, Not the Target

The limits you will hit

Wildcard DNS makes every guess look real

What the program rules say

Layer 4 of Subdomain Enumeration: Permutations Turn Found Names Into New Guesses

Match Subdomain Enumeration to the Scope

Subdomain Enumeration Tools Maintained in October 2026

A List of Names Is Not a Finding

Where XHack Fits in Subdomain Enumeration

FAQ: Subdomain Enumeration for Bug Bounty

What is subdomain enumeration in bug bounty?

Which subdomain enumeration tool should I run first?

Why does subdomain enumeration miss subdomains?

Do bug bounty programs allow subdomain enumeration by brute force?

How many sources does subfinder use for subdomain enumeration?

Is subdomain enumeration worth it on every bug bounty program?

The Bottom Line on Subdomain Enumeration

Related articles

Continue reading

Bug Bounty Program Selection: How to Choose One Worth Your Time in 2026

Security

Bug Bounty Program Selection: How to Choose One Worth Your Time in 2026

A bug bounty program page already shows its response times, real payouts and rules. How to read them and score any progr...

Read article
Bug Bounty Report Writing: What Actually Gets You Triaged Fast

Security

Bug Bounty Report Writing: What Actually Gets You Triaged Fast

Bug bounty report writing advice backed by real data: 70% of reports are rejected by AI triage before a human sees them....

Read article
MCP Server Vulnerabilities: A Bug Hunter’s Guide to Finding and Reporting Them

Security

MCP Server Vulnerabilities: A Bug Hunter’s Guide to Finding and Reporting Them

MCP server vulnerabilities are real: two NVD-verified CVEs, six bug classes to test, and the honest state of bug bounty ...

Read article