Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Ferramentas/GitHubGitHub/blechschmidt/massdns
OSINT (Inteligência de Fontes Abertas)ReconhecimentoEnumeração de DNS e SubdomíniosColeta de InformaçõesAnálise de DNS
GitHubblechschmidt/massdns

massdns

Um resolvedor DNS stub de alto desempenho para consultas em massa e reconhecimento (enumeração de subdomínios)

Ver Repositório
3.6k504há 4 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

MassDNS

Um resolver stub DNS de alto desempenho

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.

Contribuidores

  • Quirin Scheitle, Universidade Técnica de Munique

Compilação

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.

Uso

root@kitploit:~
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.

Exemplo

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:

root@kitploit:~
$ ./bin/massdns -r lists/resolvers.txt -t AAAA domains.txt > results.txt

Isso é equivalente a:

root@kitploit:~
$ ./bin/massdns -r lists/resolvers.txt -t AAAA -w results.txt domains.txt

Exemplo de saída

Por padrão, o MassDNS exibirá pacotes de resposta em formato de texto, semelhante ao seguinte:

root@kitploit:~
;; 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.

Resolução

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.

Registros PTR

O MassDNS inclui um script Python que permite resolver todos os registros PTR IPv4 imprimindo suas respectivas consultas na saída padrão.

root@kitploit:~
$ ./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.

Reconhecimento por força bruta de subdomínios

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:

root@kitploit:~
$ ./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:

root@kitploit:~
$ ./scripts/ct.py example.com | ./bin/massdns -r lists/resolvers.txt -t A -o S -w results.txt

Os arquivos names.txt e names_small.txt, copiados do projeto subbrute, contêm nomes de subdomínios comumente usados. Considere também usar a compilação de subdomínios de Jason Haddix com mais de 1.000.000 de nomes ou a wordlist do Assetnote com mais de 9.000.000 de nomes.

O MassDNS também inclui um script wrapper recon.py (status beta) na pasta scripts, que realiza enumeração de subdomínios diretamente contra servidores de nomes autoritativos e, portanto, não requer resolvers de terceiros. A concorrência é determinada automaticamente pelo MassDNS e suporta centenas de milhares de consultas por segundo, entregando resultados confiáveis. Em um servidor dedicado barato, a wordlist do Assetnote pode ser enumerada em menos de um minuto. Uma limitação atual é que a delegação de zona é tratada apenas até o ponto de delegação. Por exemplo, se example.org for enumerado e sub.example.org for delegado a outro servidor de nomes, abc.sub.example.org não será encontrado por este script se abc.sub estiver contido na wordlist. No entanto, o script relatará esse fato como ?.sub.example.org neste caso.

root@kitploit:~
$ ./scripts/recon.py -d google.com -l lists/best-dns-wordlist.txt > google.txt

Capturas de tela

Screenshot

Segurança

O MassDNS não requer privilégios de root e, portanto, reduzirá privilégios para o usuário chamado "nobody" por padrão quando executado como root. Se o usuário "nobody" não existir, o MassDNS se recusará a executar. Nesse caso, é recomendável executar o MassDNS como outro usuário não privilegiado. A redução de privilégios pode ser contornada usando o argumento --root, o que não é recomendado. Observe também que outras branches que não a master não devem ser usadas em produção.

Considerações práticas

Ajuste de desempenho

O MassDNS é uma aplicação simples de thread única projetada para cenários em que a rede é o gargalo. Ele é projetado para ser executado em servidores com altas larguras de banda de upload e download. Internamente, o MassDNS utiliza um mapa hash que controla a concorrência das consultas. Definir o parâmetro de tamanho -s permite, portanto, controlar a taxa de consulta. Se você estiver enfrentando problemas de desempenho, tente ajustar o parâmetro -s para obter uma melhor taxa de sucesso.

Evasão de limitação de taxa

Caso a limitação de taxa por resolvers IPv6 seja um problema, você pode usar --rand-src-ipv6 <seu_prefixo_ipv6>. O MassDNS usará então um socket bruto para enviar e receber pacotes DNS e escolherá aleatoriamente um endereço IPv6 de origem do prefixo especificado para cada consulta. Isso requer que o MassDNS seja executado com privilégios CAP_NET_RAW. Ao usar esse método, você deve configurar iptables ou nftables para descartar o tráfego DNS recebido pelo MassDNS para que nenhuma resposta ICMP Port unreachable seja gerada pelo sistema operacional, por exemplo, usando ip6tables -p udp --sport 53 -I INPUT -j DROP. Observe que esta regra é apenas exemplar e descartaria todo o tráfego DNS, incluindo tráfego de outras aplicações. Você pode querer adaptar a regra para ser mais granular e adequada ao seu caso de uso.

Autenticidade dos resultados

Se a autenticidade dos resultados for altamente essencial, você não deve confiar na lista de resolvers incluída. Em vez disso, configure um resolver unbound local e forneça ao MassDNS seu endereço IP. Caso esteja usando o MassDNS como ferramenta de reconhecimento, você pode executá-lo primeiro com a lista de resolvers padrão e depois executá-lo novamente nos nomes encontrados com uma lista de resolvers confiáveis para eliminar falsos positivos.

Caso esteja enumerando subdomínios para um único nome, por exemplo, para example.com, você pode simplesmente deixar de lado os resolvers de terceiros. Nesse caso, você pode sondar diretamente os servidores de nomes autoritativos da seguinte forma:

root@kitploit:~
$ ./bin/massdns -r <(./scripts/auth-addrs.sh example.com) --norecurse -o Je example-com-subdomains.txt > results.txt

A fazer

  • Evitar inundar resolvers que estão empregando limites de taxa ou recusando resoluções após algum tempo
  • Implementar limites de largura de banda
  • Empregar verificações entre resolvers para detectar envenenamento de DNS e spam de DNS (por exemplo, sequestro de DNS Level 3)
  • Adicionar detecção de wildcard para reconhecimento
  • Melhorar a confiabilidade do reconhecimento adicionando um modo que re-resolve os domínios encontrados através de uma lista de resolvers confiáveis (locais) para eliminar falsos positivos
  • Detectar concorrência ideal automaticamente
  • Analisar a linha de comando corretamente e permitir o uso/combinação de opções curtas sem espaços
Baixar ferramenta