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 -p
o 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
Argumentos | Descripción | Ejemplo |
---|---|---|
-m, –mode | Modo de escaneo: active o passive | active |
-d, –domain | Dominios para analizar (si son varios, separarlos por coma) | hackerone.com,facebook.com |
-w, –wordlist | Fichero con los subdominios a probar | subdomains-5000.txt |
-i, –ip | Cuando un subdominio es encontrado, muestra la IP en la que está alojado | |
–no-passive | No usar tecnicas OSINT para obtener subdominios | |
-nb, –no-bruteforce | No hacer pura fuerza bruta | |
-p, –ports | Escanear los puertos TCP de los subdominios encontrados | 80,443,8080 |
–top-100-ports | Escanea los Top 100 puertos (No compatible con la opción -p) | |
–top-1000-ports | Escanea los Top 1000 puertos (No compatible con la opción -p) | |
–top-web-ports | Escanea los Top Web puertos (No compatible con la opción -p) | |
-s, –silent | Modo silencioso. No muestra nada por pantalla | |
–no-color | Muestra el output sin color | |
-t, –threads | Número de hilos a utilizar (Default: 25) | 20 |
-o, –output | Guarda los resultados en ficheros txt, json y html | |
–max-response-size | Tamañ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, –help | Comando de ayuda | |
–version | Muestra la versión de Dome y finaliza | |
-v, –verbose | Muestra 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