๐ฐ๏ธ Reconnaissance Methodology
Reconnaissance Methodology
Reconnaissance is inventory work. The goal is not to find a vulnerability โ it is to end up with a defensible list of everything that carries the organisation's name and faces the internet: hostnames, addresses, services, technologies, certificates and the humans responsible for each one. Attackers do this because they are looking for the one asset nobody remembered. Defenders do it because the asset nobody remembered is theirs.
Almost every finding in a real engagement traces back to something that was not on anybody's list: a staging host from a project that shipped two years ago, an old marketing subdomain still pointed at a decommissioned cloud bucket, a forgotten admin panel on a non-standard port. None of those are clever exploits. They are inventory failures.
Passive versus active โ where the line actually sits
The distinction is not "safe versus dangerous". It is whose systems receive your packets.
- Passive reconnaissance queries third parties that already hold information about the target. The target's own servers see nothing. You are talking to a registry, a certificate transparency log, a search engine, an archive.
- Active reconnaissance sends traffic to infrastructure the target controls. Their web server, their authoritative nameserver, their firewall, their WAF โ all of them can and usually do log it, with your source address attached.
Two nuances that trip people up. First, resolving a name through a public resolver is normally passive, but a query for a record that is not cached will be forwarded to the target's authoritative nameserver, and their DNS logs will show it โ attributed to the resolver, not to you, but it is still traffic they caused to receive. Second, passive does not mean lawful. Scraping, harvesting personal data, or aggregating information about individuals can breach data-protection law and platform terms regardless of how quiet it was. Quiet is not the same as permitted.
Passive sources, and what each is actually good for
| Source | What it yields | Notes |
|---|---|---|
| RDAP / WHOIS | Registrar, creation and expiry dates, nameservers, EPP status codes, sometimes an abuse contact | RDAP (query format RFC 9082, JSON responses RFC 9083) is the structured successor to port-43 WHOIS. Registrant details are usually redacted. |
| DNS records | A / AAAA, MX, NS, TXT, CNAME, SOA โ mail providers, SaaS verification tokens, cloud regions | TXT records are a confession: google-site-verification, atlassian-domain-verification, SPF include: chains all name third-party suppliers. |
| Certificate Transparency logs | Hostnames โ by a wide margin the best modern source of subdomains | See below. |
| ASN / netblock data | Which address ranges an organisation announces, and who their upstreams are | Only useful when the target actually owns address space; most small organisations do not. |
| Search-engine dorking | Indexed files, exposed directories, login pages, error messages, documents with metadata | Operators such as site:, filetype:, inurl:, intitle:. The search engine fetched the page, not you. |
| Job listings | Technology stack, versions, team structure, cloud provider | "Must have 5 years with Oracle WebLogic and Jenkins" is a technology inventory written by the target. |
| Public code repositories | Internal hostnames, API endpoints, config templates, committed secrets | Deleted secrets survive in git history. Check the history, not just the tip. |
| Web archives | Pages, endpoints and files that were removed but never taken offline | An admin path deleted from the nav in 2019 is frequently still routable. |
Why certificate transparency changed subdomain enumeration
Certificate Transparency (RFC 6962; version 2 is specified in RFC 9162) has publicly trusted certificate authorities submit every certificate they issue to public, append-only logs. Chrome has required CT compliance for certificates issued since 30 April 2018, and other major browsers followed, so in practice a publicly trusted certificate that is not logged will not be accepted by browsers. That means the subjectAltName list of essentially every public certificate is a matter of public record.
The consequence for recon: you no longer have to guess subdomains. vpn-test.example.com, jira-internal.example.com and kubernetes-dashboard.example.com will be in the logs the moment somebody requests a certificate for them โ even if those names never appear in public DNS. Brute-force wordlists still have a place for names that never got a certificate, but CT is the first stop. The one blind spot is wildcards: a certificate for *.example.com discloses exactly one name. Search certificate transparency โ
Active reconnaissance, and what it costs you
- Resolution of candidates. Take the CT hostname list and find out which names still resolve, and to what. Names that resolve to a cloud provider's address but return a "no such bucket / no such app" error are potential subdomain takeovers โ a dangling CNAME is one of the most common high-severity findings in bug bounty.
- Port and service scanning. A TCP connect scan completes the handshake, so it is reliable and unambiguously logged. Every closed-port attempt may hit an IDS threshold; every open-port connection lands in an application log.
- Banner grabbing. Reading the greeting a service sends on connect (SSH version string, SMTP
220banner, HTTPServerheader). Cheap, and often the fastest route to a version number. - Web fingerprinting. Response headers, cookie names, error page wording, framework-specific paths and JavaScript bundles identify the stack without any exploitation.
The output: an attack-surface inventory
Findings that stay in a terminal scrollback are not results. The deliverable is a table, and every row should be answerable by a human owner:
| Column | Example | Why it is there |
|---|---|---|
| Hostname | staging-api.example.com | The unit people talk about |
| Resolves to | 198.51.100.24 | Where traffic actually lands |
| Network owner | Cloud provider / own range / third-party SaaS | Determines who you must ask before touching it |
| Open services | 443/tcp, 22/tcp | The actual exposure |
| Technology | nginx, Django, Cloudflare in front | Drives what is worth checking |
| Certificate expiry | 2026-11-02 | Outages are a security incident too |
| Business owner | Platform team | Without this, nothing gets fixed |
| Environment | staging | Non-production exposed to the internet is a finding by itself |
A worked order of operations using the tools on this page
Steps 1โ6 are passive. Step 7 sits on the boundary โ resolution reaches the target's authoritative nameservers, even though the request goes via a resolver. From step 8 on you are sending traffic to the target: do not go past that line without authorisation.
- Scope first. Write down the domains, addresses and applications you are permitted to touch, and the source of that permission, before running anything.
- Registration and ownership. WHOIS / RDAP โ for registrar, dates, nameservers and lock status.
- Full DNS picture. Run a DNS audit โ to pull every record type at once, then read the TXT records for suppliers and the MX records for the mail provider.
- Hostnames from CT. Certificate transparency search โ. Deduplicate, and keep the wildcard entries as a note that names are hidden.
- Network context. Prefix and origin ASN โ tells you whether an address belongs to the organisation, a hosting provider or a CDN. This changes who owns the risk and who you would need to notify.
- Public leakage. Build search-engine queries โ for indexed files and exposed paths, and generate look-alike domains โ to check whether somebody is impersonating the brand.
- Resolve the candidates. DNS lookup โ each hostname from step 4. Note dangling CNAMEs pointing at unclaimed third-party resources.
- Reachable services. Port scan โ one authorised host at a time, and measure TCP latency โ if you need to tell a filtered port from a slow one. For a thorough scan on your own network, build the nmap command โ and run it from your own machine.
- Web layer. Header and redirect analysis โ, technology fingerprint โ, and WAF / CDN detection โ so you know whether you are looking at the origin or an edge.
- Find the contact. security.txt lookup โ. Do this early โ you may need it sooner than you expect.
- Obvious exposures. Sensitive path check โ for
.git,.env, backups and status endpoints. Actively probing, authorised targets only. - Keep it alive. Batch certificate expiry โ over the final hostname list turns a one-off exercise into monitoring. For a fast first pass over a single domain, the recon sweep โ runs most of the passive steps in one request.
Scoping: "it resolved to their IP" is not authorisation
The most common way a well-intentioned researcher gets into trouble is scope drift. Guard against it:
- A shared address is not the target's address. Scanning a CDN or shared-hosting IP means scanning infrastructure belonging to a provider and, potentially, hundreds of unrelated tenants. The provider's acceptable-use policy governs, and the target cannot waive it on their behalf.
- Cloud addresses are recycled. An address that answered for the target this morning may belong to a different customer this afternoon. Re-resolve before every session; test names, not stale addresses.
- Wildcard scope has edges.
*.example.comin a bug bounty policy routinely includes CNAMEs pointing at third-party SaaS. The organisation can authorise testing of its own systems; it cannot authorise testing of its vendor's. - Related domains are not in scope by default. A brand-protection domain, an acquisition, or a country variant is a separate asset with separate ownership until somebody puts it in writing.
- Volume is part of scope. A scan aggressive enough to degrade a service turns a permitted test into an availability incident. Agree rates and hours.
Passive recon on a target you have no relationship with is generally unremarkable; the moment you send packets to their infrastructure you need permission. Details are in Authorisation, Ethics & Disclosure.
- Recon produces an inventory, not a list of findings. If a hostname has no owner and no environment label, the work is not finished.
- Passive means the target's own systems receive nothing โ it does not automatically mean lawful or ethical.
- Certificate transparency is the highest-yield passive subdomain source; wildcards are its only real blind spot.
- Every active probe is logged with your source address. Plan on being seen.
- Scope is per-asset, per-owner and per-rate. Resolution is a DNS fact, never a permission.