Saltar al contenido
Breachfolio
Dominios vs subdominios: cómo enumerarlos.
CIBERSEGURIDAD · OSINT

Dominios vs subdominios: cómo enumerarlos.

De qué se compone un dominio, por qué los subdominios son superficie de ataque y cómo enumerarlos –pasiva y activamente– con crt.sh, Amass, subfinder y más.

18 de julio, 202613 min de lecturaDaniel A. y Óscar S.

Toda investigación, todo encargo de bug bounty y la fase de reconocimiento de todo atacante empiezan en el mismo sitio: un nombre. Antes de que nadie toque un servicio, quiere saber cómo de grande es el objetivo en realidad, y la respuesta sincera casi siempre es «más grande de lo que sugiere la web de marketing». Ese hueco entre example.com y las decenas de nombres de host olvidados que cuelgan de él es donde vive una enorme cantidad de riesgo real. Este artículo desmonta el nombre, explica de dónde salen los subdominios y recorre cómo enumerarlos bien: de forma pasiva, de forma activa y de forma responsable.

ejemplo.comwwwmaildevapishop
Un dominio, muchos subdominios – cada uno una superficie de ataque.

Anatomía de un nombre de dominio

Un nombre de dominio parece una sola cosa, pero en realidad es una pila de etiquetas que se leen de derecha a izquierda, cada una un nivel de delegación en una jerarquía global. Coge un nombre completamente cualificado como api.staging.example.com y desármalo:

ParteEjemploQué es
Raíz. (implícita)La cima sin nombre del árbol. Está ahí de verdad: example.com. con un punto final es el FQDN auténtico.
TLDcomDominio de nivel superior. Gestionado por un registro (Verisign para .com) bajo la ICANN. Puede ser un gTLD (.com, .io) o un ccTLD (.uk, .es).
Dominio de segundo nivelexampleLa etiqueta que registras y pagas. example + .com es el dominio registrable: la unidad que WHOIS conoce.
Subdominiostaging, apiCualquier etiqueta a la izquierda del dominio registrable. Los creas tú mismo, gratis, tantos como quieras.
FQDNapi.staging.example.comEl nombre de dominio completamente cualificado: la ruta completa e inequívoca del host a la raíz.

Dos sutilezas confunden a la gente. Primera, «www» no es especial: www.example.com es solo un subdominio llamado www, en nada distinto en su naturaleza de api o vpn. Segunda, la frontera entre «dominio registrable» y «subdominio» no siempre está a dos etiquetas desde la derecha. Bajo example.co.uk, el dominio registrable tiene tres etiquetas de profundidad porque co.uk es un TLD efectivo. La Public Suffix List es el mapa autoritativo de dónde cae esa línea, y toda herramienta de enumeración seria la consulta para no confundir co.uk con el subdominio de alguien.

Qué es un subdominio, y por qué le importa a la seguridad

Un subdominio es simplemente una entrada DNS que el propietario del dominio creó bajo un nombre que controla. No hay registrador, ni tarifa, ni paso de aprobación: quien controla la zona DNS de example.com puede hacer aparecer internal.example.com en segundos. Esa comodidad es exactamente por lo que los subdominios importan tanto a un defensor o a un investigador.

  • Son la superficie de ataque. El dominio registrable es una marca; los subdominios son las máquinas, aplicaciones y API reales. Cartografiarlos es cartografiar el objetivo. Diez subdominios que no conocías son diez servicios que nadie parchea, vigila ni tiene en mente.
  • Filtran entornos. Nombres como dev., staging., uat., test., jenkins. o vpn. anuncian sistemas no productivos que a menudo se montan por comodidad, no por robustez: credenciales por defecto, errores verbosos, sin WAF, software obsoleto. Un atacante que no puede entrar por la puerta principal entrará encantado por staging.
  • Permiten el subdomain takeover. Un subdominio que apunta (vía CNAME) a un servicio en la nube que ya no existe puede ser reclamado en silencio por un atacante; más sobre esto abajo.

Por eso la enumeración de subdominios es una habilidad fundamental de OSINT y reconocimiento. Si eres nuevo en la disciplina más amplia, nuestra guía sobre qué es OSINT y el flujo de trabajo que lo rodea pone este paso en contexto: la enumeración es la fase de «pivotar hacia fuera», donde un artefacto (un dominio) se usa para descubrir el siguiente (sus hosts).

Los registros DNS que hacen reales a los subdominios

Un subdominio solo «existe» en internet porque un registro DNS responde por él. Entender los tipos de registro es lo que separa una lista de nombres de una comprensión de la infraestructura que hay detrás. El propio proceso de resolución lo cubrimos en cómo funcionan las redes; aquí está el subconjunto práctico que importa para la enumeración:

RegistroResponde a la preguntaPor qué importa en la enumeración
A¿En qué dirección IPv4 está este host?Confirma que un nombre está vivo y apunta a algún sitio. Invierte la IP para encontrar vecinos.
AAAA¿En qué dirección IPv6 está este host?Cada vez más común; a veces los hosts exponen IPv6 sin el mismo firewall que IPv4.
CNAME¿De qué otro nombre es alias este nombre?El registro clave para la caza de takeovers: un CNAME que apunta a un servicio sin reclamar es la vulnerabilidad.
MX¿Qué servidores gestionan el correo de este dominio?Revela el proveedor de correo y, a menudo, la nomenclatura de las pasarelas internas.
TXTTexto arbitrario: SPF, DKIM, tokens de verificación.Los registros SPF enumeran IP emisoras y servicios de terceros; los tokens de verificación identifican el SaaS que usa una empresa.
NS¿Qué servidores de nombres son autoritativos para esta zona?Identifica el proveedor de DNS y puede revelar subzonas delegadas gestionadas por otros equipos.

Puedes sacar cualquiera de estos con dig. Un vistazo rápido a los registros de un nombre que estás investigando te dice si es un host real, un alias o un extremo de correo:

$ dig +short A api.example.com
203.0.113.42

$ dig +short CNAME assets.example.com
example-cdn.s3.amazonaws.com.

$ dig +short TXT example.com
"v=spf1 include:_spf.google.com include:mailgun.org ~all"

Esa única línea de SPF ya te dice que la organización usa Google Workspace y Mailgun: inteligencia de infraestructura, directa desde un registro público, sin tocar el objetivo ni una vez.

Enumeración pasiva vs activa

Hay dos formas fundamentalmente distintas de descubrir subdominios, y saber en qué modo estás en cada paso es a la vez una decisión de seguridad operativa (OPSEC) y, a veces, legal.

La enumeración pasiva lee datos de subdominios de terceros –registros de certificados, índices de buscadores, bases de datos de DNS pasivo– y nunca envía un paquete al objetivo. El objetivo no tiene forma de saber que miraste. La enumeración activa resuelve o solicita nombres contra la propia infraestructura del objetivo: consulta sus resolvers DNS, se conecta a sus servidores y puede quedar registrada. La fuerza bruta de subdominios es activa por definición. Como regla, empieza en modo pasivo y solo pasa a activo dentro de un alcance autorizado.

TécnicaModoHerramientaCuándo usarla
Búsqueda en Certificate TransparencyPasivacrt.shSiempre; la primera pasada más rápida y silenciosa. Los registros de CT filtran nombres que nadie pretendía publicar.
Fuentes pasivas agregadasPasivasubfinder, Amass (pasivo), assetfinderUn primer barrido amplio que tira de decenas de conjuntos de datos a la vez.
DNS pasivo / DNS históricoPasivaSecurityTrails, VirusTotal, NetcraftCuando quieres histórico: nombres que resolvían en el pasado pero se eliminaron.
Resolución / validación DNSActivadnsxPara confirmar qué nombres descubiertos están realmente vivos antes de actuar sobre ellos.
Fuerza bruta de DNSActivagobuster, ffuf, Amass (activo)Solo en objetivos autorizados: para encontrar nombres que no aparecen en ningún conjunto de datos público.
Detección de takeoverActivasubjack, nucleiTras la enumeración, para probar si los CNAME colgantes son reclamables.

Enumeración pasiva, con comandos

Certificate Transparency (crt.sh)

Todo certificado TLS de confianza pública queda registrado en registros de Certificate Transparency de solo adición (append-only), el mecanismo que explicamos en certificados TLS y Certificate Transparency. Como un certificado nombra los hosts que cubre, esos registros son una lista accidental y autoritativa de los subdominios de una organización. La vía más fácil es crt.sh, consultable desde el navegador o la línea de comandos:

# Todos los nombres jamás certificados bajo example.com, sin duplicados
$ curl -s "https://crt.sh/?q=%25.example.com&output=json" \
    | jq -r '.[].name_value' \
    | sed 's/\*\.//g' \
    | sort -u
api.example.com
dev.example.com
mail.example.com
vpn.example.com
...

El %25 es un % codificado como URL, el comodín SQL que crt.sh entiende. Esta única petición, enviada a un tercero y nunca al objetivo, a menudo devuelve más nombres de host reales que cualquier otra técnica individual.

Agregadores: subfinder, Amass, assetfinder

subfinder (de ProjectDiscovery) consulta decenas de fuentes pasivas a la vez y es la opción rápida por defecto:

$ subfinder -d example.com -silent
api.example.com
blog.example.com
cdn.example.com
staging.example.com

Amass, el proyecto de OWASP, es el más exhaustivo. Ejecútalo en modo pasivo para permanecer del todo fuera del objetivo mientras tira de su amplia lista de fuentes:

$ amass enum -passive -d example.com

assetfinder es una herramienta diminuta y rápida que rasca un puñado de las fuentes de mayor valor; perfecta para encadenar con otras herramientas:

$ assetfinder --subs-only example.com | sort -u

En la práctica ejecutas varias y fusionas los resultados, porque ninguna fuente por sí sola es completa:

$ { subfinder -d example.com -silent; assetfinder --subs-only example.com; } \
    | sort -u > subs-passive.txt

Enumeración activa, con comandos

Autorización primero

Todo lo de esta sección envía tráfico a la infraestructura que estás enumerando. Ejecútalo solo contra dominios que posees o para los que tienes autorización explícita y por escrito para probar (tus propios activos, un alcance de pentest firmado o la lista dentro de alcance de un programa de bug bounty). Hacer fuerza bruta y resolver nombres contra un objetivo que no tienes permiso para probar puede constituir actividad no autorizada. Observa, no te entrometas.

Validar lo que encontraste (dnsx)

Una lista pasiva está llena de nombres muertos: hosts que se dieron de baja o que nunca llegaron a estar vivos. dnsx resuelve la lista contra el DNS y se queda solo con los que responden, mostrando opcionalmente los datos del registro:

$ cat subs-passive.txt | dnsx -silent -a -resp
api.example.com    [203.0.113.42]
cdn.example.com    [198.51.100.10]
vpn.example.com    [203.0.113.77]

Fuerza bruta de DNS (gobuster, ffuf, Amass activo)

Algunos subdominios no aparecen en ningún conjunto de datos público. La única forma de encontrarlos es adivinar nombres candidatos a partir de un diccionario y comprobar cuáles resuelven. gobuster en modo dns es el clásico:

$ gobuster dns -d example.com \
    -w subdomains-top1million-5000.txt
Found: grafana.example.com
Found: git.example.com
Found: backup.example.com

Los buenos diccionarios vienen de SecLists (la carpeta Discovery/DNS). Para encontrar virtual hosts –sitios distintos servidos desde la misma IP según la cabecera Host–, ffuf hace fuzzing de esa cabecera y filtra el tamaño de la respuesta por defecto:

$ ffuf -w subdomains.txt \
    -u https://example.com \
    -H "Host: FUZZ.example.com" \
    -fs 4242

Amass también puede hacer resolución activa y fuerza bruta cuando quitas el flag -passive y añades -brute: potente, y firmemente en el terreno de «solo objetivos autorizados».

DNS con comodín y falsos positivos

Antes de fiarte de un resultado de fuerza bruta, comprueba si hay un registro comodín (wildcard). Una entrada *.example.com hace que todos los subdominios posibles resuelvan a la misma dirección, así que una fuerza bruta ingenua reportará miles de hosts «encontrados» que en realidad no existen. La prueba es una única consulta por un nombre que ningún administrador cuerdo crearía:

$ dig +short definitely-not-real-8f3a9.example.com
198.51.100.200   <- una respuesta significa que hay un comodín en juego

Si un nombre basura aleatorio resuelve, la zona tiene un comodín, y debes filtrar en consecuencia: anota la IP del comodín y descarta cualquier nombre de fuerza bruta que resuelva a ella, o usa una herramienta que lo haga automáticamente. Amass, el resolver de subfinder y dnsx incluyen todos lógica de filtrado de comodines precisamente porque es una fuente de ruido tan común. La lección general vale para todo el OSINT: un resultado que no has corroborado es una pista, no un hallazgo.

Subdomain takeover

Un subdomain takeover es uno de los problemas de mayor impacto que la enumeración saca a la luz. El montaje: una empresa crea promo.example.com como un CNAME que apunta a un servicio de terceros –un bucket en la nube, una app de Heroku, un sitio de GitHub Pages, una landing de SaaS–. Más tarde, elimina el recurso en el proveedor pero se olvida de quitar el registro DNS. El CNAME queda ahora colgante: apunta a un nombre de servicio que cualquiera puede registrar.

Si un atacante registra ese nombre de servicio, el propio DNS de la víctima envía ahora a los visitantes a contenido controlado por el atacante en un nombre de host de aspecto legítimo. Eso permite un phishing convincente, robo de cookies con alcance al dominio padre y evasiones de la confianza same-site. La señal reveladora es un CNAME a un proveedor conocido combinado con la página de error «no such app / bucket not found» de ese proveedor:

$ dig +short CNAME promo.example.com
example-promo.herokuapp.com.

$ curl -s https://promo.example.com | grep -i "no such app"
<title>No such app</title>   <- CNAME colgante, probablemente reclamable

A escala automatizas la detección. subjack comprueba una lista de subdominios contra una base de datos de huellas de servicios vulnerables:

$ subjack -w subs-live.txt -t 100 -ssl \
    -c fingerprints.json -v

nuclei incluye un conjunto mantenido de plantillas de takeover y es la opción más moderna:

$ nuclei -l subs-live.txt -t http/takeovers/

Encontrar un takeover no es lo mismo que explotarlo. En un encargo autorizado, lo responsable suele ser demostrar que es reclamable con un fichero marcador inofensivo y reportarlo, no servir contenido real desde el nombre de host.

Herramientas y webs que conviene guardar

Más allá de las herramientas de línea de comandos anteriores, varios servicios web hacen descubrimiento de subdominios e infraestructura desde el navegador, lo cual es ideal para una primera ojeada rápida y del todo pasiva:

  • crt.sh: búsqueda en registros de Certificate Transparency. La mejor fuente pasiva individual de subdominios.
  • DNSDumpster: reconocimiento de DNS gratuito que mapea los hosts, registros y relaciones de red de un dominio en una única vista visual.
  • SecurityTrails: datos históricos de DNS y subdominios; ve a qué apuntaba antes un nombre, inestimable para rastrear infraestructura a lo largo del tiempo.
  • VirusTotal: la pestaña «Relations» de un dominio enumera los subdominios observados que ha visto en circulación.
  • Netcraft: informes de sitios de larga trayectoria y una base de datos consultable de hosts e historial de alojamiento.
  • Amass (OWASP) y la suite de ProjectDiscoverysubfinder y dnsx–: para una enumeración programable y repetible.

Una consulta de registro redondea el cuadro: emparejar la enumeración con WHOIS te dice no solo qué hosts existen, sino quién registró el dominio padre y cuándo. Juntos convierten un solo nombre en un mapa.

La conclusión

Un nombre de dominio es una jerarquía, y los subdominios que cuelgan de él son la superficie de ataque real y desparramada que la mayoría de las organizaciones infravalora. Enumerarlos bien significa empezar en modo pasivo –Certificate Transparency y agregadores que nunca tocan el objetivo–, validar con resolución, y hacer fuerza bruta o probar takeover solo donde tengas autorización explícita. Hazlo en ese orden y verás sistemáticamente más de un objetivo de lo que pretendía mostrar, sin cruzar jamás la línea de la observación a la intrusión.

Preguntas frecuentes

¿Qué son los subdominios?
Un subdominio es cualquier etiqueta añadida delante de un dominio registrado, como api.example.com, blog.example.com o dev.example.com – todos son subdominios de example.com. El propietario del dominio los crea gratis y al instante añadiendo un registro DNS, sin pasar por ningún registrador ni pagar nada extra. Las empresas los usan para separar servicios (correo, API, panel de administración, entornos de pruebas) bajo el mismo dominio principal. En seguridad importan porque cada subdominio es una superficie expuesta más, y como son tan baratos de crear, es habitual que se olviden y queden sin vigilancia.
¿Cuál es la diferencia entre un dominio y un subdominio?
Un dominio (más exactamente, un dominio registrable como example.com) es el nombre que registras con un registrador, pagas y que WHOIS conoce: es tu dominio de segundo nivel más su dominio de nivel superior. Un subdominio es cualquier etiqueta añadida a la izquierda de ese dominio registrable, como api.example.com o dev.example.com. La diferencia práctica crucial es el control y el coste: registrar un dominio implica un registrador y una tarifa, mientras que el propietario del dominio puede crear subdominios ilimitados gratis, al instante, con solo añadir registros DNS a la zona que ya controla. Por eso precisamente los subdominios proliferan y por eso tan a menudo se convierten en superficie de ataque olvidada y sin vigilar.
¿Cómo encuentro todos los subdominios de un dominio?
Empieza en modo pasivo, porque es rápido, silencioso y legal contra cualquier objetivo. Busca en los registros de Certificate Transparency con crt.sh, luego ejecuta agregadores como subfinder, assetfinder y Amass en modo pasivo para tirar de decenas de conjuntos de datos a la vez, y consulta servicios de DNS pasivo como SecurityTrails, VirusTotal y Netcraft en busca de nombres históricos. Fusiona y elimina duplicados de los resultados, y luego resuélvelos con dnsx para ver cuáles están realmente vivos. Para encontrar nombres que no aparecen en ningún conjunto de datos público puedes hacer fuerza bruta de nombres candidatos con gobuster o ffuf usando un buen diccionario, pero solo contra dominios que posees o que estás autorizado explícitamente a probar. Ningún método por sí solo es completo, así que la enumeración real combina varios.
¿Qué es un subdomain takeover?
Ocurre cuando un subdominio tiene un registro DNS –normalmente un CNAME– que apunta a un servicio de terceros (un bucket en la nube, una app de Heroku o GitHub Pages, un host SaaS) que desde entonces se ha eliminado, mientras el registro DNS se quedó atrás. Ese registro «colgante» apunta ahora a un nombre de servicio que cualquiera puede registrar. Un atacante que lo reclama gana el control del contenido servido en el propio nombre de host de la víctima, lo que permite un phishing convincente, robo de cookies con alcance al dominio padre y abuso de la confianza same-site. Lo detectas buscando CNAME a proveedores conocidos que devuelven un error «no such app / not found», y automatizas la comprobación con herramientas como subjack o las plantillas de takeover de nuclei. La solución es sencilla: elimina el registro DNS obsoleto.
¿Cuál es la diferencia entre enumeración pasiva y activa de subdominios?
La enumeración pasiva recopila datos de subdominios de terceros –registros de certificados, índices de buscadores, bases de datos de DNS pasivo– y nunca envía un solo paquete al objetivo, así que este no puede saber que miraste. La enumeración activa interactúa con la propia infraestructura del objetivo: resuelve nombres contra su DNS, se conecta a sus servidores o hace fuerza bruta de nombres de host candidatos, todo lo cual puede quedar registrado. La pasiva es la opción segura por defecto que puedes ejecutar contra cualquiera; la activa conlleva peso operativo y, a veces, legal, y debe reservarse para activos que posees o que estás autorizado a probar. El flujo habitual es pasiva primero para construir una lista, y luego una pasada activa controlada para validarla y ampliarla.
¿Es legal la enumeración de subdominios?
La enumeración pasiva –leer registros de Certificate Transparency, consultar servicios de DNS pasivo, usar agregadores que tiran de conjuntos de datos de terceros– es leer información ya pública y es legal en la mayoría de jurisdicciones, porque nunca tocas los sistemas del objetivo. Las técnicas activas son distintas: hacer fuerza bruta de subdominios, resolver nombres directamente contra el DNS de un objetivo o sondear los hosts descubiertos envía tráfico a infraestructura que puede que no tengas derecho a probar, y en volumen puede parecer reconocimiento para un ataque. Haz enumeración activa solo contra dominios que posees o para los que tienes autorización explícita y por escrito para probar, como un alcance de pentest firmado o la lista dentro de alcance de un programa de bug bounty. Encontrar un subdominio no es permiso para atacar lo que corre en él.
¿Por qué importan tanto en seguridad los subdominios dev y staging?
Porque concentran el riesgo. Los entornos no productivos llamados dev, staging, uat, test o similares se montan para comodidad del desarrollador, no para una exposición hostil a internet: a menudo ejecutan software desactualizado, vienen con credenciales por defecto o débiles, devuelven mensajes de error verbosos y se sientan tras poco o ningún WAF o monitorización. Y sin embargo con frecuencia conectan con las mismas bases de datos o servicios internos que producción. Un atacante que no puede penetrar el sitio principal endurecido buscará exactamente estos nombres de host olvidados, y por eso enumerarlos y sacarlos de internet público (o bloquearlos como es debido) es uno de los resultados de mayor valor de una evaluación de subdominios.
Quién escribe esto

Daniel A. y Óscar S. llevan Breachfolio, un sitio pequeño e independiente sobre seguridad e IA. Este artículo se redactó con asistencia de IA y una persona lo revisó antes de publicarlo. Escribimos a partir de documentación, fuentes de los fabricantes e investigación publicada, no de pruebas de laboratorio propias, y enlazamos la fuente en la propia frase que se apoya en ella. Cómo trabajamos · Quiénes somos