Subdomain enumeration
Given a bare domain (example.com), returns every subdomain we can find β live or dead, internal or external. Essential first step for attack-surface monitoring.
Sources
Pentestas queries and merges:
- Certificate transparency β crt.sh, Cert Spotter
- Passive DNS β SecurityTrails, VirusTotal, RiskIQ PassiveTotal
- Active brute-force β wordlist of ~120,000 common subdomain labels
- Wayback Machine β historical URLs
- Google / Bing dorks β SERP extraction for
site:-prefixed queries - ASN sweep β PTR records across IP ranges you own (Enterprise)
Sources are deduped + scored; each finding carries the list of sources that confirmed it.
Enrichment
Every discovered subdomain is then:
- DNS resolved β A + AAAA records.
- Live-checked β HTTP(S) probe with a realistic User-Agent; status + server + title.
- Port-scanned β common ports (22, 80, 443, 3000, 8080, 8443) by default; full scan on request.
- WAF fingerprinted β Cloudflare, Akamai, AWS WAF, etc.
- Takeover-checked β DNS points at a deprovisioned SaaS (Heroku, S3, GitHub Pages, Azure, Netlify) β flagged.
Usage
UI
New scan β Subdomain enumeration β enter domain β start.
API
curl -X POST https://app.pentestas.com/api/subdomain-scan \
-H "X-API-Key: aa_..." \
-d '{"domain":"example.com"}'
Returns a list of {subdomain, ip, alive, status, source, open_ports}.
Public (anonymous) variant
Unauthenticated + rate-limited at 10/hour per IP:
curl "https://app.pentestas.com/api/public/subdomain?domain=example.com"
Good for a quick recon pass; Pro+ required for CSV export + CI-triggerable scans.
Subdomain takeover
A dedicated check compares each discovered subdomain's DNS target against known fingerprints for ~80 SaaS providers. If blog.example.com points at example.github.io but the GitHub Pages site no longer exists, you get a CRITICAL takeover finding β anyone can claim the name and serve arbitrary content under your domain.
Typical output
For a medium company, expect 100β2,000 subdomains. Common buckets:
www,mail,api,app,admin- Environment variants:
staging.api.example.com,dev.app.example.com - Vendor-managed:
status.example.com(Statuspage),help.example.com(Zendesk),jobs.example.com(Greenhouse) - Forgotten / abandoned:
old.example.com,beta2019.example.comβ these are where takeovers live - Internal-mistaken-for-external:
internal-admin.example.comresolving publicly when it shouldn't
See also
- Cloud storage scan β pair with this for full external asset discovery
- Web app scan β take interesting subdomains and run a full scan