Comment puis-je lister TOUS les enregistrements DNS?

189

Existe-t-il un moyen de répertorier TOUS les enregistrements DNS d'un domaine?

Je connais des choses telles que creuser et nslookup, mais elles ne vont pas loin. Par exemple, si j'ai un enregistrement de sous-domaine A comme

test A somedomain.co.uk

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

dig any test.somedomain.co.uk

Je ne peux pas le voir.

Existe-t-il un moyen (autre que de regarder les enregistrements en allant au gestionnaire DNS) pour voir exactement ce que sont tous les enregistrements DNS?

Ken
la source

Réponses:

202

Lorsque vous interrogez pour TOUT, vous obtiendrez 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 pas d'enregistrements enfants (par exemple, www.google.com). Plus précisément, vous pouvez obtenir ces enregistrements s'ils existent. Le serveur de noms n'a 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 ne sont disponibles que si vous contrôlez la zone. Vous effectuerez généralement un transfert de zone directement à partir du serveur faisant autorité (le @ ns1.google.com ci-dessous) et souvent à partir d'un serveur de noms qui peut ne pas être publié (un serveur de noms furtif).

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

Si vous avez le contrôle de la zone, vous pouvez la configurer pour obtenir des transferts protégés par une clé TSIG. Il s'agit d'un secret partagé que le client peut envoyer au serveur pour autoriser le transfert.

Denis Phillips
la source
4
Merci pour cela (également à deltab). Explication très claire, confirmant ce que je soupçonnais - elle est disponible mais pas pour moi (à moins que je ne commence à configurer mes propres serveurs de noms). Comme je m'occupe de très nombreux domaines, il aurait été si agréable d'exécuter un script pour obtenir TOUTES les entrées DNS.
Ken
13
Les serveurs de noms Route53 d'Amazon n'incluaient pas TXT, MX et SOA lorsque j'ai essayé cela. Après avoir spécifiquement interrogé ces enregistrements, ils ont été inclus dans TOUTES les réponses. Alors prenez ça avec un grain de sel.
Peter
Je viens de
recevoir
1
La spécification n'a jamais été interprétée de manière cohérente par les résolveurs quant à la signification de ANY. Cela ne signifie certainement pas TOUT (il y a une demande pour cela), bien que certains (pas beaucoup) l'ont traité de cette façon. D'autres ont simplement vidé leur cache et d'autres l'ont restreint à certains types d'enregistrements. Dans les temps modernes (2016+), la plupart des fournisseurs ont soit désactivé TOUT (ou lui ont donné une réponse inutile), soit ont l'intention de le faire, car c'est le moteur commun de nombreuses attaques d'amplification.
Nick Bastin
1
@NickBastin dans ce brouillon ( tools.ietf.org/html/draft-ietf-dnsop-refuse-any-06 ) actuellement en cours de travail tente de resserrer le modèle de réponses pour ce type de requête. Il explique également pourquoi il est / ne doit pas être utilisé.
Patrick Mevzek
29

J'ai amélioré la réponse de Josh . J'ai remarqué que digne montre que 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 s'appuyer 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 prend un -xargument pour la sortie développée et un -s NSargument 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
dan3
la source
ajoutez des lignes dig -t txt +nocmd $NS "$DOM" +noall +answer(et modifiez le $DOM) pour inspecter les enregistrements TXT d'un domaine.
Max
19

En l'absence de la possibilité de faire des transferts de zone, je l' 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.compour obtenir une belle liste propre d'enregistrements DNS, ou dg example.com xpour inclure un tas d'autres sous-domaines populaires.

grep -vE "${wild_ips}"filtre les enregistrements qui pourraient être le résultat 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'impression qu'il y avait des enregistrements pour chacun $COMMON_SUBDOMAN.

Remarque: cela repose sur des ANYrequêtes, qui sont bloquées par certains fournisseurs DNS tels que CloudFlare .

Zaz
la source
3
Je sais que cette solution est loin d'être idéale, mais elle m'a fait gagner beaucoup de temps, alors j'espère qu'elle sera utile à quelqu'un d'autre.
Zaz
ajouter dig -t txt +nocmd "$1" +noall +answer(et modifier en "*.$1"etc.) pour inspecter les enregistrements TXT d'un domaine.
Max
15

host -afonctionne 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.
Datavar
la source
11
Cela ne répond pas à la question, qui est de savoir comment trouver d'autres enregistrements dans la zone DNS d'un domaine, c'est-à-dire en plus tous les enregistrements des sous-domaines. Cela ne host -aveut pas dire que ce n'est pas une commande utile, cela ne fait tout simplement pas ce que l'OP recherche.
spikyjt
13
  1. Un transfert de zone est le seul moyen de s'assurer que vous disposez de tous les enregistrements de sous-domaine. Si le DNS est correctement configuré, vous ne devriez normalement pas être en mesure d'effectuer un transfert de zone externe.

  2. Le projet scans.io dispose d'une base de données d'enregistrements DNS qui peuvent être téléchargés et recherchés pour les sous-domaines. Cela nécessite le téléchargement des 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/

squizzy99
la source
12

Pour les fenêtres:

Vous devrez peut-être vérifier l'état des enregistrements DNS de vos domaines, ou vérifier les serveurs de noms pour voir quels enregistrements les serveurs extraient.

  1. Lancez l'invite de commande Windows en accédant à Démarrer> Invite de commandes ou via Exécuter> CMD.

  2. Tapez NSLOOKUP et appuyez sur Entrée. Le serveur par défaut est défini sur votre DNS local, l'adresse sera votre adresse IP locale.

  3. Définissez le type d'enregistrement DNS que vous souhaitez rechercher en tapant set type=##où ## est le type d'enregistrement, puis appuyez sur Entrée. Vous pouvez utiliser ANY, A, AAAA, A + AAAA, CNAME, MX, NS, PTR, SOA ou SRV comme type d'enregistrement.

  4. Saisissez maintenant le nom de domaine que vous souhaitez interroger, puis appuyez sur Entrée. Dans cet exemple, nous utiliserons Managed.com.

  5. NSLOOKUP renverra maintenant les entrées d'enregistrement pour le domaine que vous avez entré.

  6. Vous pouvez également modifier les serveurs de noms que vous interrogez. Ceci est utile si vous vérifiez les enregistrements avant que DNS ne se soit entièrement propagé. Pour changer le serveur de type de serveur de noms [serveur de noms]. Remplacez [serveur de noms] par les serveurs de noms que vous souhaitez utiliser. Dans cet exemple, nous les définirons comme NSA.managed.com.

  7. Une fois modifié, modifiez le type de requête (étape 3) si nécessaire, puis entrez un nouveau domaine (étape 4.)

Pour Linux:

1) Vérifier les enregistrements DNS à l'aide de la commande Dig Dig représente les informations de domaine groper est un outil flexible pour interroger les serveurs de noms DNS. Il effectue des recherches DNS et affiche les réponses renvoyées par le (s) serveur (s) de noms interrogés. La plupart des administrateurs DNS utilisent dig pour résoudre les problèmes DNS en raison de sa flexibilité, de sa facilité d'utilisation et de la clarté de la sortie. D'autres outils de recherche ont tendance à avoir moins de fonctionnalités que creuser.

2) Vérifier les enregistrements DNS à l'aide de la commande NSlookup Nslookup est un programme permettant d'interroger les serveurs de noms de domaine Internet. Nslookup a deux modes interactifs et non interactifs.

Le mode interactif permet à l'utilisateur d'interroger les serveurs de noms pour obtenir des informations sur divers hôtes et domaines ou d'imprimer une liste d'hôtes dans un domaine.

Le mode non interactif est utilisé pour imprimer uniquement le nom et les informations demandées pour un hôte ou un domaine. C'est un outil d'administration réseau qui les aidera à vérifier et à résoudre les problèmes liés au DNS.

3) Vérifier les enregistrements DNS à l'aide de l'hôte La commande hôte est un utilitaire simple pour effectuer des recherches DNS. Il est normalement utilisé pour convertir les noms en adresses IP et vice versa. Lorsqu'aucun argument ou option n'est donné, l'hôte imprime un bref résumé de ses arguments et options de ligne de commande.

Kervin L
la source
Cela a parfaitement fonctionné pour moi dans Windows 7, mais semble être bogué dans Windows 10, c'est ce que j'ai utilisé pour déboguer un enregistrement TXT dans Windows 10: nslookup -querytype = txt yourdomainnamehere.com
The Coder
11

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 qui ne sont pas délégués à 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 dans 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é lié à l'exposition des noms, et les réponses de transfert de zone coûtent plus cher à générer et à envoyer que les recherches DNS habituelles.

deltab
la source
1

Il n'existe pas de moyen simple d'obtenir tous les enregistrements DNS d'un domaine en une seule 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 souhaitez voir pour ce domaine.

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

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

Mike Fraanje
la source