Seguro que alguno pensabais que había dejado de publicar artículos en la web, pero no. Desde hace ya un mes he estado desarrollando una nueva herramienta para la enumeración de subdominios. Debido al trabajo y otros temas no he podido hacer ambas cosas a la vez por lo que me he dedicado 100% a la creación de la herramienta. Pero vamos al lío.

Os presento Dome, una herramienta escrita en python que enumera subdominios tanto de manera pasiva como de manera activa y además, muestra los puertos que tiene abiertos.

Es una herramienta perfecta para Bug Bounty Hunters y Pentesters durante la fase de enumeración.

Mediante sus dos modos podremos realizar escaneos activos o pasivos si lo que queremos es ser indetectables.

Modo pasivo

Este modo utiliza técnicas de OSINT para obtener subdominios. Este modo no realiza ninguna petición al dominio por lo que es indetectable.

Para utilizar el 100% de los motores de búsqueda, rellenar el fichero config.api con las APIs correspondientes.

El uso básico de este modo es:

python dome.py -m passive -d domain

Modo activo

Este modo realiza fuerza bruta utilizando dos tecnicas para la obtención de subdominios válidos.

  • Fuerza bruta pura: Este escaneo enumera subdominios desde a.dominio.com hasta zzz.dominio.com. (26¹ + 26² + 26³ = 18278 subdominios diferentes). Este modo puede deshabilitarse mediante -nb, --no-bruteforce
  • Mediante diccionario: Este modo utiliza un diccionario proporcionado por el usuario mediante el argumento -w, --wordlist. Si no se especifica este argumento al ejecutar el programa, este modo no se ejecutará

El modo activo ejecutará también el modo pasivo pero en este caso, los subdominios encontrados serán probados para ver si siguen estando activos. Para deshabilitar el escaneo pasivo hay que usar el argumento --no-passive

El uso básico de este modo es:

python dome.py -m active -d domain -w wordlist.txt

Si también se quiere realizar un escaneo de puertos, se puede utilizar la opción -po utilizar un argumento que especifique los «top ports» a usar (apartado uso)

 
Instalacion

Puedes ejecutar Dome en Linux o Windows con Python 2 o 3 aunque recomendamos el uso de Python 3

Instala las dependencias y ejecuta el programa:

git clone https://github.com/v4d1/Dome.git

cd Dome

pip install -r requirements.txt

python dome.py --help

Características principales de Dome
  • Fácil de usar, tan solo instala los requisitos y ejecutalo
  • Escaneo activo y pasivo (leer arriba)
  • 7 resolvers distintos incluyendo Google, CloudFare (el más rápido, Quad9 y Cisco DNS (use --resolvers filename.txt para usar una lista personalizada de resolvers, uno por linea)
  • Más de 20 fuentes diferentes de OSINT
  • Los subdominios obtenidos de manera pasiva son probados para ver si siguen disponibles (solo en el modo activo)
  • Soporte para webs que requieren tokens de APIs
  • Detecta cuando una clave API ya no funciona (Otras herramientas lanzan un error y dejan de funcionar)
  • Detección y bypass de Wildcard DNS
  • Escaneo de puertos personalizado o mediante los argumentos Top100 Top1000 o TopWeb
  • Output con colores para una mejor lectura
  • Soporte para Windows y Linux así como para python 2 y 3 (Python 3 recomendado)
  • Altamente customizable a través de argumentos
  • Posibilidad de escanear más de un dominio simultáneamente
  • Posibilidad de usar hilos para escaneos más rápidos
  • Exportar los resultados en distintos formatos como txt, json o html
Motores de búsqueda OSINT

Dome usa las siguientes webs para obtener los subdominios en el modo pasivo

Sin API:

  • AlienVault
  • HackerTarget
  • RapidDNS
  • ThreatMiner
  • urlscan.io
  • threatcrowd.org
  • web.archive.org
  • crt.sh
  • bufferover.run
  • CertSpotter
  • Anubis-DB
  • Hunt.io
  • Sonar
  • SiteDossier
  • DNSrepo

Con API:

  • VirusTotal
  • Shodan
  • Spyse
  • SecurityTrails
  • PassiveTotal
  • BinaryEdge
 
Argumentos
ArgumentosDescripciónEjemplo
-m, –modeModo de escaneo: active o passiveactive
-d, –domainDominios para analizar (si son varios, separarlos por coma)hackerone.com,facebook.com
-w, –wordlistFichero con los subdominios a probarsubdomains-5000.txt
-i, –ipCuando un subdominio es encontrado, muestra la IP en la que está alojado 
–no-passiveNo usar tecnicas OSINT para obtener subdominios 
-nb, –no-bruteforceNo hacer pura fuerza bruta 
-p, –portsEscanear los puertos TCP de los subdominios encontrados80,443,8080
–top-100-portsEscanea los Top 100 puertos (No compatible con la opción -p) 
–top-1000-portsEscanea los Top 1000 puertos (No compatible con la opción -p) 
–top-web-portsEscanea los Top Web puertos (No compatible con la opción -p) 
-s, –silentModo silencioso. No muestra nada por pantalla 
–no-colorMuestra el output sin color 
-t, –threadsNúmero de hilos a utilizar (Default: 25)20
-o, –outputGuarda los resultados en ficheros txt, json y html  
–max-response-sizeTamaño máximo para las respuestas HTTP  (Default:5000000 (5MB))1000000
–r, –resolvers

Fichero de texto con los resolvers a utilizar. Uno por fila.

resolvers.txt
-h, –helpComando de ayuda 
–versionMuestra la versión de Dome y finaliza 
-v, –verboseMuestra información adicional durante la ejecución

 

Ejemplos

Realiza escaneo activo y pasivo, muestra la ip asociada y realiza un escaneo de puertos utilizando el top-web-ports. Ademas, guarda los resultados en /results:

python dome.py -m active -d domain -w wordlist.txt -i --top-web-ports -o --verbose`

Realizar un escaneo pasivo en modo silencioso y escribir los resultados en la carpeta /results:

python dome.py -m passive -d domain --silent -o

Realiza escaneo activo y escaneo de puertos pero NO escaneo pasivo:

python dome.py -m active -d domain -w wordlist.txt --no-passive

Realizar fuerza bruta solo basado en diccionario:

python dome.py -m active -d domain -w wordlist.txt --no-bruteforce

Realiza escaneo activo y pasivo y escanea únicamente los puertos 22,80,3306

python dome.py -m active -d domain -w wordlist.txt -p 22,80,3306