
Résolveur DNS haute vitesse et bruteforceur de sous-domaines avec filtrage précis des wildcards et validation des empoisonnements DNS pour une reconnaissance précise.

Résolveur de domaines rapide et bruteforce de sous-domaines avec filtrage précis des wildcards
Pour commencer »
Utilisation
·
Fonctionnement
·
Parrainage
·
FAQ
puredns est un outil rapide de résolution de domaines et de bruteforce de sous-domaines capable de filtrer avec précision les sous-domaines wildcard et les entrées empoisonnées du DNS.
Il utilise massdns, un puissant résolveur DNS stub, pour effectuer des requêtes en masse. Avec la bande passante appropriée et une bonne liste de résolveurs publics, il peut résoudre des millions de requêtes en quelques minutes. Malheureusement, les résultats de massdns ne sont aussi bons que les réponses fournies par les résolveurs publics. Les résultats sont souvent pollués par des réponses DNS erronées et des faux positifs provenant de sous-domaines wildcard.
puredns résout ce problème grâce à son algorithme de détection des wildcards. Il peut filtrer les wildcards en fonction des réponses DNS obtenues à partir d'un ensemble de résolveurs de confiance. Il tente également de contourner l'empoisonnement DNS en validant les réponses obtenues à l'aide de ces résolveurs de confiance.
Vous trouvez cela utile ? ⭐ Mettez une étoile sur GitHub — cela aide !

|
Si mon travail vous rapporte de l'argent, envisagez de devenir sponsor ! Vous pouvez obtenir des avantages uniques ! Cela signifierait aussi ÉNORMÉMENT ❤️ car cela me permettrait de continuer à travailler gratuitement pour la communauté. Mais quoi que vous fassiez, soyez assuré que mon logiciel restera gratuit et open-source pour vous. |
Puredns nécessite massdns sur la machine hôte. Si le chemin vers le binaire massdns est présent dans la variable d'environnement PATH, puredns fonctionnera directement. Un bon endroit pour copier l'exécutable massdns est /usr/local/bin sur la plupart des systèmes. Sinon, vous devrez spécifier le chemin vers le fichier binaire massdns à l'aide de l'argument --bin en ligne de commande.
Ce qui suit devrait fonctionner sur la plupart des systèmes basés sur Debian. Suivez les instructions officielles pour plus d'informations.
git clone https://github.com/blechschmidt/massdns.git
cd massdns
make
sudo make install
Vous devez obtenir une liste de serveurs DNS publics pour utiliser puredns. Référez-vous à la FAQ pour apprendre à constituer votre propre liste de serveurs fonctionnels.
Vous pouvez télécharger une version binaire.
Alternativement, vous pouvez facilement compiler la dernière version. Assurez-vous d'abord que Go est installé sur votre système - les deux dernières versions majeures de Go sont prises en charge. Référez-vous à la page d'installation officielle de Go pour les instructions d'installation. Ensuite, exécutez la commande suivante :
go install github.com/d3mondev/puredns/v2@latest
Assurez-vous de consulter la liste complète des commandes et options disponibles avec puredns --help.
Si un fichier resolvers.txt existe dans le répertoire de travail actuel, puredns l'utilisera par défaut. Sinon, si les fichiers ~/.config/puredns/resolvers.txt ou ~/.config/puredns/resolvers-trusted.txt sont présents, puredns les utilisera automatiquement comme résolveurs. Si aucune de ces options n'est disponible, spécifiez les résolveurs à utiliser avec les arguments --resolvers et --resolvers-trusted.
Spécifier des résolveurs de confiance est optionnel. Par défaut, puredns utilise simplement 8.8.8.8 et 8.8.4.4.
Voici comment bruteforcer une liste massive de sous-domaines en utilisant une wordlist nommée all.txt :
puredns bruteforce all.txt domain.com
Vous pouvez également bruteforcer plusieurs domaines à la fois avec l'option -d pour charger un fichier texte contenant des domaines au lieu de spécifier un seul domaine comme argument :
puredns bruteforce all.txt -d domains.txt
Vous pouvez également résoudre une liste de domaines contenus dans un fichier texte (un par ligne).
puredns resolve domains.txt
Vous pouvez passer la liste des domaines à résoudre via stdin :
cat domains.txt | puredns resolve
Ou une liste de mots à utiliser pour le bruteforce :
cat wordlist.txt | puredns bruteforce domain.com
Vous pouvez également ajouter l'option -q pour n'afficher que les domaines trouvés et les rediriger vers d'autres outils :
cat domains.txt | puredns resolve -q | httprobe
Vous pouvez enregistrer les informations suivantes dans des fichiers pour les réutiliser dans vos workflows :
puredns resolve domains.txt --write valid_domains.txt \
--write-wildcards wildcards.txt \
--write-massdns massdns.txt

Vous pouvez voir puredns en action contre le domaine google.com en utilisant une petite wordlist des 100 000 sous-domaines les plus courants dans l'image ci-dessus.
Dans le cadre de son workflow, puredns effectue trois étapes automatiquement :
En utilisant massdns, puredns effectue une résolution en masse de tous les domaines et sous-domaines. Il alimente massdns via stdin, ce qui lui permet de limiter le nombre de requêtes par seconde si nécessaire et d'effectuer une assainissement de base sur la liste des domaines générés.
Par défaut, les domaines d'entrée sont mis en minuscules, et seules les entrées contenant des caractères valides sont acceptées (essentiellement [a-z0-9.-]). Vous pouvez désactiver cela avec le drapeau --skip-sanitize.
Après cette étape, les résultats sont généralement pollués : certains résolveurs publics renvoient de mauvaises réponses, et les sous-domaines wildcard peuvent rapidement gonfler les résultats.
Puredns utilise ensuite son algorithme de détection des wildcards pour détecter et extraire toutes les racines de sous-domaines wildcard du fichier de résultats massdns.
Il utilise la sortie massdns de l'étape 1 comme cache DNS pour minimiser le nombre de requêtes qu'il doit effectuer. Pour garantir des résultats précis, il peut être amené à valider les résultats du cache en effectuant une requête DNS.
Vous pouvez ignorer cette étape avec le drapeau --skip-wildcard.
Pour se protéger contre l'empoisonnement DNS, puredns utilise massdns une dernière fois pour valider les résultats restants à l'aide de résolveurs DNS de confiance. Actuellement, les résolveurs de confiance internes utilisés sont 8.8.8.8 et 8.8.4.4. Cette étape est effectuée à un rythme plus lent pour éviter d'atteindre les limites de débit des résolveurs de confiance.
Vous pouvez ignorer cette étape avec le drapeau --skip-validation.
À ce stade, les fichiers résultants devraient être exempts de sous-domaines wildcard et de réponses DNS empoisonnées.
Trickest maintient une liste de résolveurs valides ici : https://github.com/trickest/resolvers
Alternativement, vous pouvez obtenir une liste de résolveurs publics depuis public-dns.info, puis utiliser le projet DNS Validator pour ne conserver que les résolveurs fournissant des réponses valides.
Si vos résolveurs publics fournissent des informations incorrectes à puredns, par exemple en renvoyant des réponses empoisonnées, certains sous-domaines peuvent être manqués car ils seront filtrés. Astuce : Évitez les résolveurs de pays qui censurent Internet, comme la Chine.
Une fois que vous avez une liste de résolveurs personnalisés, vous pouvez les passer à puredns avec l'argument -r ou en les plaçant dans un fichier situé à ~/.config/puredns/resolvers.txt :
puredns resolve domains.txt -r resolvers.txt
Les résolveurs de confiance par défaut sont actuellement 8.8.8.8 et 8.8.4.4. Si vous souhaitez les changer, vous pouvez également spécifier une liste personnalisée avec l'argument --resolvers-trusted ou en les plaçant dans un fichier situé à ~/.config/puredns/resolvers-trusted.txt. J'ai effectué de nombreux tests pour trouver les meilleurs résolveurs de confiance possibles pour puredns - assurez-vous de valider soigneusement vos résultats si vous décidez de les changer, et ajustez la limite de débit avec --rate-limit-trusted.
puredns resolve domains.txt -r resolvers.txt --resolvers-trusted trusted.txt
Puredns ne se contente pas d'ignorer les réponses DNS contenant NXDOMAIN. Parfois, ces réponses NXDOMAIN contiennent des enregistrements CNAME valides pointant vers des domaines expirés. Si ces enregistrements sont présents, ils peuvent pointer vers un domaine non enregistré, permettant des prises de contrôle de sous-domaines.
Si vous obtenez des domaines qui ne se résolvent pas en une adresse IP, vérifiez s'ils contiennent un enregistrement CNAME d'intérêt :
dig @8.8.8.8 CNAME example.com
La cause la plus probable est l'équilibrage de charge DNS - parfois, vous obtiendrez différentes adresses IP pour chaque requête DNS unique effectuée. Cela peut rendre très difficile la détection des sous-domaines wildcard en comparant leurs enregistrements DNS.
Vous pouvez spécifier le nombre de tests que puredns effectuera pour rassembler toutes les différentes adresses IP pour un sous-domaine lors de la détection des wildcards. Le nombre par défaut est de 3 tests, ce qui est très faible. J'ai vu des domaines avec beaucoup d'équilibrage nécessiter plus de 50 requêtes pour renvoyer des résultats qui n'étaient pas parfaits mais suffisants.
Vous pouvez essayer d'augmenter le nombre de tests effectués pour détecter les sous-domaines wildcard avec l'argument --wildcard-tests :
puredns resolve domains.txt --wildcard-tests 50
Pour détecter les wildcards, puredns doit conserver un cache des réponses DNS trouvées. Si votre liste de domaines compte des centaines de millions et contient de nombreux sous-domaines wildcard, l'hôte peut manquer de mémoire. Mais il existe une solution simple.
Par défaut, puredns place tous les domaines dans un seul lot pour économiser le nombre de requêtes DNS et le temps d'exécution. Si la mémoire est une préoccupation, il est possible de traiter les domaines en plusieurs lots plus petits avec l'argument --wildcard-batch. J'ai trouvé qu'une bonne taille se situe entre 1M et 2M de sous-domaines pour un VPS avec 1 Go de RAM.
puredns resolve domains.txt --wildcard-batch 1000000
Puredns ne supprime pas les doublons à aucun stade de son pipeline. Si le fichier d'entrée contient des éléments en double, comme des mots ou domaines identiques, puredns produira des éléments en double. Vous pouvez vous assurer que les fichiers d'entrée fournis à puredns sont exempts de doublons en utilisant un outil comme sort -u.
Cela est probablement dû aux résolveurs publics utilisés. Certains d'entre eux renvoient parfois des réponses sans rapport avec les requêtes, conduisant à des noms de domaine aléatoires dans la sortie. Puredns ne gère pas actuellement ce cas et laisse à l'utilisateur le soin d'assainir la sortie pour s'assurer que les domaines trouvés respectent le périmètre.
public-dns.info met à jour en continu une liste de résolveurs DNS publics et gratuits.
DNS Validator peut être utilisé pour constituer votre propre liste de résolveurs DNS publics.
Wordlist all.txt La célèbre wordlist all.txt de Jhaddix est couramment utilisée pour l'énumération de sous-domaines.
shuffleDNS est une bonne alternative écrite en go qui gère les sous-domaines wildcard en utilisant un algorithme différent.
Vous pouvez contribuer à puredns de la manière suivante :
Avez-vous une idée pour une nouvelle fonctionnalité incroyable ? Avez-vous trouvé un bug que vous voulez corriger ? Super ! N'hésitez pas à soumettre une issue pour discussion avant de faire une pull request.
Je n'accepterai pas les pull requests pour des modifications triviales telles que des corrections de fautes, des bonnes pratiques, des corrections mineures, etc.
Tous les résolveurs inclus dans ce dépôt sont présents à titre de référence uniquement. L'auteur n'est pas responsable de toute utilisation abusive des résolveurs dans cette liste. Il est de la responsabilité de l'utilisateur de constituer une liste de résolveurs qu'il est autorisé à utiliser.
L'utilisation de ce programme pour attaquer des cibles sans consentement est illégale. Il est de la responsabilité de l'utilisateur de respecter toutes les lois applicables. Le développeur décline toute responsabilité et n'est pas responsable de toute utilisation abusive ou de tout dommage causé par ce programme. Veuillez l'utiliser de manière responsable.
Le contenu de ce dépôt est sous licence GNU GPLv3.