MassDNS: Herramienta DNS en Kali
MassDNS: Herramienta DNS en Kali
MassDNS es una herramienta de resolución de nombres DNS de alto rendimiento diseñada para realizar búsquedas masivas de manera extremadamente rápida. Si estás usando Kali Linux para labores de reconocimiento o búsqueda de subdominios, MassDNS es indispensable porque puede procesar millones de consultas en minutos, algo que herramientas tradicionales como nslookup o dig no pueden hacer a esa escala.
¿Por qué usar MassDNS en Kali?
A diferencia de otros resolvedores, MassDNS no espera a que una consulta termine antes de enviar la siguiente. Utiliza un motor de entrada/salida asíncrono, lo que le permite manejar un volumen masivo de paquetes de forma simultánea.
Instalación en Kali Linux
Aunque a veces está en los repositorios, lo ideal es compilarlo desde la fuente para tener la versión más estable:
Clona el repositorio:
Bashgit clone https://github.com/blechschmidt/massdns.gitEntra al directorio y compila:
Bashcd massdns make(Opcional) Muévelo a tu PATH para usarlo desde cualquier carpeta:
Bashsudo cp bin/massdns /usr/local/bin/
Cómo funciona el flujo de trabajo
Para que MassDNS sea efectivo, necesita tres elementos:
Lista de objetivos: Un archivo
.txtcon los dominios que quieres consultar.Lista de resolvedores: Un archivo con direcciones IP de servidores DNS (Google, Cloudflare, etc.) que se encargarán de procesar tus peticiones.
Ancho de banda: MassDNS es tan potente que puede saturar tu conexión si no limitas la tasa de paquetes.
Comandos básicos y uso
El uso típico consiste en tomar una lista de posibles subdominios y verificar cuáles existen realmente:
massdns -r lists/resolvers.txt -t A -o S subdominios.txt > resultados.txt
Explicación de los parámetros:
-r: Ruta al archivo de resolvedores (MassDNS suele incluir uno en la carpetalists/).-t: Tipo de registro DNS que buscas (A, MX, NS, TXT, etc.).-o S: Formato de salida "Simple" (fácil de leer).subdominios.txt: Tu archivo de entrada.> resultados.txt: Guarda la salida en un archivo.
Nota de experto: Ten cuidado con el parámetro
-s(peticiones por segundo). Si lo pones muy alto, puedes recibir respuestas falsas o ser bloqueado temporalmente por los proveedores de DNS.
Integración con otras herramientas
MassDNS brilla cuando se combina con otras utilidades de Kali. Por ejemplo, puedes usarlo para filtrar resultados de una fuerza bruta de subdominios generada por Sublist3r o Assetfinder.
Automatizar esto te ahorrará mucho tiempo, ya que MassDNS genera mucha "basura" o formatos que no siempre son cómodos para trabajar con otras herramientas como httprobe o nmap.
Aquí tienes un script básico en Bash que toma una lista de subdominios, los procesa con MassDNS y limpia la salida para dejarte solo una lista limpia de IPs o dominios activos.
Script: recono_dns.sh
#!/bin/bash
# Configuración de rutas (ajusta según tu instalación)
RESOLVERS="./massdns/lists/resolvers.txt"
MASSDNS_BIN="massdns"
if [ "$#" -ne 1 ]; then
echo "Uso: $0 lista_subdominios.txt"
exit 1
fi
INPUT=$1
OUTPUT_RAW="raw_results.txt"
OUTPUT_CLEAN="final_subdomains.txt"
echo "[+] Iniciando MassDNS..."
$MASSDNS_BIN -r $RESOLVERS -t A -o S $INPUT -w $OUTPUT_RAW
echo "[+] Limpiando resultados..."
# Filtramos solo las líneas que contienen un registro A (IP) y extraemos el dominio
grep " A " $OUTPUT_RAW | cut -d' ' -f1 | sed 's/\.$//' | sort -u > $OUTPUT_CLEAN
echo "[+] Proceso terminado."
echo "[+] Resultados guardados en: $OUTPUT_CLEAN"
echo "[+] Total de dominios vivos: $(wc -l < $OUTPUT_CLEAN)"
Pasos para usarlo:
Crea el archivo: Copia el código de arriba en un archivo llamado
recono_dns.sh.Dale permisos: Ejecútalo en tu terminal:
Bashchmod +x recono_dns.shEjecútalo:
Bash./recono_dns.sh mis_subdominios.txt
¿Qué hace la parte de la "Limpieza"?
La línea de grep y sed es la clave. MassDNS suele devolver resultados con un punto al final (ej. google.com.). El comando sed 's/\.$//' elimina ese punto final para que el dominio sea válido para navegar o atacar.
El siguiente paso lógico
Una vez que tienes final_subdomains.txt, lo ideal es saber cuáles de esos dominios tienen un servidor web activo (puerto 80 o 443).
Filtrar por servicios HTTP/HTTPS es el paso crítico para pasar del reconocimiento pasivo (DNS) al reconocimiento activo (ataque o auditoría).
En Kali, las dos herramientas reinas para esto son httprobe (clásica y rápida) y httpx (más moderna y con muchísima información extra). Vamos a actualizar tu script para que use httpx, ya que te dirá no solo si está vivo, sino también el código de estado (200, 404, etc.), el título de la página y el servidor (Apache, Nginx).
Instalación rápida de httpx
Si no la tienes, se instala en un segundo:
sudo apt update && sudo apt install httpx-toolkit -y
Script Mejorado: recono_full.sh
Este script toma la salida de MassDNS y verifica automáticamente qué dominios tienen una web funcionando.
#!/bin/bash
# Configuración
RESOLVERS="./massdns/lists/resolvers.txt"
MASSDNS_BIN="massdns"
INPUT=$1
if [ "$#" -ne 1 ]; then
echo "Uso: $0 lista_subdominios.txt"
exit 1
fi
echo "[+] 1. Corriendo MassDNS..."
$MASSDNS_BIN -r $RESOLVERS -t A -o S $INPUT | grep " A " | cut -d' ' -f1 | sed 's/\.$//' | sort -u > subdominios_vivos.txt
echo "[+] 2. Verificando servicios Web (HTTP/HTTPS)..."
# httpx probará puertos 80, 443, 8080, etc.
# -sc (status code), -title (título web), -td (tecnologías)
cat subdominios_vivos.txt | httpx -sc -title -td -o webs_activas.txt
echo "-----------------------------------------------"
echo "[+] Proceso completado."
echo "[+] Lista de dominios con IP: subdominios_vivos.txt"
echo "[+] Detalle de servidores web: webs_activas.txt"
¿Qué verás en el resultado?
Cuando ejecutes el script, la salida en webs_activas.txt se verá algo así:
| URL | Status | Title | Technology |
https://admin.ejemplo.com | 200 | Dashboard Login | PHP, Apache |
https://dev.ejemplo.com | 403 | Forbidden | Nginx |
http://api.ejemplo.com | 200 | Swagger UI | Node.js, Express |
Un pequeño consejo "pro"
Si estás auditando una empresa grande, muchos subdominios pueden apuntar a la misma IP (hosting compartido o balanceadores). Puedes añadir -ip al comando de httpx para ver la dirección IP de cada web al lado del resultado y así evitar atacar 50 veces el mismo servidor físico.
Este es el toque final para un flujo de trabajo de reconocimiento profesional. Cuando tienes cientos de subdominios, abrirlos uno a uno en el navegador es imposible.
Para esto usamos Gowitness. Es una herramienta que "visita" cada URL que encontró httpx, toma una captura de pantalla y genera un reporte en HTML muy elegante donde puedes hacer scroll y ver qué hay en cada servidor sin entrar manualmente.
1. Instalación de Gowitness en Kali
Gowitness suele requerir go, pero puedes descargar el binario directamente:
# Descarga el binario (ejemplo para arquitectura amd64)
wget https://github.com/sensepost/gowitness/releases/download/2.5.1/gowitness-2.5.1-linux-amd64
# Renómbralo y dale permisos
mv gowitness-2.5.1-linux-amd64 gowitness
chmod +x gowitness
sudo mv gowitness /usr/local/bin/
2. Script Definitivo: recon_master.sh
Este script une MassDNS (descubrimiento), httpx (validación) y Gowitness (visualización).
#!/bin/bash
INPUT=$1
RESOLVERS="./massdns/lists/resolvers.txt"
if [ "$#" -ne 1 ]; then
echo "Uso: $0 lista_subdominios.txt"
exit 1
fi
echo "[+] 1. Resolviendo con MassDNS..."
massdns -r $RESOLVERS -t A -o S $INPUT | grep " A " | cut -d' ' -f1 | sed 's/\.$//' | sort -u > vivos.txt
echo "[+] 2. Filtrando Webs con httpx..."
cat vivos.txt | httpx -silent -o urls_finales.txt
echo "[+] 3. Tomando capturas de pantalla con Gowitness..."
# Esto creará una carpeta llamada 'screenshots' y una base de datos gowitness.sqlite3
gowitness scan file -f urls_finales.txt --threads 5
echo "[+] 4. Generando reporte visual..."
gowitness report generate
3. Cómo ver los resultados
Una vez que el script termine:
Verás una carpeta llamada
screenshotscon imágenes de cada web.Para ver el reporte interactivo, ejecuta:
Bashgowitness report listO mejor aún, abre el archivo
gowitness.html(si se generó) en tu navegador Firefox de Kali.
¿Qué ganas con esto?
Identificación rápida de paneles de control: Verás de inmediato si hay un "Admin Login" o un "Grafana" expuesto.
Páginas por defecto: Detectarás rápidamente páginas de "Apache Default Page" o "IIS", que suelen indicar servidores mal configurados.
Ahorro de tiempo: En 5 minutos de scroll ves lo que antes te tomaba 2 horas de clics.
Esta es la diferencia entre un "script que lanza herramientas" y un sistema de alerta inteligente.
Para lograr esto, vamos a aprovechar una función muy potente de httpx: su capacidad para filtrar por el contenido del título de la página o el cuerpo del HTML mientras escanea. Así, no tendrás que mirar 500 capturas de pantalla, sino solo las que realmente huelen a "panel de administración".
Script de Reconocimiento con Alertas de Objetivos Críticos
He modificado el flujo para que, además de las capturas, te genere un archivo llamado OBJETIVOS_CRITICOS.txt.
#!/bin/bash
INPUT=$1
RESOLVERS="./massdns/lists/resolvers.txt"
if [ "$#" -ne 1 ]; then
echo "Uso: $0 lista_subdominios.txt"
exit 1
fi
echo "[+] 1. Resolviendo con MassDNS..."
massdns -r $RESOLVERS -t A -o S $INPUT | grep " A " | cut -d' ' -f1 | sed 's/\.$//' | sort -u > vivos.txt
echo "[+] 2. Buscando Paneles de Control y Logins con httpx..."
# Filtramos por palabras clave en el título o contenido
cat vivos.txt | httpx -silent -ml "login,admin,dashboard,jenkins,grafana,kibana,setup,config" -o OBJETIVOS_CRITICOS.txt
echo "[+] 3. Generando capturas para TODO (en segundo plano)..."
gowitness scan file -f vivos.txt --threads 5 --db gowitness.sqlite3
echo "--------------------------------------------------------"
echo "[!] ALERTA: Se han encontrado $(wc -l < OBJETIVOS_CRITICOS.txt) paneles críticos."
echo "[!] Revisa el archivo 'OBJETIVOS_CRITICOS.txt' inmediatamente."
echo "--------------------------------------------------------"
¿Cómo funciona el filtro inteligente?
El parámetro clave aquí es -ml (match line) o -ms (match string) en httpx.
Palabras clave:
login, admin, dashboardson los clásicos.Herramientas:
jenkins, grafana, kibanasuelen ser minas de oro si están mal configuradas.Instalaciones:
setup, configpueden indicar aplicaciones que aún no han sido terminadas de instalar (¡muy peligrosas!).
Un truco extra de organización
Si quieres ir un paso más allá, puedes hacer que gowitness solo tome capturas de los objetivos críticos primero para que no pierdas tiempo procesando páginas de error o sitios en blanco:
# Solo capturas de lo que parece importante
gowitness scan file -f OBJETIVOS_CRITICOS.txt
¿Qué sigue ahora?
Ya tienes el "qué" (el subdominio) y el "cómo se ve" (la captura). Lo siguiente en una auditoría profesional es buscar vulnerabilidades conocidas en esos servicios específicos.
¡Has llegado al "Santo Grial" del reconocimiento automatizado! Nuclei es, actualmente, la herramienta más potente para encontrar vulnerabilidades basadas en plantillas (templates) creadas por la comunidad.
Si MassDNS encuentra el dominio y httpx nos dice que es un panel de "Admin", Nuclei nos dirá si ese panel tiene una contraseña por defecto, un fallo de inyección o una vulnerabilidad conocida (CVE).
1. Instalación de Nuclei en Kali
Si no lo tienes, instálalo con:
sudo apt update && sudo apt install nuclei -y
Y actualiza sus plantillas (importantísimo para detectar lo más nuevo):
nuclei -ut
2. El Script "God Mode": full_auto_pwn.sh
Este script integra todo lo anterior y lanza un escaneo de vulnerabilidades solo sobre los objetivos que identificamos como críticos o vivos.
#!/bin/bash
TARGET_FILE=$1
RESOLVERS="./massdns/lists/resolvers.txt"
if [ "$#" -ne 1 ]; then
echo "Uso: $0 subdominios_potenciales.txt"
exit 1
fi
# --- FASE 1: RESOLUCIÓN MASIVA ---
echo "[+] 1. MassDNS: Filtrando dominios reales..."
massdns -r $RESOLVERS -t A -o S $TARGET_FILE | grep " A " | cut -d' ' -f1 | sed 's/\.$//' | sort -u > vivos.txt
# --- FASE 2: IDENTIFICACIÓN HTTP ---
echo "[+] 2. httpx: Verificando servicios web..."
cat vivos.txt | httpx -silent -o urls.txt
# --- FASE 3: ESCANEO DE VULNERABILIDADES (NUCLEI) ---
echo "[+] 3. Nuclei: Buscando fallos críticos..."
# -severity: buscamos solo fallos de nivel medio, alto y crítico para evitar ruido
# -it: escaneamos solo con tags específicos como cve, panel, exposure
nuclei -l urls.txt -severity medium,high,critical -it cve,panel,exposure -o vulnerabilidades.txt
echo "--------------------------------------------------------"
echo "[!] RECONOCIMIENTO FINALIZADO"
echo "[!] Revisar 'vulnerabilidades.txt' para ver fallos encontrados."
echo "--------------------------------------------------------"
¿Qué buscará Nuclei exactamente?
Al usar los tags cve, panel, exposure, Nuclei hará lo siguiente:
Paneles Expuestos: Detectará si hay un panel de Docker, VMware, PHPMyAdmin o Jenkins abierto al mundo.
Exposición de datos: Buscará archivos
.git, archivos de configuración.envo backups de bases de datos expuestos.CVEs: Probará exploits conocidos contra la versión específica del servidor que detecte.
3. Visualización de Resultados
Ahora tienes tres niveles de información:
vivos.txt: El mapa de la superficie de ataque.screenshots/: La confirmación visual (con Gowitness).vulnerabilidades.txt: El informe de qué está roto y por dónde entrar.
Consejo de seguridad: Recuerda que ejecutar Nuclei genera mucho ruido en los logs del servidor objetivo. Úsalo siempre bajo autorización en entornos de Bug Bounty o auditorías éticas.