Comment puis-je lister TOUS les enregistrements DNS?

Est-il possible de lister TOUS les enregistrements DNS pour un domaine?

Je connais des choses comme creuser et nslookup mais ils ne vont que si loin. Par exemple, si j’ai un sous-domaine A record as

test A somedomain.co.uk 

alors à moins que je le demande spécifiquement, par exemple.

 dig any test.somedomain.co.uk 

Je ne peux pas le voir

Y a-t-il un moyen (autre que de consulter les enregistrements en allant sur le gestionnaire DNS) pour voir exactement quels sont tous les enregistrements DNS?

Lorsque vous interrogez ANY, vous obtenez une liste de tous les enregistrements à ce niveau, mais pas en dessous.

 # try this dig google.com any 

Cela peut renvoyer des enregistrements A, des enregistrements TXT, des enregistrements NS, des enregistrements MX, etc. si le nom de domaine est exactement “google.com”. Cependant, il ne renverra aucun enregistrement enfant (par exemple, http://www.google.com). Plus précisément, vous pouvez obtenir ces enregistrements s’ils existent. Le serveur de noms ne doit pas renvoyer ces enregistrements s’il choisit de ne pas le faire (par exemple, pour réduire la taille de la réponse).

Un AXFR est un transfert de zone et est probablement ce que vous voulez. Cependant, ceux-ci sont généralement limités et non disponibles à moins que vous ne contrôliez la zone. Vous effectuerez généralement un transfert de zone directement depuis le serveur faisant autorité (le @ ns1.google.com ci-dessous) et souvent depuis un serveur de noms qui ne sera peut-être pas publié (un serveur de noms furtif).

 # This will return "Transfer failed" dig @ns1.google.com google.com axfr 

Si vous contrôlez la zone, vous pouvez la configurer pour obtenir des transferts protégés par une clé TSIG. C’est un secret partagé que le client peut envoyer au serveur pour autoriser le transfert.

J’ai amélioré la réponse de Josh . J’ai remarqué que dig affiche uniquement les entrées déjà présentes dans le cache du serveur de noms interrogé, il est donc préférable d’extraire un serveur de noms faisant autorité de la SOA (plutôt que de compter sur le serveur de noms par défaut). J’ai également désactivé le filtrage des adresses IP génériques, car je suis généralement plus intéressé par l’exactitude de la configuration.

Le nouveau script -x un argument -x pour une sortie étendue et un argument -s NS pour choisir un serveur de noms spécifique: dig -x example.com

 #!/bin/bash set -e; set -u COMMON_SUBDOMAINS="www mail mx a.mx smtp pop imap blog en ftp ssh login" EXTENDED="" while :; do case "$1" in --) shift; break ;; -x) EXTENDED=y; shift ;; -s) NS="$2"; shift 2 ;; *) break ;; esac; done DOM="$1"; shift TYPE="${1:-any}" test "${NS:-}" || NS=$(dig +short SOA "$DOM" | awk '{print $1}') test "$NS" && NS="@$NS" if test "$EXTENDED"; then dig +nocmd $NS "$DOM" +noall +answer "$TYPE" wild_ips=$(dig +short "$NS" "*.$DOM" "$TYPE" | tr '\n' '|') wild_ips="${wild_ips%|}" for sub in $COMMON_SUBDOMAINS; do dig +nocmd $NS "$sub.$DOM" +noall +answer "$TYPE" done | cat #grep -vE "${wild_ips}" dig +nocmd $NS "*.$DOM" +noall +answer "$TYPE" else dig +nocmd $NS "$DOM" +noall +answer "$TYPE" fi 

En l’absence de la possibilité de faire des transferts de zone, j’ai écrit ce petit script bash, dg :

 #!/bin/bash COMMON_SUBDOMAINS=(www mail smtp pop imap blog en ftp ssh login) if [[ "$2" == "x" ]]; then dig +nocmd "$1" +noall +answer "${3:-any}" wild_ips="$(dig +short "*.$1" "${3:-any}" | tr '\n' '|')" wild_ips="${wild_ips%|}" for sub in "${COMMON_SUBDOMAINS[@]}"; do dig +nocmd "$sub.$1" +noall +answer "${3:-any}" done | grep -vE "${wild_ips}" dig +nocmd "*.$1" +noall +answer "${3:-any}" else dig +nocmd "$1" +noall +answer "${2:-any}" fi 

Maintenant, j’utilise dg example.com pour obtenir une liste de dossiers DNS bien propre, ou dg example.com x pour inclure un tas d’autres sous-domaines populaires.

grep -vE "${wild_ips}" filtre les enregistrements pouvant résulter d’une entrée DNS générique, telle que * 10800 IN A 1.38.216.82 . Sinon, une entrée générique donnerait l’ $COMMON_SUBDOMAN qu’il y avait des enregistrements pour chaque $COMMON_SUBDOMAN .

Remarque: Cela dépend de toute requête bloquée par certains fournisseurs DNS, tels que CloudFlare .

Ce que vous voulez s’appelle un transfert de zone . Vous pouvez demander un transfert de zone en utilisant dig -t axfr .

Une zone est un domaine et tous les domaines situés en dessous ne sont pas delegates à un autre serveur.

Notez que les transferts de zone ne sont pas toujours pris en charge. Ils ne sont pas utilisés dans la recherche normale, mais uniquement lors de la réplication des données DNS entre les serveurs. mais il existe d’autres protocoles qui peuvent être utilisés pour cela (comme rsync sur ssh), il peut y avoir un risque de sécurité en exposant les noms, et les réponses de transfert de zone coûtent plus cher à générer et à envoyer que les recherches DNS habituelles.

  1. Un transfert de zone est le seul moyen de s’assurer que vous avez tous les enregistrements de sous-domaines. Si le DNS est correctement configuré, vous ne devriez normalement pas pouvoir effectuer un transfert de zone externe.

  2. Le projet scans.io dispose d’une firebase database d’enregistrements DNS pouvant être téléchargés et recherchés pour les sous-domaines. Cela nécessite de télécharger les 87 Go de données DNS, vous pouvez également essayer la recherche en ligne des données sur https://hackertarget.com/find-dns-host-records/

host -a fonctionne bien, similaire à dig any .

PAR EXEMPLE:

 $ host -a google.com Trying "google.com" ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10403 ;; flags: qr rd ra; QUERY: 1, ANSWER: 18, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;google.com. IN ANY ;; ANSWER SECTION: google.com. 1165 IN TXT "v=spf1 include:_spf.google.com ip4:216.73.93.70/31 ip4:216.73.93.72/31 ~all" google.com. 53965 IN SOA ns1.google.com. dns-admin.google.com. 2014112500 7200 1800 1209600 300 google.com. 231 IN A 173.194.115.73 google.com. 231 IN A 173.194.115.78 google.com. 231 IN A 173.194.115.64 google.com. 231 IN A 173.194.115.65 google.com. 231 IN A 173.194.115.66 google.com. 231 IN A 173.194.115.67 google.com. 231 IN A 173.194.115.68 google.com. 231 IN A 173.194.115.69 google.com. 231 IN A 173.194.115.70 google.com. 231 IN A 173.194.115.71 google.com. 231 IN A 173.194.115.72 google.com. 128 IN AAAA 2607:f8b0:4000:809::1001 google.com. 40766 IN NS ns3.google.com. google.com. 40766 IN NS ns4.google.com. google.com. 40766 IN NS ns1.google.com. google.com. 40766 IN NS ns2.google.com. 

Il n’y a pas de moyen facile d’obtenir tous les enregistrements DNS pour un domaine dans une instance. Vous ne pouvez afficher que certains enregistrements, par exemple, si vous voulez voir un enregistrement A pour un certain domaine, vous pouvez utiliser la commande: creuser un (type d’enregistrement) domain.com. C’est la même chose pour tous les autres types d’enregistrements que vous voulez voir pour ce domaine.

Si vous n’êtes pas familier avec l’interface de ligne de commande, vous pouvez également utiliser un site comme mxtoolbox.com. C’est un outil très pratique pour obtenir des enregistrements d’un domaine.

J’espère que cela répond à votre question.