
Un resolvedor DNS stub de alto rendimiento para consultas masivas y reconocimiento (enumeración de subdominios)
MassDNS es un resolvedor de stub DNS simple y de alto rendimiento dirigido a aquellos que buscan resolver una cantidad masiva de nombres de dominio en el orden de millones o incluso miles de millones. Sin una configuración especial, MassDNS es capaz de resolver más de 350.000 nombres por segundo utilizando resolvedores disponibles públicamente.
Clona el repositorio git y cd a la carpeta raíz del proyecto. Luego ejecuta make para compilar desde el código fuente.
Si no estás en Linux, ejecuta make nolinux. En Windows, se requieren los paquetes gcc-core, git y make de Cygwin.
Usage: ./bin/massdns [options] [domainlist]
-b --bindto Bind to IP address and port. (Default: 0.0.0.0:0)
--busy-poll Use busy-wait polling instead of epoll.
-c --resolve-count Number of resolves for a name before giving up. (Default: 50)
--drop-group Group to drop privileges to when running as root. (Default: nogroup)
--drop-user User to drop privileges to when running as root. (Default: nobody)
--extended-input Input names are followed by a space-separated list of resolvers.
These are used before falling back to the resolvers file.
--filter Only output packets with the specified response code.
--flush Flush the output file whenever a response was received.
-h --help Show this help.
--ignore Do not output packets with the specified response code.
-i --interval Interval in milliseconds to wait between multiple resolves of the same
domain. (Default: 500)
-l --error-log Error log file path. (Default: /dev/stderr)
--norecurse Use non-recursive queries. Useful for DNS cache snooping.
-o --output Flags for output formatting.
--predictable Use resolvers incrementally. Useful for resolver tests.
--processes Number of processes to be used for resolving. (Default: 1)
-q --quiet Quiet mode.
--rand-src-ipv6 Use a random IPv6 address from the specified subnet for each query.
--rand-src-ipv6-file Use a random IPv6 address from the specified file.
--rcvbuf Size of the receive buffer in bytes.
--retry Unacceptable DNS response codes.
(Default: All codes but NOERROR or NXDOMAIN)
-r --resolvers Text file containing DNS resolvers.
--root Do not drop privileges when running as root. Not recommended.
-s --hashmap-size Number of concurrent lookups. (Default: 10000)
--sndbuf Size of the send buffer in bytes.
--status-format Format for real-time status updates, json or ansi (Default: ansi)
--sticky Do not switch the resolver when retrying.
--socket-count Socket count per process. (Default: 1)
-t --type Record type to be resolved. (Default: A)
--verify-ip Verify IP addresses of incoming replies.
-w --outfile Write to the specified output file instead of standard output.
Output flags:
L - domain list output
S - simple text output
F - full text output
B - binary output
J - ndjson output
Advanced flags for the domain list output mode:
0 - Include NOERROR replies without answers.
Advanced flags for the simple output mode:
d - Include records from the additional section.
i - Indent any reply record.
l - Separate replies using a line feed.
m - Only output reply records that match the question name.
n - Include records from the answer section.
q - Print the question.
r - Print the question with resolver IP address, Unix timestamp and return code prepended.
s - Separate packet sections using a line feed.
t - Include TTL and record class within the output.
u - Include records from the authority section.
Advanced flags for the ndjson output mode:
e - Write a record for each terminal query failure.
Para una descripción detallada de la interfaz de línea de comandos, consulta la página del manual usando man ./doc/massdns.1.
Resuelve todos los registros AAAA de los dominios en domains.txt usando los resolvedores dentro de resolvers.txt en lists y almacena los resultados en results.txt:
$ ./bin/massdns -r lists/resolvers.txt -t AAAA domains.txt > results.txt
Esto es equivalente a:
$ ./bin/massdns -r lists/resolvers.txt -t AAAA -w results.txt domains.txt
Por defecto, MassDNS mostrará los paquetes de respuesta en formato de texto que se ve similar a lo siguiente:
;; Server: 77.41.229.2:53
;; Size: 93
;; Unix time: 1513458347
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51298
;; flags: qr rd ra ; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0
;; QUESTION SECTION:
example.com. IN A
;; ANSWER SECTION:
example.com. 45929 IN A 93.184.216.34
;; AUTHORITY SECTION:
example.com. 24852 IN NS b.iana-servers.net.
example.com. 24852 IN NS a.iana-servers.net.
La dirección IP del resolvedor se incluye para facilitarte el filtrado de la salida en caso de que detectes que algunos resolvedores producen malos resultados.
El repositorio incluye el archivo resolvers.txt que consiste en un subconjunto filtrado de los resolvedores proporcionados por el proyecto subbrute.
Ten en cuenta que el uso de MassDNS puede causar una carga significativa en los resolvedores utilizados y resultar en quejas por abuso enviadas a tu ISP.
Ten en cuenta también que los resolvedores proporcionados no están garantizados para ser fiables. La lista de resolvedores está actualmente desactualizada y una gran parte de los resolvedores no funciona.
La implementación personalizada de DNS de MassDNS, sin malloc, actualmente solo soporta los registros más comunes. Eres bienvenido a ayudar cambiando esto colaborando.
MassDNS incluye un script de Python que te permite resolver todos los registros PTR de IPv4 imprimiendo sus respectivas consultas en la salida estándar.
$ ./scripts/ptr.py | ./bin/massdns -r lists/resolvers.txt -t PTR -w ptr.txt
Ten en cuenta que las etiquetas dentro de in-addr.arpa están invertidas. Para resolver el nombre de dominio de 1.2.3.4, MassDNS espera 4.3.2.1.in-addr.arpa como nombre de consulta de entrada.
Como consecuencia, el script de Python no resuelve los registros en orden ascendente, lo cual es una ventaja porque se evitan picos repentinos de carga en los servidores de nombres de las subredes IPv4.
Realiza escaneos de reconocimiento de manera responsable y ajusta el parámetro -s para no abrumar a los servidores de nombres autoritativos.
Similar a subbrute, MassDNS te permite hacer fuerza bruta en subdominios usando el script incluido subbrute.py:
$ ./scripts/subbrute.py example.com lists/names.txt | ./bin/massdns -r lists/resolvers.txt -t A -o S -w results.txt
Como método adicional de reconocimiento, el script ct.py extrae subdominios de los registros de transparencia de certificados al raspar los datos de crt.sh:
$ ./scripts/ct.py example.com | ./bin/massdns -r lists/resolvers.txt -t A -o S -w results.txt