
Una herramienta rápida y completa para el escaneo de redes organizacionales
Características • Uso • Instalación • Uso • Contribuir • Notas adicionales
Domainim es una herramienta rápida de reconocimiento de dominios para el escaneo de redes organizativas. La herramienta tiene como objetivo proporcionar una visión general breve de la estructura de una organización mediante técnicas como OSINT, fuerza bruta, resolución DNS, etc.
Características actuales (v1.0.1)

Enumeración de nombres de host virtuales
Búsqueda DNS inversa
Detecta subdominios comodín (para fuerza bruta)
Escaneo básico de puertos TCP
Acepta subdominios como entrada
Exportar resultados a archivo JSON
Algunas características están en desarrollo. Consulte Funcionalidades planificadas para más detalles.
El proyecto está inspirado en Sublist3r. El módulo de escáner de puertos se basa en gran medida en NimScan.
Puede compilar este repositorio desde el código fuente:
git clone [email protected]:pptx704/domainim
nimble build
./domainim <dominio> [--ports=<puertos>]
O bien, puede descargar el binario desde la página de lanzamientos. Tenga en cuenta que el binario solo se ha probado en sistemas basados en Debian.
./domainim <dominio> [--ports=<puertos> | -p:<puertos>] [--wordlist=<archivo> | l:<archivo> [--rps=<int> | -r:<int>]] [--dns=<dns> | -d:<dns>] [--out=<archivo> | -o:<archivo>]
<dominio> es el dominio a enumerar. Puede ser también un subdominio.--ports | -p es una cadena que especifica los puertos a escanear. Puede ser uno de los siguientes:
all - Escanear todos los puertos (1-65535)none - Omitir escaneo de puertos (predeterminado)t<n> - Escanear los n puertos principales (igual que nmap). Ej: t100 escanea los 100 puertos principales. Valor máximo 5000. Si n es mayor que 5000, se ajusta a 5000.80 escanea el puerto 8080-100 escanea puertos del 80 al 10080,443,8080 escanea los puertos 80, 443 y 808080,443,8080-8090,t500 escanea puertos 80, 443, 8080 a 8090 y los 500 principales--dns | -d es la dirección del servidor DNS. Debe ser una dirección IPv4 válida y puede incluir opcionalmente el número de puerto:
Ejemplos
./domainim nmap.org --ports=all./domainim google.com --ports=none --dns=8.8.8.8#53./domainim pptx704.com --ports=t100 --wordlist=wordlist.txt --rps=1500./domainim pptx704.com --ports=t100 --wordlist=wordlist.txt --outfile=results.json./domainim mysite.com --ports=t50,5432,7000-9000 --dns=1.1.1.1El menú de ayuda se puede consultar con ./domainim --help o ./domainim -h.
Usage:
domainim <domain> [--ports=<ports> | -p:<ports>] [--wordlist=<filename> | l:<filename> [--rps=<int> | -r:<int>]] [--dns=<dns> | -d:<dns>] [--out=<filename> | -o:<filename>]
domainim (-h | --help)
Options:
-h, --help Show this screen.
-p, --ports Ports to scan. [default: `none`]
Can be `all`, `none`, `t<n>`, single value, range value, combination
-l, --wordlist Wordlist for subdomain bruteforcing. Bruteforcing is skipped for invalid file.
-d, --dns IP and Port for DNS Resolver. Should be a valid IPv4 with an optional port [default: system default]
-r, --rps DNS queries to be made per second [default: 1024 req/s]
-o, --out JSON file where the output will be saved. Filename must end with `.json`
Examples:
domainim domainim.com -p:t500 -l:wordlist.txt --dns:1.1.1.1#53 --out=results.json
domainim sub.domainim.com --ports=all --dns:8.8.8.8 -t:1500 -o:results.json
El esquema JSON para los resultados es el siguiente:
[
{
"subdomain": string,
"data": [
"ipv4": string,
"vhosts": [string],
"reverse_dns": string,
"ports": [int]
]
}
]
Ejemplo JSON para nmap.org se puede encontrar aquí.
Las contribuciones son bienvenidas. Siéntase libre de abrir un pull request o un issue.
Este proyecto aún se encuentra en etapas tempranas. Soy consciente de varias limitaciones.
Los dos motores que utilizo (los llamo motores porque Sublist3r lo hace así) actualmente tienen algún tipo de límite de respuesta. dnsdumpster puede obtener hasta 100 subdominios. crt.sh también aleatoriza los resultados en caso de demasiados resultados. Otro problema con crt.sh es que a veces devuelve algún error SQL. Por lo tanto, para algunos dominios los resultados pueden variar entre ejecuciones. Planeo añadir más motores en el futuro (al menos un motor de fuerza bruta).
El escáner de puertos tiene un tiempo de espera de solo tiempo de respuesta ping + 750 ms. Esto podría llevar a falsos negativos. Dado que domainim no está diseñado para escanear puertos sino para proporcionar una visión rápida, estos casos son aceptables. Sin embargo, planeo añadir una bandera para aumentar el tiempo de espera. Por la misma razón, no se muestran los puertos filtrados. Para un escaneo de puertos más completo, recomiendo usar Nmap. Domainim tampoco evita la limitación de velocidad (si la hay).
Puede parecer que la forma en que se imprimen los vhostnames solo repite información.

Imprimir de la siguiente manera podría haber sido mejor:
ack.nmap.org, issues.nmap.org, nmap.org, research.nmap.org, scannme.nmap.org, svn.nmap.org, www.nmap.org
↳ 45.33.49.119
↳ Reverse DNS: ack.nmap.org.
Pero anteriormente durante las pruebas, encontré casos en los que no todas las IPs son compartidas por el mismo conjunto de vhostnames. Por eso decidí mantenerlo así.

El servidor DNS puede tener algún tipo de limitación de velocidad. Por eso añadí retardos aleatorios (entre 0-300ms) para la resolución de IPv4 por consulta. Esto es para no enviar todas las consultas de una vez al servidor DNS, sino de una manera más natural. Para el método de fuerza bruta, el valor por defecto está entre 0-1000ms, pero se puede cambiar con la bandera --rps | -t.
Una limitación particular que me molesta es que el resolvedor DNS no devuelve todas las IPs para un dominio. Por lo tanto, es necesario realizar múltiples consultas para obtener todas (o la mayoría) de las IPs. Pero, de nuevo, no es posible saber cuántas IPs tiene un dominio. Todavía tengo que encontrar una solución para esto. Además, nim-ndns no soporta registros CNAME. Por lo tanto, si un dominio tiene un registro CNAME, no se resolverá. Estoy esperando una respuesta del autor para esto.
Por ahora, la fuerza bruta se omite si se encuentra un posible subdominio comodín. Esto se debe a que, si un dominio tiene un subdominio comodín, la fuerza bruta resolverá IPv4 para todos los subdominios posibles. Sin embargo, también omitirá subdominios válidos (por ejemplo, scanme.nmap.org se omitirá aunque no sea un valor comodín). Más adelante añadiré una bandera --force-brute | -fb para forzar la fuerza bruta.
Algo similar ocurre con la enumeración de VHost para entradas de subdominios. Dado que se devuelven URLs que terminan con los subdominios dados, no se consideran subdominios de dominios similares. Por ejemplo, scannme.nmap.org no se imprimirá para ack.nmap.org, pero something.ack.nmap.org podría hacerlo. Podría buscar todos los subdominios de nmap.org, pero eso anula el propósito de tener subdominios como entrada.
Licencia MIT. Consulte LICENSE para el texto completo.
a.b.c.d - Usar servidor DNS en a.b.c.d puerto 53a.b.c.d#n - Usar servidor DNS en a.b.c.d puerto e--wordlist | -l - Ruta al archivo de lista de palabras. Se usa para fuerza bruta de subdominios. Si el archivo no es válido, se omite la fuerza bruta. Puede obtener una lista de palabras de SecLists. También se proporciona una lista de palabras en la página de lanzamientos.--rps | -r - Número de solicitudes por segundo durante la fuerza bruta. El valor predeterminado es 1024 req/s. Tenga en cuenta que las consultas DNS se realizan en lotes y el siguiente lote solo se ejecuta después de completar el anterior. Dado que las consultas pueden tener límite de velocidad, aumentar el valor no siempre garantiza resultados más rápidos.--out | -o - Ruta al archivo de salida. La salida se guardará en formato JSON. El nombre de archivo debe terminar en .json.