MassDNS: Herramienta DNS en Kali

https://www.onlinetis.com/es/

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:

  1. Clona el repositorio:

    Bash
    git clone https://github.com/blechschmidt/massdns.git
    
  2. Entra al directorio y compila:

    Bash
    cd massdns
    make
    
  3. (Opcional) Muévelo a tu PATH para usarlo desde cualquier carpeta:

    Bash
    sudo 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 .txt con 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:

Bash
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 carpeta lists/).

  • -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

Bash
#!/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:

  1. Crea el archivo: Copia el código de arriba en un archivo llamado recono_dns.sh.

  2. Dale permisos: Ejecútalo en tu terminal:

    Bash
    chmod +x recono_dns.sh
    
  3. Ejecú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:

Bash
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.

Bash
#!/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í:

URLStatusTitleTechnology
https://admin.ejemplo.com200Dashboard LoginPHP, Apache
https://dev.ejemplo.com403ForbiddenNginx
http://api.ejemplo.com200Swagger UINode.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:

Bash
# 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).

Bash
#!/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:

  1. Verás una carpeta llamada screenshots con imágenes de cada web.

  2. Para ver el reporte interactivo, ejecuta:

    Bash
    gowitness report list
    

    O 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.

Bash
#!/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, dashboard son los clásicos.

  • Herramientas: jenkins, grafana, kibana suelen ser minas de oro si están mal configuradas.

  • Instalaciones: setup, config pueden 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:

Bash
# 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:

Bash
sudo apt update && sudo apt install nuclei -y

Y actualiza sus plantillas (importantísimo para detectar lo más nuevo):

Bash
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.

Bash
#!/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 .env o 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:

  1. vivos.txt: El mapa de la superficie de ataque.

  2. screenshots/: La confirmación visual (con Gowitness).

  3. 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.

Entradas populares de este blog

Hacking y ciberseguridad en kali linux con Fping

Hacking y ciberseguridad en kali linux con atk6-thcping6

Como utilizar Fierce en kali linux