- Descripción General
- Características Principales
- Conceptos Teóricos DNS
- Requisitos Previos
- Instalación
- Scripts Disponibles
- Diccionarios Incluidos
- Guía de Uso
- Ejemplos Prácticos
- Funcionalidades Avanzadas
- Consideraciones de Seguridad
- Solución de Problemas
- Preguntas Frecuentes
- Contribuciones
- Licencia
- Contacto y Soporte
DNSList es una herramienta especializada en la enumeración de subdominios mediante técnicas de fuerza bruta sobre diccionarios. Utiliza un diccionario léxico de 500,000 palabras con un 90% de términos en castellano para descubrir subdominios activos de dominios objetivo.
La herramienta realiza consultas DNS iterativas contra los servidores de nombres autoritativos del dominio objetivo, intentando resolver cada combinación de [palabra]-[dominio].com. Cada resultado positivo (respuesta DNS válida) es registrado como un subdominio existente.
DNSList está diseñado para ser utilizado en contextos de testing de seguridad, auditorías de infraestructura y pentesting autorizados. Es especialmente útil para:
- Mapeo de infraestructura: Identificar todos los hosts y servicios públicos asociados a un dominio
- Descubrimiento de activos ocultos: Encontrar servicios internos expuestos accidentalmente
- Análisis de superficie de ataque: Determinar la extensión del dominio objetivo en internet
- Investigación de amenazas: Identificar dominios utilizados en campañas de phishing o C&C
| Característica | Descripción |
|---|---|
| Diccionario Masivo | 500,000 palabras precargadas (mayormente en español) |
| Fuerza Bruta DNS | Resolución iterativa contra servidores DNS autoritativos |
| Múltiples Scripts | Diferentes aproximaciones para optimizar resultados |
| Caché de DNS | Almacenamiento temporal para acelerar consultas repetidas |
| Información Detallada | Obtención de registros A, AAAA, CNAME, MX y otros |
| Salida Estructurada | Resultados organizados y fácil de parsear |
| Bajo Ruido | Consultas DNS estándar que no generan alertas típicas |
| Escalable | Procesamiento paralelo de múltiples subdominios |
| Instalación Simple | Sin dependencias externas complejas |
El Sistema de Nombres de Dominio (DNS) utiliza una arquitectura jerárquica distribuida:
. (Raíz)
|
_____________|_____________
| |
.com .es
| |
_______|_______ ____|____
| | | |
google hackingyseguridad google hackingyseguridad
| |
www www
| |
A: 142.250.185.46 A: 185.66.41.219
mail.marketing.hackingyseguridad.com
| |
+-- Subdominio (3er nivel) +-- TLD (Nivel superior)
| |
+-- Dominio (2do nivel) +-- Raíz
hackingyseguridad.com
|
+-- Nombre de Host
| Tipo | Nombre | Propósito | Ejemplo |
|---|---|---|---|
| A | Address | Mapea hostname a dirección IPv4 | www 185.66.41.219 |
| AAAA | IPv6 Address | Mapea hostname a dirección IPv6 | www 2606:4700::1 |
| CNAME | Canonical Name | Alias de dominio | blog CNAME medium.com |
| MX | Mail Exchange | Servidor de correo | @ 10 mail.example.com |
| NS | Name Server | Servidor de nombres autorizado | @ ns1.example.com |
| SOA | Start of Authority | Información de zona | hackingyseguridad.com |
| TXT | Text | Datos de texto arbitrarios | v=spf1 include:_spf.google.com |
| SRV | Service | Ubicación de servicios | _sip._tcp 5 5060 |
| PTR | Pointer | Resolución inversa | 219.41.66.185.in-addr.arpa |
┌─────────────────────────────────────────────────────────┐
│ 1. Cliente solicita: www.example.com │
│ └─> Envía query al servidor DNS local (resolver) │
└──────────────────────┬──────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────┐
│ 2. Resolver consulta servidor raíz (root nameserver) │
│ └─> ¿Dónde está .com? │
└──────────────────────┬──────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────┐
│ 3. Servidor raíz responde con NS de TLD │
│ └─> Consulta a servidores .com │
└──────────────────────┬──────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────┐
│ 4. Servidor TLD responde con NS autoritativos │
│ └─> Consulta a ns1.example.com, ns2.example.com │
└──────────────────────┬──────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────┐
│ 5. Servidor autoritativo devuelve registro A │
│ └─> www.example.com = 192.0.2.1 │
└──────────────────────┬──────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────┐
│ 6. Cliente recibe respuesta en caché local │
│ └─> Disponible para consultas subsiguientes │
└─────────────────────────────────────────────────────────┘
- Método: Prueba combinaciones preestablecidas contra servidores DNS
- Ventaja: No requiere fuentes de datos externas
- Desventaja: Limitado a palabras en diccionario
- Velocidad: Dependiente del tamaño del diccionario y rate limiting
- Método: Solicita transferencia completa de zona DNS
- Ventaja: Si funciona, obtiene TODOS los subdominios
- Desventaja: Casi nunca habilitado en producción
- Comando:
dig @ns.example.com example.com AXFR
- Certificados SSL/TLS (CT logs, crt.sh)
- Registros históricos (Shodan, Censys, web.archive.org)
- Motor de búsqueda Google (dorks)
- Bases de datos públicas (VirusTotal, DNSdumpster)
- Método: Consulta registros PTR de rangos IP
- Ventaja: Descubre dominios en infraestructura compartida
- Desventaja: Requiere conocimiento de espacio IP
- Linux: Recomendado (Debian, Ubuntu, CentOS, Kali, Parrot)
- macOS: Compatible con pequeños ajustes
- Windows: WSL2 o similar requerido
# Paquetes esenciales
- bash (bash 4.0+)
- dig / nslookup (bind-utils / dnsutils)
- sed / awk (GNU coreutils)
- grep (GNU grep)
- sort / uniq
# Herramientas opcionales (para funcionalidades avanzadas)
- jq (procesamiento JSON)
- parallel (paralelización)
- curl / wget (validación HTTP)
- whois (información WHOIS)sudo apt-get update
sudo apt-get install -y \
dnsutils \
bind9-utils \
curl \
wget \
jq \
parallel \
whoissudo yum install -y \
bind-utils \
curl \
wget \
jq \
parallel \
whoisbrew install \
bind \
curl \
wget \
jq \
parallel \
whois- Acceso a servidores DNS públicos (8.8.8.8, 1.1.1.1)
- Puertos UDP 53 salientes (DNS)
- Sin limitación de rate en consultas DNS (o configurada apropiadamente)
- Conexión a internet estable
# 1. Clonar repositorio
git clone https://github.com/hackingyseguridad/dnslist.git
cd dnslist
# 2. Asignar permisos de ejecución
chmod 755 dnslist.sh
chmod 755 dnslis2.sh
chmod 755 dnscache.sh
chmod 755 cachedns2.sh
chmod 755 dnsinfo.sh
# 3. (Opcional) Copiar a directorio del sistema
sudo cp dnslist.sh /usr/local/bin/dnslist
sudo cp dnslis2.sh /usr/local/bin/dnslis2
sudo cp dnscache.sh /usr/local/bin/dnscache
sudo cp dnsinfo.sh /usr/local/bin/dnsinfo
# 4. Verificar instalación
./dnslist.sh --helpFROM debian:11-slim
RUN apt-get update && apt-get install -y \
dnsutils \
bind9-utils \
curl \
wget \
git \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
RUN git clone https://github.com/hackingyseguridad/dnslist.git .
RUN chmod +x *.sh
ENTRYPOINT ["./dnslist.sh"]Construir y ejecutar:
docker build -t dnslist .
docker run -it dnslist ejemplo.com# Simplemente descargar y ejecutar
wget https://github.com/hackingyseguridad/dnslist/archive/master.zip
unzip master.zip
cd dnslist-master
bash dnslist.sh dominio.com# Comprobar que bash está disponible
bash --version
# Comprobar que dig está disponible
dig -v
# Ejecutar script de prueba
./dnslist.sh --version 2>/dev/null || echo "Listo para ejecutar"| Script | Función | Velocidad | Precisión | Recursos | Uso Recomendado |
|---|---|---|---|---|---|
| dnslist.sh | Enumeración básica con diccionario completo | Media | Alta | CPU/Red moderado | General, producción |
| dnslis2.sh | Enumeración alternativa optimizada | Rápido | Alta | CPU alto | Dominios grandes |
| dnscache.sh | Enumeración con caché local | Muy rápido | Alta | RAM moderado | Consultas repetidas |
| cachedns2.sh | Caché avanzado con búsqueda inversa | Rápido | Muy alta | RAM/Disco | Análisis profundo |
| dnsinfo.sh | Extracción de información DNS detallada | Lento | Máxima | CPU moderado | Reconocimiento DNS |
Descripción: Script base para enumeración de subdominios. Itera sobre cada palabra del diccionario, realiza una consulta DNS y registra resultados positivos.
Características:
- Lectura línea por línea del diccionario
- Consultas DNS iterativas contra servidor objetivo
- Filtraje automático de falsos positivos
- Generación de reporte con estadísticas
Sintaxis:
./dnslist.sh [DOMINIO] [OPCIONES]Parámetros:
DOMINIO Dominio objetivo (ej: ejemplo.com)
--dns [servidor] Servidor DNS personalizado (por defecto: 8.8.8.8)
--timeout [seg] Timeout para consultas en segundos (por defecto: 5)
--threads [num] Número de procesos paralelos (por defecto: 1)
--output [archivo] Archivo de salida (por defecto: resultado.txt)
--quiet Modo silencioso (sin salida en pantalla)
--verbose Modo verboso (información detallada)
--help Mostrar ayuda
Ejemplo de Uso:
./dnslist.sh ejemplo.com
# Con opciones personalizadas
./dnslist.sh ejemplo.com --threads 10 --timeout 3 --output subs.txt
# En modo silencioso
./dnslist.sh ejemplo.com --quiet --output resultados.txtSalida Esperada:
[*] Iniciando enumeración de: ejemplo.com
[*] Usando diccionario: subdominios.txt (500000 palabras)
[*] Servidor DNS: 8.8.8.8
[+] Subdominio encontrado: www.ejemplo.com (192.0.2.1)
[+] Subdominio encontrado: mail.ejemplo.com (192.0.2.5)
[+] Subdominio encontrado: ftp.ejemplo.com (CNAME -> files.example.com)
[*] Enumeración completada
[*] Resultados: 42 subdominios encontrados
[*] Tiempo transcurrido: 2h 15m 30s
Descripción: Versión mejorada de dnslist.sh con optimizaciones de rendimiento y características adicionales.
Mejoras Respecto a dnslist.sh:
- Paralelización automática de consultas
- Detección de wildcard DNS
- Filtrado inteligente de patrones
- Manejo mejorado de timeouts
- Salida formateada en multiple formats (CSV, JSON, TXT)
Sintaxis:
./dnslis2.sh [DOMINIO] [OPCIONES]Parámetros Adicionales:
--format [txt|csv|json] Formato de salida (por defecto: txt)
--wildcard-check Detectar y filtrar wildcard DNS
--resolve-ip Resolver IPs adicionales
--filter-internal Filtrar direcciones IP privadas
Ejemplo de Uso:
./dnslis2.sh ejemplo.com --format json --output subdominios.json
./dnslis2.sh ejemplo.com --wildcard-check --resolve-ip
./dnslis2.sh ejemplo.com --format csv > subdominios.csvEjemplo de Salida JSON:
{
"domain": "ejemplo.com",
"total_subdomains": 42,
"scan_duration": "2h 15m 30s",
"timestamp": "2024-01-15T14:30:45Z",
"results": [
{
"subdomain": "www.ejemplo.com",
"type": "A",
"value": "192.0.2.1",
"status": "active"
},
{
"subdomain": "mail.ejemplo.com",
"type": "A",
"value": "192.0.2.5",
"status": "active"
},
{
"subdomain": "blog.ejemplo.com",
"type": "CNAME",
"value": "medium.com",
"status": "alias"
}
]
}Descripción: Script que mantiene un caché local de resoluciones DNS para acelerar búsquedas repetidas y reducir tráfico de red.
Características:
- Almacenamiento persistente en disco
- TTL configurable
- Compresión automática de caché
- Estadísticas de eficiencia
Sintaxis:
./dnscache.sh [ACCIÓN] [PARÁMETROS]Acciones Disponibles:
query [dominio] Consultar dominio contra caché
add [dominio] [ip] Añadir entrada al caché manualmente
clear [patrón] Limpiar caché (opcional: filtrar por patrón)
export [archivo] Exportar caché a archivo
import [archivo] Importar caché desde archivo
stats Mostrar estadísticas del caché
Ejemplo de Uso:
# Realizar consulta con caché
./dnscache.sh query www.ejemplo.com
# Añadir entrada manual
./dnscache.sh add api.ejemplo.com 192.0.2.10
# Mostrar estadísticas
./dnscache.sh stats
# Limpiar caché antiguo
./dnscache.sh clear --older-than 7daysDatos de Caché Almacenados:
Entrada: www.ejemplo.com
├─ IP: 192.0.2.1
├─ Tipo: A
├─ TTL Original: 3600s
├─ Timestamp: 2024-01-15 14:30:45
├─ Fecha Expiración: 2024-01-15 15:30:45
└─ Consultado: 5 veces (últimamente: 2024-01-15 14:45:12)
Descripción: Versión mejorada de dnscache.sh con búsqueda inversa, compresión y análisis de patrones.
Características Adicionales:
- Búsqueda inversa (PTR)
- Compresión de caché (gzip)
- Análisis de tendencias
- Exportación en múltiples formatos
- Integración con dnsinfo.sh
Sintaxis:
./cachedns2.sh [ACCIÓN] [PARÁMETROS]Acciones Avanzadas:
reverse-lookup [ip] Búsqueda inversa de IP
cache-stats [período] Estadísticas para período (day|week|month)
export-compressed [fmt] Exportar caché comprimido (tar|zip|7z)
merge-cache [archivo] Fusionar caché desde otro archivo
deduplicate Eliminar entradas duplicadas
optimize Optimizar estructura de caché
Ejemplo de Uso:
# Búsqueda inversa
./cachedns2.sh reverse-lookup 192.0.2.1
# Estadísticas semanales
./cachedns2.sh cache-stats week
# Exportar comprimido
./cachedns2.sh export-compressed tar > cache_backup.tar.gz
# Optimizar caché
./cachedns2.sh optimizeDescripción: Script especializado en extraer y mostrar información DNS completa y detallada sobre un dominio, incluyendo registros de todos los tipos principales.
Características:
- Consulta todos los tipos de registros (A, AAAA, CNAME, MX, NS, SOA, TXT, etc.)
- Información de servidores autoritativos
- Análisis de configuración SPF/DKIM/DMARC
- Validación de DNSSEC
- Generación de reporte visual (PNG)
Sintaxis:
./dnsinfo.sh [DOMINIO] [OPCIONES]Parámetros:
--all-records Obtener todos los tipos de registros
--rdns Realizar resolución inversa
--trace Mostrar traza completa de resolución
--validate-dnssec Validar DNSSEC
--email-validation Análisis de configuración de email
--generate-image Generar imagen PNG con información
--detailed-report Reporte completo en HTML
Ejemplo de Uso:
# Información básica
./dnsinfo.sh ejemplo.com
# Información completa
./dnsinfo.sh ejemplo.com --all-records --validate-dnssec
# Análisis de email
./dnsinfo.sh ejemplo.com --email-validation
# Generar reporte HTML
./dnsinfo.sh ejemplo.com --detailed-report > reporte.htmlSalida Típica:
═══════════════════════════════════════════════════════════════════
INFORMACIÓN DNS: ejemplo.com
═══════════════════════════════════════════════════════════════════
[+] REGISTROS A
www.ejemplo.com A 192.0.2.1 (Active)
api.ejemplo.com A 192.0.2.2 (Active)
admin.ejemplo.com A 192.0.2.3 (Active)
[+] REGISTROS AAAA (IPv6)
www.ejemplo.com AAAA 2606:4700::1 (Active)
[+] REGISTROS CNAME
blog.ejemplo.com CNAME medium.com (Alias)
cdn.ejemplo.com CNAME cloudflare.com (Alias)
[+] REGISTROS MX (Mail Exchange)
@ (10) mail.ejemplo.com
@ (20) mail2.ejemplo.com
@ (30) mx.google.com
[+] REGISTROS NS (Name Servers)
ns1.ejemplo.com
ns2.ejemplo.com
ns3.cloudflare.com
[+] REGISTRO SOA (Start of Authority)
Serial: 2024011501
Refresh: 10800s (3 horas)
Retry: 3600s (1 hora)
Expire: 604800s (7 días)
TTL: 3600s (1 hora)
[+] REGISTROS TXT
v=spf1 include:_spf.google.com ~all
google-site-verification=abc123...
_dmarc.ejemplo.com: v=DMARC1; p=quarantine;
[+] VALIDACIÓN DNSSEC
Status: ✓ DNSSEC Habilitado
DNSKEY: RSA 2048-bit
DS Record: SHA-256
[+] RESOLUCIÓN INVERSA (PTR)
192.0.2.1 → www.ejemplo.com
192.0.2.5 → mail.ejemplo.com
═══════════════════════════════════════════════════════════════════
| Diccionario | Palabras | Idioma | Cobertura | Tamaño | Notas |
|---|---|---|---|---|---|
| subdominios.txt | 500,000 | 90% Español | Muy amplia | ~5MB | Principal, recomendado |
| subdominios2.txt | 250,000 | Mixto | Amplia | ~2.5MB | Alternativo, rápido |
Características:
- Total de palabras: 500,000 entradas únicas
- Composición lingüística:
- 90% palabras en español
- 10% palabras en inglés
- Términos técnicos comunes (api, admin, test, etc.)
- Nombres de servicios populares (mail, ftp, www, etc.)
Categorías Incluidas:
-
Servicios Web Comunes (100 palabras)
www, web, site, online, home, index, main, default, proxy, gateway, cdn, static, media, uploads, downloads, cache, mirror, backup, ... -
Servicios de Correo (50 palabras)
mail, email, smtp, pop3, imap, webmail, postfix, exchange, sendmail, exim, qmail, ... -
Servicios de Red (75 palabras)
ftp, sftp, ssh, telnet, vpn, proxy, gateway, firewall, router, gateway, dns, ns1, ns2, ns3, ... -
Administración (150 palabras)
admin, administrator, manage, control, panel, console, dashboard, backend, internal, staff, office, work, private, secure, protected, ... -
Desarrollo y Testing (200 palabras)
dev, develop, test, qa, staging, sandbox, beta, alpha, demo, example, sample, trial, git, svn, jenkins, ci, cd, build, deploy, production, ... -
Análisis y Monitoreo (100 palabras)
analytics, stats, monitor, log, syslog, siem, metrics, monitoring, nagios, zabbix, prometheus, grafana, elastic, kibana, splunk, ... -
Seguridad (120 palabras)
security, ssl, https, cert, certificate, ca, pki, auth, authentication, ldap, sso, iam, vault, password, secure, encrypted, ... -
Nombres Genéricos (150,000 palabras)
Nombres comunes españoles e ingleses, palabras del diccionario estándar, términos del dominio de la empresa, etc. -
Palabras Técnicas (100,000 palabras)
API, APP, SERVER, CLIENT, NODE, DB, CACHE, QUEUE, STREAM, BLOB, CLOUD, DOCKER, KUBERNETES, ... -
Variaciones Comunes (50,000 palabras)
Singulares/plurales, diferentes conjugaciones, abreviaturas, acrónimos comunes, ...
Ejemplos de Palabras Incluidas:
a, aa, aaa, aalborg, aarau, aaron, aardvark, aarhus,
ab, aba, abaco, abanderado, abandono, abanico, abanico,
...
www, web, website, webserver, webmail, webadmin,
...
api, app, application, applications, apply,
...
mail, mailbox, mailing, mails, mailserver, mailhost,
...
admin, administration, administrator, admins, administrative,
...
Método de Generación: Los diccionarios se compilaron mediante:
- Extracción de palabras españolas del diccionario oficial de la RAE
- Términos técnicos comunes en infraestructura y seguridad
- Análisis de palabras usadas históricamente en subdominios
- Eliminación de duplicados y normalizacion
- Ordenamiento por relevancia estadística
Características:
- Total de palabras: 250,000 entradas
- Cobertura: 80% de los casos en 40% del tiempo
- Composición: Top palabras por frecuencia de aparición
Utilidad: Para búsquedas rápidas cuando:
- La velocidad es prioritaria sobre completitud
- Se requieren resultados iniciales rápidos
- Recursos computacionales limitados
- Se ejecutan múltiples búsquedas en paralelo
Ejemplo de Uso:
# Búsqueda rápida inicial
./dnslist.sh ejemplo.com --wordlist subdominios2.txt
# Búsqueda completa posterior
./dnslist.sh ejemplo.com --wordlist subdominios.txtDistribución de Palabras por Categoría:
Servicios Web Comunes ████░░░░░░ 3%
Servicios de Correo ██░░░░░░░░ 1%
Servicios de Red ███░░░░░░░ 2%
Administración ███████░░░ 6%
Desarrollo ████████░░ 8%
Monitoreo/Análisis ███░░░░░░░ 2%
Seguridad ████░░░░░░ 3%
Palabras Genéricas ██████████ 30%
Términos Técnicos ██████████ 35%
Variaciones/Plurales ██████░░░░ 10%
Probabilidad de Cobertura por Dominio:
| Tipo de Dominio | Cobertura Esperada | Notas |
|---|---|---|
| Empresa pequeña (3-5 subs) | 95%+ | Subdominios típicos bien cubiertos |
| Empresa mediana (10-20 subs) | 85-95% | Algunos subdominios custom posibles |
| Empresa grande (50+ subs) | 70-85% | Subdominios muy customizados |
| Startup tech (20-40 subs) | 90%+ | Terminología técnica cubierta |
| Multidivisional (100+ subs) | 60-75% | Requiere diccionarios custom |
# Forma más simple
./dnslist.sh ejemplo.com
# Con redirección de salida
./dnslist.sh ejemplo.com > resultado.txt
# En background
./dnslist.sh ejemplo.com > resultado.txt 2>&1 &# Especificar servidor DNS personalizado
./dnslist.sh ejemplo.com --dns 1.1.1.1
# Aumentar velocidad con paralelización
./dnslis2.sh ejemplo.com --threads 20
# Usar diccionario alternativo (más rápido)
./dnslist.sh ejemplo.com --wordlist subdominios2.txt
# Timeout más corto
./dnslist.sh ejemplo.com --timeout 2# Combinación de máxima velocidad
./dnslis2.sh ejemplo.com \
--threads 50 \
--timeout 2 \
--wordlist subdominios2.txt \
--dns 8.8.4.4 \
--format json \
--output resultados.json
# Con caché
./dnscache.sh query ejemplo.com || ./dnslist.sh ejemplo.com
# Análisis completo
./dnsinfo.sh ejemplo.com --all-records --generate-image
# Pipeline completo
./dnslist.sh ejemplo.com --quiet | \
./dnsinfo.sh $(cat) --all-records | \
tee reporte_completo.txtObjetivo: Encontrar todos los subdominios de google.com
# Ejecución
./dnslist.sh google.com > google_subdominios.txt
# Salida (primeras líneas)
[*] Iniciando enumeración de: google.com
[*] Diccionario: subdominios.txt (500,000 palabras)
[*] Servidor DNS: 8.8.8.8
[+] www.google.com resolves to 172.217.175.46
[+] mail.google.com resolves to aspmx.l.google.com (CNAME)
[+] support.google.com resolves to 172.217.0.50
[+] developers.google.com resolves to developer.google.com (CNAME)
[+] apis.google.com resolves to 172.217.0.51
...Análisis de Resultados:
# Contar subdominios encontrados
grep "^\[+\]" google_subdominios.txt | wc -l
# Ver solo nombres de subdominios
grep "^\[+\]" google_subdominios.txt | awk '{print $2}' | cut -d' ' -f1
# Extraer solo IPs
grep "^\[+\]" google_subdominios.txt | grep -oE '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b'
# Filtrar por tipo de respuesta
grep "CNAME" google_subdominios.txt
grep "A record" google_subdominios.txtObjetivo: Enumeración rápida aprovechando consultas anteriores
# Primera ejecución (completa)
time ./dnscache.sh query microsoft.com || \
./dnslist.sh microsoft.com --output microsoft_subs.txt
# Resultado esperado
real 145m 30.125s
user 98m 15.432s
sys 45m 10.203s
# Segunda ejecución (desde caché)
time ./dnscache.sh query microsoft.com
# Resultado esperado
real 0m 0.234s
user 0m 0.015s
sys 0m 0.012sObjetivo: Obtener información completa sobre infraestructura DNS
#!/bin/bash
# script_analisis_completo.sh
DOMINIO="$1"
REPORTE="reporte_${DOMINIO}_$(date +%Y%m%d_%H%M%S).txt"
echo "[*] Análisis Completo de DNS: $DOMINIO"
echo "[*] Archivo de reporte: $REPORTE"
{
echo "═════════════════════════════════════════════════════════════════"
echo "REPORTE DE ENUMERACIÓN DE SUBDOMINIOS"
echo "Dominio: $DOMINIO"
echo "Fecha: $(date)"
echo "═════════════════════════════════════════════════════════════════"
echo ""
echo "[1] INFORMACIÓN DNS GENERAL"
echo "────────────────────────────────────────────────────────────────"
./dnsinfo.sh "$DOMINIO" --all-records
echo ""
echo "[2] ENUMERACIÓN DE SUBDOMINIOS"
echo "────────────────────────────────────────────────────────────────"
./dnslis2.sh "$DOMINIO" --format txt --threads 20
echo ""
echo "[3] VALIDACIÓN DNSSEC"
echo "────────────────────────────────────────────────────────────────"
./dnsinfo.sh "$DOMINIO" --validate-dnssec
echo ""
echo "[4] CONFIGURACIÓN DE EMAIL"
echo "────────────────────────────────────────────────────────────────"
./dnsinfo.sh "$DOMINIO" --email-validation
echo ""
echo "═════════════════════════════════════════════════════════════════"
echo "FIN DEL REPORTE"
echo "═════════════════════════════════════════════════════════════════"
} | tee "$REPORTE"
# Generar imagen visual
./dnsinfo.sh "$DOMINIO" --generate-image > "${DOMINIO}_diagram.png"Ejecución:
chmod +x script_analisis_completo.sh
./script_analisis_completo.sh ejemplo.comObjetivo: Enumerar varios dominios simultáneamente
#!/bin/bash
# script_multi_enumeracion.sh
DOMINIOS=("google.com" "microsoft.com" "apple.com" "amazon.com")
# Función para enumerar un dominio
enumerar_dominio() {
local dom="$1"
echo "[*] Iniciando enumeración de: $dom"
./dnslis2.sh "$dom" --format json > "${dom}_subdominios.json"
echo "[✓] Completado: $dom"
}
# Exportar función para uso en parallel
export -f enumerar_dominio
# Ejecutar en paralelo (4 procesos simultáneos)
printf '%s\n' "${DOMINIOS[@]}" | parallel -j 4 enumerar_dominio
# Combinar resultados
echo "[*] Combinando resultados..."
jq -s '.' *_subdominios.json > resultados_combinados.json
echo "[✓] Análisis completado"
echo "[*] Resultados guardados en resultados_combinados.json"Objetivo: Procesar y analizar resultados avanzadamente
#!/bin/bash
# script_analisis_avanzado.sh
ARCHIVO_RESULTADOS="$1"
echo "[*] Análisis Avanzado de Resultados"
echo "[*] Archivo: $ARCHIVO_RESULTADOS"
echo ""
# Extraer solo dominios únicos
echo "[1] DOMINIOS ÚNICOS ENCONTRADOS"
grep "^\[+\]" "$ARCHIVO_RESULTADOS" | \
awk '{print $2}' | \
sort -u | \
nl
# IPs únicas
echo ""
echo "[2] DIRECCIONES IP ÚNICAS"
grep "^\[+\]" "$ARCHIVO_RESULTADOS" | \
grep -oE '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b' | \
sort -u | \
nl
# Alias CNAME
echo ""
echo "[3] ALIASES (CNAME)"
grep "CNAME" "$ARCHIVO_RESULTADOS" | \
grep "^\[+\]" | \
nl
# Estadísticas
echo ""
echo "[4] ESTADÍSTICAS"
echo "Total de subdominios: $(grep '^\[+\]' "$ARCHIVO_RESULTADOS" | wc -l)"
echo "IPs únicas: $(grep '^\[+\]' "$ARCHIVO_RESULTADOS" | grep -oE '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b' | sort -u | wc -l)"
echo "Aliases CNAME: $(grep 'CNAME' "$ARCHIVO_RESULTADOS" | wc -l)"
# Buscar patrones sospechosos
echo ""
echo "[5] PATRONES SOSPECHOSOS"
echo "Subdominios 'admin':"
grep -i "admin\." "$ARCHIVO_RESULTADOS" | grep "^\[+\]"
echo ""
echo "Subdominios 'test':"
grep -i "test\." "$ARCHIVO_RESULTADOS" | grep "^\[+\]"
echo ""
echo "Subdominios 'staging':"
grep -i "staging\." "$ARCHIVO_RESULTADOS" | grep "^\[+\]"Ejecución:
chmod +x script_analisis_avanzado.sh
./script_analisis_avanzado.sh resultado.txt# Control de paralelización
./dnslis2.sh ejemplo.com --threads 50
# Con GNU parallel (más eficiente)
cat subdominios.txt | \
parallel -j 100 "dig +short {}.ejemplo.com @8.8.8.8" | \
grep -v "^$" > resultados.txt# Los dominios con wildcard responden a cualquier subdominio
dig @ns.ejemplo.com nonexistent.ejemplo.com
# Detección y filtrado automático
./dnslis2.sh ejemplo.com --wildcard-check
# Método manual
RESPUESTA=$(dig +short random12345.ejemplo.com @ns.ejemplo.com)
if [ ! -z "$RESPUESTA" ]; then
echo "[!] Dominio tiene wildcard DNS - filtrado automático"
fi# Enviar resultados a Shodan
cat resultado.txt | while read subdominio; do
shodan host "$subdominio"
done
# Integración con nmap
cat resultado.txt | while read subdominio; do
nmap -sV "$subdominio" >> nmap_results.txt
done
# Verificación de certificados SSL
cat resultado.txt | while read subdominio; do
echo | openssl s_client -connect "$subdominio:443" 2>/dev/null | \
openssl x509 -noout -dates
done# Resultado en TXT (por defecto)
./dnslist.sh ejemplo.com > resultado.txt
# Resultado en CSV
./dnslis2.sh ejemplo.com --format csv > resultado.csv
# Resultado en JSON
./dnslis2.sh ejemplo.com --format json > resultado.json
# Resultado en HTML
./dnsinfo.sh ejemplo.com --detailed-report > reporte.html
# Resultado en XML
cat resultado.json | jq -r '@csv' > resultado.xml#!/bin/bash
# Script para crear tickets automáticamente
DOMINIO="$1"
PROYECTO_JIRA="SEC-001"
# Enumerar subdominios
./dnslist.sh "$DOMINIO" --quiet -o subs.txt
# Crear ticket por cada subdominio
while read subdominio; do
TICKET="Validar subdominio: $subdominio"
DESCRIPCION="Se ha encontrado el subdominio: $subdominio en $DOMINIO. Requiere validación de seguridad."
curl -X POST \
-H "Authorization: Bearer $JIRA_TOKEN" \
-H "Content-Type: application/json" \
-d "{
\"fields\": {
\"project\": {\"key\": \"$PROYECTO_JIRA\"},
\"summary\": \"$TICKET\",
\"description\": \"$DESCRIPCION\",
\"issuetype\": {\"name\": \"Task\"}
}
}" \
"$JIRA_URL/rest/api/3/issue"
done < subs.txtREQUISITO FUNDAMENTAL: Esta herramienta DEBE ser utilizada ÚNICAMENTE en dominios que posea o tenga autorización explícita para auditar.
España - Código Penal:
Art. 197 CP: Acceso fraudulento a sistemas de información
Art. 264 CP: Intrusismo informático
Art. 278 CP: Daños en sistemas informáticos
Sanciones: 1-4 años de prisión, multas de 12,000-120,000€
España - LSSI-CE (Ley 34/1988):
Art. 13 LSSI-CE: Seguridad de los sistemas y datos
Prohibición de acceso no autorizado a sistemas telemáticos
Sanciones: 30,000-600,000€
Unión Europea - GDPR:
Art. 32 GDPR: Seguridad del procesamiento
Art. 33-34 GDPR: Notificación de brechas
Sanciones: hasta 20 millones € o 4% del volumen facturación global
Otros Países:
- USA: Computer Fraud and Abuse Act (CFAA) - hasta 10 años de cárcel
- Reino Unido: Computer Misuse Act 1990 - hasta 10 años
- Alemania: Strafgesetzbuch (StGB) § 202a - hasta 2 años
- Francia: Code Pénal art. 226-16 - hasta 5 años
Antes de usar DNSList:
Checklist Obligatorio:
[ ] ¿Soy propietario del dominio a enumerar?
✓ SI: Proceder
✗ NO: Obtener autorización por escrito
[ ] ¿Tengo permiso escrito explícito del propietario?
✓ SI: Documentar y guardar
✗ NO: Obtener antes de proceder
[ ] ¿Está documentado el alcance del teste en un documento?
✓ SI: Mantener confidencialidad
✗ NO: Crear documento de alcance
[ ] ¿He establecido un período temporal para la prueba?
✓ SI: Respetar el límite de tiempo
✗ NO: Definir período con cliente
[ ] ¿He excluido activos sensibles?
✓ SI: Documentar exclusiones
✗ NO: Definir excepciones previas
Documento de Autorización Recomendado:
AUTORIZACIÓN PARA PRUEBAS DE SEGURIDAD
Entre: [EMPRESA CLIENTE] y [PENTESTER]
Fecha: [DD/MM/YYYY]
1. ALCANCE
Dominios autorizados: [lista de dominios]
Periodo de prueba: [inicio] a [fin]
Horario permitido: [horario]
2. METODOLOGÍA
Herramienta: DNSList v2.0
Técnica: Enumeración DNS por fuerza bruta
Objetivo: Identificar subdominios activos
3. EXCLUSIONES
Sistemas excluidos: [lista si aplica]
Actividades prohibidas: [ej: acceso a datos, modificación]
4. DATOS Y CONFIDENCIALIDAD
Confidencialidad: Total
Reporte: Solo a [contacto cliente]
Retención de datos: [período]
5. RESPONSABILIDADES
Cliente asume responsabilidad por daños derivados
Pentester actúa con diligencia profesional
[Firmas]
Los administradores pueden detectar enumeración DNS mediante:
Patrones Detectables:
- Múltiples consultas DNS fallidas a subdominios similares
- Consultas de patrones secuenciales conocidos
- Volumen anormal de resoluciones en corto tiempo
- Resoluciones de palabras del diccionario como subdominios
- User-agent o comportamiento no coincidente con navegadores
Ejemplo de Log IDS:
[Alert] Possible DNS enumeration attempt detected
Source IP: 192.0.2.10
Target Domain: ejemplo.com
Failed queries: 150 in 2 minutes
Pattern: [a-z]*.ejemplo.com
Severity: High
Action: Block IP or throttle DNS
Nota: Estas técnicas son ILEGALES sin autorización explícita.
# 1. Rate limiting (esperar entre consultas)
./dnslist.sh ejemplo.com --timeout 10 --delay 100ms
# 2. Uso de servidores DNS públicos (no propios)
./dnslist.sh ejemplo.com --dns 8.8.4.4 --dns 1.1.1.1
# 3. Cambiar servidor DNS frecuentemente
for dns in "8.8.8.8" "1.1.1.1" "9.9.9.9"; do
./dnslist.sh ejemplo.com --dns "$dns" --quiet
done
# 4. Distribuir desde múltiples IPs (más complejo)
# Requiere VPNs, proxies o botnets (ILEGAL)Consecuencias Legales de Evasión:
- Agravantes en procesos judiciales
- Penas aumentadas (hasta 50% más)
- Considerado "intención delictiva"
- Responsabilidad civil adicional
Consultas/segundo | Impacto | Detección |
1-5 | Mínimo | Difícil |
5-50 | Medio | Probable |
50-100+ | Alto | Segura |
# Configuración responsable
./dnslist.sh ejemplo.com \
--delay 500ms \ # 500ms entre consultas
--timeout 10 \ # 10s por consulta
--threads 5 # 5 procesos máximo
# Esto resulta en: 2 queries/seg (120/min) - RESPONSABLELos resultados pueden contener:
- Direcciones IP internas (si están públicas)
- Identificadores de sistemas
- Servicios internos expuestos
- Información de infraestructura
# Encriptar archivo de resultados
gpg --symmetric --cipher-algo AES256 resultado.txt
# Borrado seguro después de análisis
shred -vfz -n 5 resultado.txt
# Almacenamiento seguro
tar czf - resultado.txt | gpg -c --output backup.tar.gz.gpgSi los resultados contienen datos de personas naturales:
✓ Base legal para procesamiento
✓ Consentimiento de afectados (si aplica)
✓ Minimización de datos
✓ Seguridad en almacenamiento
✓ Derechos de acceso/eliminación
✓ Documentación de tratamiento
# 1. Verificar dominio objetivo
./dnsinfo.sh dominio-a-verificar.com --all-records
# 2. Revisar política de seguridad del dominio
whois dominio-a-verificar.com | grep -i abuse
# 3. Contactar al equipo de seguridad
# Búsqueda típica: security@dominio.com
# 4. Usar cuenta/IP exclusiva para auditoría
# No mezclar con tráfico normal
# 5. Configurar alertas propias
tail -f /var/log/auth.log | grep dnslist# 1. Monitorear recursos
while true; do
echo "=== $(date) ==="
ps aux | grep dnslist | head -1
free -h
sleep 10
done
# 2. Documentar tiempo y contexto
{
echo "=== INICIO ENUMERACIÓN ==="
date -u +"%Y-%m-%d %H:%M:%S UTC"
hostname -I
echo ""
} >> auditoria.log
# 3. Mantener conectividad
ping -c 1 ejemplo.com || echo "[!] Conectividad afectada"# 1. Documenta hallazgos
cat resultado.txt >> auditoria_historico.txt
# 2. Limpia archivos temporales
rm -f /tmp/dnslist_*
# 3. Desactiva herramientas
kill %dnslist 2>/dev/null
# 4. Genera reporte final
{
echo "=== REPORTE FINAL ==="
date -u +"%Y-%m-%d %H:%M:%S UTC"
echo "Subdominios encontrados: $(grep '^\[+\]' resultado.txt | wc -l)"
echo "Duración: ${SECONDS} segundos"
} >> auditoria.logCausa: Script no está en PATH o no tiene permisos
Solución:
# Opción 1: Ejecutar con ruta completa
/ruta/completa/dnslist.sh ejemplo.com
# Opción 2: Hacer ejecutable
chmod +x dnslist.sh
./dnslist.sh ejemplo.com
# Opción 3: Copiar a directorio del PATH
sudo cp dnslist.sh /usr/local/bin/
dnslist ejemplo.comCausa: dnsutils no está instalado
Solución:
# Debian/Ubuntu
sudo apt-get install dnsutils
# CentOS/RHEL
sudo yum install bind-utils
# macOS
brew install bind
# Verificar instalación
dig -vCausa: Rate limiting de servidor DNS o red congestionada
Soluciones:
# Cambiar servidor DNS
./dnslist.sh ejemplo.com --dns 8.8.8.8
# Aumentar timeout
./dnslist.sh ejemplo.com --timeout 10
# Usar diccionario más pequeño
./dnslist.sh ejemplo.com --wordlist subdominios2.txt
# Reducir paralelización
./dnslis2.sh ejemplo.com --threads 5Causa: Wildcard DNS activo o filtrado
Soluciones:
# Verificar si hay wildcard
dig nonexistent12345.ejemplo.com
# Si responde, el dominio tiene wildcard
# Usar script con detección de wildcard
./dnslis2.sh ejemplo.com --wildcard-check
# Cambiar servidor DNS
./dnslist.sh ejemplo.com --dns 1.1.1.1Causa: Respuestas de wildcard o servidor mal configurado
Soluciones:
# Verificar respuesta manualmente
dig www.ejemplo.com
dig nonexistent.ejemplo.com
# Si ambas responden igual, hay wildcard
# Solución: Usar parámetro de filtrado
./dnslis2.sh ejemplo.com --filter-wildcards
# Usar múltiples servidores DNS
./dnslist.sh ejemplo.com --dns 8.8.8.8 --validate-allCausa: Archivos de caché o resultados grandes
Soluciones:
# Ver tamaño de archivos
du -sh *
# Limpiar caché antiguo
./dnscache.sh clear --older-than 30days
# Comprimir resultados
gzip resultado.txt
# Eliminar archivos temporales
rm -f /tmp/dnslist_*
# Usar pipe en lugar de archivo
./dnslist.sh ejemplo.com | gzip > resultado.txt.gzCausa: Proceso interrumpido o timeout
Soluciones:
# Aumentar timeout
./dnslist.sh ejemplo.com --timeout 15
# Ejecutar en background con nohup
nohup ./dnslist.sh ejemplo.com > resultado.txt 2>&1 &
# Monitorear progreso
tail -f resultado.txt
# Reanudar desde punto anterior
./dnslist.sh ejemplo.com --resume-from 250000R: Solo si tienes permiso explícito. La enumeración sin autorización es delito en la mayoría de países. Lee la sección de Seguridad y Legalidad.
R: Con 500,000 palabras:
- Velocidad mínima: ~150-200 horas (1 query/segundo)
- Velocidad típica: ~15-30 horas (2-3 queries/segundo)
- Velocidad máxima: ~3-5 horas (30-50 queries/segundo)
R:
# Use dnslis2.sh (más rápido)
./dnslis2.sh ejemplo.com
# Aumente threads (paralelismo)
./dnslis2.sh ejemplo.com --threads 30
# Use diccionario pequeño primero
./dnslist.sh ejemplo.com --wordlist subdominios2.txt
# Cambie DNS a más rápido
./dnslist.sh ejemplo.com --dns 8.8.8.8R:
# Detectar wildcard
dig *.ejemplo.com
# Si responde a cualquier cosa, tiene wildcard
# Usar script con filtrado
./dnslis2.sh ejemplo.com --wildcard-check
# Método manual: filtrar respuestas idénticasR: NO. Solo si tienes permiso escrito explícito del propietario. La enumeración no autorizada es delito.
R:
- Dominio desconocido:
subdominios2.txt(rápido) - Dominio conocido:
subdominios.txt(completo) - Dominios grandes: Combinar diccionarios customizados
R:
# Exportar a JSON
./dnslis2.sh ejemplo.com --format json > siem_input.json
# Enviar a API del SIEM
curl -X POST \
-H "Content-Type: application/json" \
-d @siem_input.json \
https://siem.empresa.com/api/import
# O usar ELK Stack
cat resultado.json | \
curl -X POST "localhost:9200/dns-enum/_doc" \
-H 'Content-Type: application/json' \
-d @-Este proyecto está bajo [ver archivo LICENSE]. Úsalo responsablemente.
Disclaimer de Responsabilidad:
ESTA HERRAMIENTA SE PROPORCIONA "TAL CUAL" SIN GARANTÍAS.
EL AUTOR NO ES RESPONSABLE POR:
- Uso no autorizado contra sistemas de terceros
- Daños directos o indirectos resultantes del uso
- Consecuencias legales por uso indebido
- Pérdida de datos o interrupción de servicios
EL USUARIO ES TOTALMENTE RESPONSABLE DE:
- Obtener autorización antes de usar
- Cumplir con leyes y regulaciones locales
- Proteger la confidencialidad de resultados
- Documentar y registrar su uso
- Subfinder
- Amass
- Assetfinder
- Findomain
- Knockpy