
Um resolvedor DNS stub de alto desempenho para consultas em massa e reconhecimento (enumeração de subdomínios)
MassDNS é um resolver stub DNS simples e de alto desempenho voltado para aqueles que buscam resolver uma quantidade massiva de nomes de domínio na ordem de milhões ou até bilhões. Sem configuração especial, o MassDNS é capaz de resolver mais de 350.000 nomes por segundo usando resolvers publicamente disponíveis.
Clone o repositório git e execute cd para a pasta raiz do projeto. Em seguida, execute make para compilar a partir do código-fonte. Se você não estiver no Linux, execute make nolinux. No Windows, os pacotes Cygwin gcc-core, git e make são necessários.
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 uma descrição detalhada da interface de linha de comando, consulte a página de manual usando man ./doc/massdns.1.
Resolva todos os registros AAAA dos domínios em domains.txt usando os resolvers em resolvers.txt em lists e armazene os resultados em results.txt:
$ ./bin/massdns -r lists/resolvers.txt -t AAAA domains.txt > results.txt
Isso é equivalente a:
$ ./bin/massdns -r lists/resolvers.txt -t AAAA -w results.txt domains.txt
Por padrão, o MassDNS exibirá pacotes de resposta em formato de texto, semelhante ao seguinte:
;; 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.
O endereço IP do resolver é incluído para facilitar a filtragem da saída caso você detecte que alguns resolvers produzem resultados ruins.
O repositório inclui o arquivo resolvers.txt contendo um subconjunto filtrado dos resolvers fornecidos pelo projeto subbrute. Observe que o uso do MassDNS pode causar uma carga significativa nos resolvers usados e resultar em reclamações de abuso enviadas ao seu ISP. Observe também que os resolvers fornecidos não são garantidos como confiáveis. A lista de resolvers está atualmente desatualizada, com uma grande parcela de resolvers disfuncionais.
A implementação DNS personalizada e livre de malloc do MassDNS atualmente suporta apenas os registros mais comuns. Você é bem-vindo para ajudar a mudar isso colaborando.
O MassDNS inclui um script Python que permite resolver todos os registros PTR IPv4 imprimindo suas respectivas consultas na saída padrão.
$ ./scripts/ptr.py | ./bin/massdns -r lists/resolvers.txt -t PTR -w ptr.txt
Observe que os rótulos dentro de in-addr.arpa são invertidos. Para resolver o nome de domínio de 1.2.3.4, o MassDNS espera 4.3.2.1.in-addr.arpa como nome de consulta de entrada. Como consequência, o script Python não resolve os registros em ordem crescente, o que é uma vantagem, pois evita picos pesados repentinos nos servidores de nomes das sub-redes IPv4.
Realize varreduras de reconhecimento de forma responsável e ajuste o parâmetro -s para não sobrecarregar os servidores de nomes autoritativos.
Semelhante ao subbrute, o MassDNS permite que você force subdomínios por brute force usando o script subbrute.py incluído:
$ ./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 reconhecimento, o script ct.py extrai subdomínios de logs de transparência de certificados, raspando os dados do crt.sh:
$ ./scripts/ct.py example.com | ./bin/massdns -r lists/resolvers.txt -t A -o S -w results.txt