
Resolvedor de DNS de alta velocidade e bruteforçador de subdomínios com filtragem precisa de curingas e validação de envenenamento de DNS para reconhecimento preciso.

Resolvedor de domínios rápido e bruteforcing de subdomínios com filtragem precisa de wildcards
Introdução »
Uso
·
Como funciona
·
Patrocínio
·
FAQ
puredns é um resolvedor de domínios rápido e uma ferramenta de bruteforcing de subdomínios que pode filtrar com precisão subdomínios curingas (wildcard) e entradas envenenadas por DNS.
Ele usa massdns, um poderoso resolvedor DNS stub, para realizar consultas em massa. Com a largura de banda adequada e uma boa lista de resolvedores públicos, pode resolver milhões de consultas em apenas alguns minutos. Infelizmente, os resultados do massdns são tão bons quanto as respostas fornecidas pelos resolvedores públicos. Os resultados são frequentemente poluídos por respostas DNS erradas e falsos positivos de subdomínios curingas.
puredns resolve isso com seu algoritmo de detecção de wildcards. Ele pode filtrar wildcards com base nas respostas DNS obtidas de um conjunto de resolvedores confiáveis. Também tenta contornar o envenenamento DNS validando as respostas obtidas usando esses resolvedores confiáveis.
Acha isso útil? ⭐ Dê uma estrela no GitHub — ajuda!

|
Se meu trabalho está gerando dinheiro para você, considere se tornar um patrocinador! Você pode ganhar algumas vantagens exclusivas! Também significaria MUITO ❤️, pois me permitiria continuar trabalhando gratuitamente para a comunidade. Mas independentemente do que você fizer, fique tranquilo que meu software continuará gratuito e de código aberto para você usar. |
Puredns requer massdns na máquina hospedeira. Se o caminho para o binário massdns estiver presente na variável de ambiente PATH, puredns funcionará imediatamente. Um bom lugar para copiar o executável massdns é /usr/local/bin na maioria dos sistemas. Caso contrário, você precisará especificar o caminho para o arquivo binário massdns usando o argumento de linha de comando --bin.
O seguinte deve funcionar na maioria dos sistemas baseados em Debian. Siga as instruções oficiais para mais informações.
git clone https://github.com/blechschmidt/massdns.git
cd massdns
make
sudo make install
Você precisa obter uma lista de servidores DNS públicos para usar o puredns. Consulte a FAQ para aprender como selecionar sua própria lista de servidores funcionais.
Você pode baixar uma versão binária.
Alternativamente, você pode compilar a versão mais recente facilmente. Primeiro, certifique-se de que o Go está instalado no seu sistema - as duas últimas versões principais do Go são suportadas. Consulte a página oficial de instalação do Go para instruções de instalação. Em seguida, execute o seguinte comando:
go install github.com/d3mondev/puredns/v2@latest
Certifique-se de visualizar a lista completa de comandos e opções usando puredns --help.
Se um arquivo resolvers.txt existir no diretório de trabalho atual, puredns o usará por padrão. Caso contrário, se os arquivos ~/.config/puredns/resolvers.txt ou ~/.config/puredns/resolvers-trusted.txt estiverem presentes, puredns os utilizará automaticamente como resolvedores. Se nenhuma dessas opções estiver disponível, especifique os resolvedores a serem usados com os argumentos --resolvers e --resolvers-trusted.
Especificar resolvedores confiáveis é opcional. Por padrão, puredns simplesmente usará 8.8.8.8 e 8.8.4.4.
Veja como fazer bruteforce de uma lista massiva de subdomínios usando uma wordlist chamada all.txt:
puredns bruteforce all.txt domain.com
Você também pode fazer bruteforce de vários domínios de uma só vez com a opção -d para carregar um arquivo de texto contendo domínios em vez de especificar um único domínio como argumento:
puredns bruteforce all.txt -d domains.txt
Você também pode resolver uma lista de domínios contida em um arquivo de texto (um por linha).
puredns resolve domains.txt
Você pode passar a lista de domínios para resolver via stdin:
cat domains.txt | puredns resolve
Ou uma lista de palavras para usar no bruteforce:
cat wordlist.txt | puredns bruteforce domain.com
Você também pode adicionar a opção -q para exibir apenas os domínios encontrados e encaminhá-los para outras ferramentas:
cat domains.txt | puredns resolve -q | httprobe
Você pode salvar as seguintes informações em arquivos para reutilizá-las em seus fluxos de trabalho:
puredns resolve domains.txt --write valid_domains.txt \
--write-wildcards wildcards.txt \
--write-massdns massdns.txt

Você pode ver puredns em ação contra o domínio google.com usando uma pequena wordlist dos 100k subdomínios mais comuns na imagem acima.
Como parte de seu fluxo de trabalho, puredns executa três etapas automaticamente:
Usando massdns, puredns realizará uma resolução em massa de todos os domínios e subdomínios. Ele alimenta os dados para massdns via stdin, o que permite limitar o número de consultas por segundo, se necessário, e realizar uma sanitização básica na lista de domínios gerada.
Por padrão, os domínios de entrada são convertidos para minúsculas, e apenas entradas contendo caracteres válidos são aceitas (essencialmente [a-z0-9.-]). Você pode desabilitar isso com a opção --skip-sanitize.
Após esta etapa, os resultados geralmente são poluídos: alguns resolvedores públicos enviam respostas incorretas, e subdomínios curingas podem inflar rapidamente os resultados.
Puredns então usa seu algoritmo de detecção de wildcards para detectar e extrair todas as raízes de subdomínios curingas do arquivo de resultados massdns.
Ele usará a saída massdns da etapa 1 como um cache DNS para minimizar o número de consultas que precisa realizar. Para garantir resultados precisos, pode ser necessário validar os resultados do cache realizando uma consulta DNS.
Você pode pular esta etapa usando a opção --skip-wildcard.
Para proteger contra envenenamento DNS, puredns usa massdns uma última vez para validar os resultados restantes usando resolvedores DNS confiáveis. Atualmente, os resolvedores confiáveis internos usados são 8.8.8.8 e 8.8.4.4. Esta etapa é realizada em um ritmo mais lento para evitar exceder os limites de taxa (rate limiting) nos resolvedores confiáveis.
Você pode pular esta etapa usando a opção --skip-validation.
Neste ponto, os arquivos resultantes devem estar limpos de subdomínios curingas e respostas DNS envenenadas.
Trickest mantém uma lista de resolvedores válidos aqui: https://github.com/trickest/resolvers
Alternativamente, você pode obter uma lista de resolvedores públicos de public-dns.info, depois usar o projeto DNS Validator para manter apenas resolvedores que forneçam respostas válidas.
Se seus resolvedores públicos fornecerem informações incorretas ao puredns, por exemplo, enviando respostas envenenadas, alguns subdomínios podem ser perdidos, pois serão filtrados. Dica: Evite resolvedores de países que censuram a internet, como a China.
Depois de ter uma lista de resolvedores personalizados, você pode passá-los para puredns com o argumento -r ou colocando-os em um arquivo localizado em ~/.config/puredns/resolvers.txt:
puredns resolve domains.txt -r resolvers.txt
Os resolvedores confiáveis padrão atualmente são 8.8.8.8 e 8.8.4.4. Se você quiser alterá-los, também pode especificar uma lista personalizada com o argumento --resolvers-trusted ou colocando-os em um arquivo localizado em ~/.config/puredns/resolvers-trusted.txt. Eu realizei muitos testes para encontrar os melhores resolvedores confiáveis possíveis para puredns - certifique-se de validar seus resultados cuidadosamente se decidir alterá-los e ajuste o limite de taxa com --rate-limit-trusted.
puredns resolve domains.txt -r resolvers.txt --resolvers-trusted trusted.txt
Puredns não ignora simplesmente respostas DNS contendo NXDOMAIN. Às vezes, essas respostas NXDOMAIN têm registros CNAME válidos que apontam para domínios expirados. Se esses registros estiverem presentes, eles podem apontar para um domínio não registrado, permitindo a tomada de subdomínios (subdomain takeover).
Se você está obtendo domínios que não resolvem para um endereço IP, verifique se eles contêm um registro CNAME de interesse:
dig @8.8.8.8 CNAME example.com
A causa mais provável é o balanceamento de carga DNS - às vezes, você obtém endereços IP diferentes para cada consulta DNS única feita. Isso pode dificultar muito a detecção de subdomínios curingas comparando seus registros DNS.
Você pode especificar o número de testes que puredns realizará para reunir todos os diferentes endereços IP para um subdomínio durante a detecção de wildcards. O número padrão é 3 testes, que é muito baixo. Já vi domínios com muito balanceamento que precisam de mais de 50 consultas para retornar resultados que não eram perfeitos, mas suficientemente bons.
Você pode tentar aumentar o número de testes realizados para detectar subdomínios curingas com o argumento --wildcard-tests:
puredns resolve domains.txt --wildcard-tests 50
Para detectar wildcards, puredns precisa manter um cache das respostas DNS encontradas. Se sua lista de domínios estiver na casa das centenas de milhões e contiver muitos subdomínios curingas, o host pode ficar sem memória. Mas existe uma solução fácil.
Por padrão, puredns coloca todos os domínios em um único lote para economizar no número de consultas DNS e no tempo de execução. Se a memória for uma preocupação, é possível processar os domínios em vários lotes menores com o argumento --wildcard-batch. Descobri que um bom tamanho é entre 1M e 2M subdomínios para um VPS com 1GB de RAM.
puredns resolve domains.txt --wildcard-batch 1000000
Puredns não remove duplicatas em nenhum lugar do seu pipeline. Se o arquivo de entrada contiver itens duplicados, como palavras ou domínios idênticos, puredns exibirá elementos duplicados. Você pode garantir que os arquivos de entrada fornecidos ao puredns estejam livres de duplicatas usando uma ferramenta como sort -u.
Provavelmente é devido aos resolvedores públicos usados. Alguns deles às vezes retornam respostas não relacionadas às consultas, levando a nomes de domínio aleatórios na saída. Puredns atualmente não lida com esse caso e deixa para o usuário sanitizar a saída para garantir que os domínios encontrados respeitem o escopo.
public-dns.info atualiza continuamente uma lista de resolvedores DNS públicos e gratuitos.
DNS Validator pode ser usado para selecionar sua própria lista de resolvedores DNS públicos.
all.txt wordlist A icônica wordlist all.txt de Jhaddix é comumente usada para enumeração de subdomínios.
shuffleDNS é uma boa alternativa escrita em Go que lida com subdomínios curingas usando um algoritmo diferente.
Você pode contribuir com puredns das seguintes maneiras:
Você tem uma ideia para uma nova funcionalidade incrível? Encontrou um bug que deseja corrigir? Ótimo! Fique à vontade para abrir uma issue para discussão antes de fazer um pull request.
Não aceitarei pull requests para alterações triviais, como correções de digitação, boas práticas, correções menores, etc.
Quaisquer resolvedores incluídos neste repositório estão presentes apenas para referência. O autor não é responsável por qualquer uso indevido dos resolvedores nessa lista. É responsabilidade do usuário selecionar uma lista de resolvedores que ele está autorizado a usar.
O uso deste programa para atacar alvos sem consentimento é ilegal. É responsabilidade do usuário obedecer a todas as leis aplicáveis. O desenvolvedor não assume nenhuma responsabilidade e não se responsabiliza por qualquer uso indevido ou dano causado por este programa. Por favor, use com responsabilidade.
O material contido neste repositório está licenciado sob GNU GPLv3.