Subdomain enumeration is the process of discovering every subdomain tied to a root domain — app., staging., vpn., old-crm. — using passive sources like Certificate Transparency logs and DNS aggregators, active brute-forcing against wordlists, DNS resolution, and live-host probing. For most Indian organisations, the subdomain list a security team can name from memory covers less than half of what actually resolves and serves traffic. The rest — forgotten staging environments, marketing microsites, dev boxes someone spun up two years ago — is exactly where attackers start, because it's exactly where defenders stop looking.
Why Attack Surface Starts With Subdomains
Every subdomain is a potential entry point: a login form, an API, an admin panel, a file upload endpoint. Security teams tend to think in terms of the "main" application and one or two known integrations. Attackers think in terms of the entire DNS tree under a company's root domain, because tooling makes enumerating it trivial and cheap. A subdomain running an old CMS, a test instance with default credentials, or a decommissioned app still pointing at a live cloud resource is rarely on anyone's patch schedule — precisely why it becomes the path of least resistance.
This is asset inventory, not just reconnaissance. You cannot secure, patch, or monitor an asset your team doesn't know exists. Subdomain enumeration is how both attackers and defenders answer the same first question: what is actually out there?
Passive Subdomain Enumeration: Reading What's Already Public
Passive techniques discover subdomains without sending a single packet to the target — they mine data sources that already exist.
Certificate Transparency (CT) logs are the single richest passive source. Every publicly trusted TLS certificate is logged in a public, append-only ledger, and it almost always lists the exact hostname it was issued for. A site like crt.sh lets you query these logs by domain and instantly surface every subdomain ever issued a certificate — including short-lived staging certs nobody remembered to revoke.
Other passive sources feed the same pool:
- DNS aggregators and historical resolvers — continuously crawl and archive DNS records, surfacing hostnames seen in the past even if they no longer resolve today.
- Search engine dorking —
site:operators and cached results occasionally reveal subdomains indexed before being taken offline. - Public code repositories — CI/CD configs and
.envexamples committed publicly routinely leak internal hostnames. - Passive DNS databases — third-party datasets logging DNS answers observed across the wider internet.
amass and subfinder automate querying dozens of these sources in a single run, aggregating and deduplicating results far faster than manual lookups.
Active Brute-Forcing: Filling the Gaps
Passive sources only reveal subdomains that left a public trace — a certificate, an indexed page, a leaked config. Subdomains never issued a public cert and never indexed simply won't show up. Active brute-forcing closes that gap by systematically testing candidate hostnames (dev., test., internal., api-v2.) against a wordlist and checking which ones resolve in DNS.
This works because organisations reuse naming conventions across teams and time — staging, uat, qa, preprod, admin, vpn — and wordlists built from real-world corpora capture that pattern reliably. Combined with resolution at scale, brute-forcing can surface subdomains kept off any public certificate or search index because someone assumed obscurity was protection.
| Technique | Data source | Finds hidden assets | Speed | Detectable |
|---|---|---|---|---|
| CT log lookup | Certificate logs | Only issued certs | Instant | No |
| DNS aggregator query | Passive DNS | Previously observed hosts | Fast | No |
| Wordlist brute-force | DNS resolution | Anything matching wordlist | Moderate | Yes |
| Permutation scanning | Known-name variants | Variants of known subdomains | Moderate | Yes |
Know your vulnerabilities before attackers do
Run a free VAPT scan — takes 5 minutes, no signup required.
Book Your Free ScanResolution and Live-Host Probing
A raw subdomain list is a starting point, not an attack surface map. The next step is DNS resolution — confirming which candidate hostnames actually have an A, AAAA, or CNAME record — followed by live-host probing, which checks whether something is actually listening and responding on HTTP or HTTPS.
This is where the list shrinks and gets interesting. An enumeration pass might return a thousand candidate hostnames; resolution might confirm two hundred actually exist; live-host probing, using a generic HTTP toolkit like httpx, might show only sixty serving an active response. Those sixty are your real, present-tense attack surface. The rest are either dead, or — more concerning — resolving to infrastructure with no maintained application behind it.
Screenshotting live hosts at scale is the standard next move: automated tools capture a visual snapshot of every responding subdomain, letting a team triage hundreds of hosts in minutes instead of opening each manually. A login page, a default splash screen, an exposed admin dashboard, or an unauthenticated build tool all look immediately different in a screenshot grid — which is the point.
Forgotten Assets and the Subdomain Takeover Risk
The most dangerous finding in an enumeration exercise isn't a live, well-defended app — it's a subdomain whose DNS record still points at a cloud resource (a CDN endpoint, a storage bucket, a PaaS app) that was deleted without anyone removing the DNS entry. Anyone who claims that same resource name on the provider's side can now serve content under your organisation's trusted subdomain, complete with a valid TLS certificate. This is a subdomain takeover — one of the most common real-world findings, precisely because deprovisioning a service and cleaning up its DNS record are two separate, easily-forgotten steps.
Beyond takeover risk, forgotten subdomains commonly represent:
- Shadow IT — a marketing team's landing-page builder, spun up outside normal provisioning and never inventoried centrally.
- Stale test environments — staging or QA instances left internet-facing with weaker authentication than production.
- M&A leftovers — subdomains from an acquired brand or legacy product line nobody formally decommissioned.
- Third-party integrations — vendor-managed subdomains that fall outside the primary team's patch cadence.
Building Enumeration Into Ongoing Asset Inventory
Enumeration done once, during an annual audit, is a snapshot that starts going stale the moment a new subdomain is provisioned. DevOps teams create subdomains constantly — feature branches, client demos, short-lived campaigns — and each one is a new attack surface entry security may never hear about. Treating enumeration as continuous (weekly or monthly passive re-scans, diffed against the last known list) turns a one-time exercise into an actual asset inventory control.
That inventory should feed directly into patch management, certificate tracking, and access review — because an asset that isn't inventoried is, by definition, an asset that isn't governed. This is also foundational under India's DPDP Act, 2023, enacted under the framework maintained by MeitY — you cannot show you've secured data processing systems you haven't identified as existing.
Turning Enumeration Into Action
A subdomain list, even a complete one, is only useful if it drives action: decommissioned assets get DNS records removed, unpatched hosts get added to the patch cycle, and shadow IT gets brought under governance. Structure the output as a living register, not a report that sits in a shared drive:
| Finding type | Immediate action | Owner |
|---|---|---|
| Live host, known and patched | Confirm in asset inventory, no action | Security/IT |
| Live host, unknown to team | Investigate ownership, bring under governance | Security + relevant BU |
| Dangling CNAME, service deprovisioned | Remove DNS record or reclaim resource immediately | DevOps/Platform |
| Live host, outdated software or default creds | Escalate for patching or decommission | Security/IT |
| Certificate issued, host no longer resolves | Verify decommission is complete, revoke cert if active | Security/IT |
Getting Started Without Overreach
If you're running this for the first time, start narrow and passive: query CT logs and a DNS aggregator for your own root domain, build the candidate list, resolve it, and probe for live hosts before attempting any active brute-forcing. Brute-forcing domains you don't fully control — including cloud-hosted subdomains shared with a provider's other tenants — carries operational and, without proper scoping, legal risk. Keep the exercise to assets your organisation directly owns.
Passive sources give speed and safety; brute-forcing and resolution fill the gaps; live-host probing and screenshotting turn a raw list into a triageable inventory. Treating the whole process as continuous, not annual, is what prevents the next forgotten staging box from becoming next quarter's breach headline.
Want a full-scope view of your organisation's real attack surface, subdomains included? Book a free VAPT scan or read more security engineering breakdowns on the Bachao.AI blog.