web-dev-qa-db-fra.com

Comment trouver les sous-domaines d'un site?

Une des choses que je dois faire de temps en temps est de trouver des sous-domaines d'un site par exemple.

Commençant par example.com

  • sub1.example.com
  • other.example.com
  • another.example.com

Je cherche des moyens supplémentaires d'effectuer une reconnaissance sur ces cibles et je veux obtenir une liste de tous les sous-domaines d'un domaine.

Je fais actuellement un certain nombre de choses, y compris

  • utiliser maltego pour explorer les informations
  • Utilisation de moteurs de recherche pour rechercher des sous-domaines
  • liens vers des sites d'exploration
  • Examen des enregistrements DNS
  • Examen des certificats SSL mal configurés
  • Deviner des choses comme 'vpn.example.com'

Je pense qu'il y en a plus que ceux que j'ai trouvés jusqu'à présent, mais maintenant je n'ai plus d'idées.

36
NULLZ

En tant que pentester, trouver les sous-domaines d'un site revient souvent. J'ai donc écrit un outil, SubBrute qui fait cela très bien si je le dis moi-même. En bref, c'est mieux que d'autres outils (fierce2) en ce que son est beaucoup plus rapide, plus précis et plus facile à utiliser . Cet outil est livré avec une liste de sous-domaines réels obtenus à partir de l'araignée Web. Cette liste de sous-domaines est plus de 16 fois la taille de fierce2 et subbrute prendra environ 15 minutes pour épuiser cette liste sur une connexion domestique. La sortie est une liste séparée par des sauts de ligne, qui est facile à utiliser comme entrée pour d'autres outils comme nmap ou un scanner de vulnérabilité d'application Web.

30
rook

1. Transfert de zone

Certains serveurs de noms autorisent les transferts de zone DNS à toute personne sur Internet, généralement involontairement. Dans cette question, il est expliqué plus en détail: attaque de transfert de zone DNS .

Outils pour les transferts de zone

Le deuxième réponse à cette question mentionne comment le tester pour Windows et Linux:

Les fenêtres:

nslookup
> server <DNS you are querying>
> set type=any
> ls -d <target>

Unix (nslookup est déconseillé sur Unix):

Dig -t axfr @<DNS you are querying> <target>

(J'ai édité celui Unix, car -axfr ne semble pas fonctionner. Je devais spécifier -t axfr.)

2. Promenade dans la zone DNSSEC

DNSSEC signe les enregistrements DNS, vous pouvez donc être sûr de recevoir la bonne réponse (enfin, compte tenu de certaines racines de confiance et intermédiaires). Mais comment prouvez-vous que quelque chose n'existe pas, par exemple lorsque vous recherchez nonexistentsub.example.com, comment fonctionne le serveur de noms de example.com prouver l'inexistence d'un sous-domaine? Il ne contient pas la clé de signature (la signature est effectuée lors de la mise à jour de la zone par les administrateurs).

Dans leur réponse à Comment fonctionne DNSSec? Y a-t-il des limitations ou des problèmes connus? , / u/tylerl explique:

De toute évidence, cette réponse doit être signée, mais généralement le serveur DNS lui-même n'a pas accès à votre clé de signature et ne peut pas signer la réponse à la volée; les signatures sont toutes créées "hors ligne" à l'avance. Cela empêche votre clé d'être exposée si votre serveur DNS est compromis.

Donc, au lieu de cela, vous alphabétisez vos sous-domaines et dites "pour chaque nom entre mail.example.com et pop.example.com, aucun autre sous-domaine n'existe" et signez cette assertion. Ensuite, lorsque quelqu'un demande nachos.example.com, vous pouvez simplement lui donner cette réponse (qui a déjà été signée) et le client le sait parce que nachos.example.com se situe alphabétiquement entre mail.example.com et pop.example.com, alors la réponse "ce domaine n'existe pas" est considérée comme correctement signée et provient en fait de vous.

L'endroit où cela devient problématique est qu'en ayant un ensemble de ces réponses négatives qui indiquent explicitement qu '"aucune réponse n'existe entre X et Y, vous pouvez facilement cartographier exactement quels domaines existent pour toute la zone. Vous savez que" X "existe , et vous savez que "Y" existe, et vous savez qu'il n'y a rien d'autre entre eux. Faites juste un peu plus de fouilles au hasard et vous pourrez rapidement compiler une liste de tous les enregistrements qui existent.

L'enregistrement qui spécifie "jusqu'à ce que pop.example.com n'y ait plus rien" s'appelle NSEC (Next SECure record).

Une solution de contournement a été conçue pour cela: NSEC3. Il hache les noms, donc mail se transforme en 1d6e1c... et pop se transforme en 4f197c9.... Imaginez que ce sont les deux seuls sous-domaines, alors la réponse signée indiquera "aucun enregistrement n'existe entre b21afc... et b83a88... ". Encore une fois, cela fonctionne par ordre alphabétique et vous pouvez les obtenir tous, mais cette fois, vous devrez casser chaque hachage avant d'apprendre quels sont les sous-domaines.

D'après mon expérience, la plupart ont l'extension NSEC3 activée.

Outils pour la marche de zone

NSEC3Walker fait à la fois l'énumération et le craquage. Je ne peux pas garantir l'efficacité du craquage, mais ce n'est certainement que basé sur le processeur. Étant donné que NSEC3 utilise SHA1 (au moins à l'origine), il existe probablement de meilleurs programmes de craquage.

dnsrecon semble également pouvoir le faire: dnsrecon -z -d example.com. Je ne sais pas s'il existe un site officiel contenant des informations, mais dans Debian Stretch je peux apt-get install dnsrecon.

3. Recherches inversées dans un sous-réseau

En devinant quelques-uns, vous trouverez souvent des réponses dans une plage similaire. Si tu sais www. existe et mail. existe, et ils se résolvent tous les deux à 192.168.3.x, il pourrait y en avoir plus. Essayez de faire une recherche inversée pour toutes les adresses dans le 192.168.3.0-255 plage (la /24), et vous trouverez probablement plus de noms dans le domaine .example.com.

Outils de recherche inversée

dnsrecon peut le faire:

dnsrecon -t rvl -r 192.168.1.0/24

-t rvl signifie "type recherche inversée" et -r passe une plage IP en notation CIDR. Je ne sais pas s'il existe un site officiel contenant des informations, mais dans Debian Stretch je peux apt-get install dnsrecon.

4. Enregistrements de service DNS

On peut définir enregistrements SRV (service) pour la découverte de service, par exemple _sip._tcp.example.com pourrait indiquer sipserver.example.com sur le port 5060. Étant donné que les noms de service ("sip" dans l'exemple) sont généralement les noms standard enregistrés auprès de l'IANA, nous pouvons les parcourir.

Outils pour interroger les enregistrements SRV

dnsrecon peut le faire:

dnsrecon -t srv -d example.com

Il prendra un sous-ensemble des noms de service existants, sélectionnés par une méthode inconnue, comme mentionné dans sa page de manuel (man dnsrecon).

5. Autres méthodes

Vous en avez déjà mentionné certains. Je n'entrerai pas dans les détails, car ils sont assez explicites et dépendent d'une application exécutée sur la cible (comme FTP), dépendent d'un tiers, ou il n'y a vraiment pas grand-chose à dire à leur sujet .

  • Les résultats de la recherche peuvent révéler des sous-domaines. Encore une fois, dnsrecon peut le faire avec le -t goo option (utilise Google spécifiquement).

  • La vérification d'autres TLD du même nom peut révéler d'autres variantes ou adresses IP. Par exemple. si example.com existe, example.org pourrait également exister. dnsrecon peut également le faire avec dnsrecon -t tld -d example.com.

  • Explorer un site Web ou trouver des références ailleurs pourrait donner des indices. (Aide recherchée: quel outil utiliser?)

  • L'examen des certificats TLS donne souvent des résultats. Assurez-vous de vérifier les ports pour HTTPS, SMTP (S), FTP (S), etc. et utilisez STARTTLS.

  • Il existe des outils tiers qui peuvent répertorier les sous-domaines d'un domaine. Leurs méthodes sont moins claires, mais l'exploration d'Internet et des enregistrements historiques (peut-être qu'un transfert de domaine était possible autrefois?) En fait souvent partie. (Besoin d'aide: des recommandations? Je me souviens seulement d'avoir vu qu'elle existe.)

6. Deviner.

La dernière option est juste de deviner, soit par un dictionnaire (je le recommanderais), soit par force brute. Cela est rendu plus difficile par les caractères génériques, bien que de nombreux outils tentent de détecter et de résoudre ce problème.

Outils pour deviner/forcer brutalement

Fierce a été conçu pour cela: https://github.com/mschwager/fierce
Il est installé par défaut dans Kali Linux.

Comme / u/rookmentionné dans une autre réponse de ce fil , ils ont écrit Subbrute à cet effet: https://github.com/TheRook/subbrute

dnsrecon peut le faire avec dnsrecon -t brt -d example.com. Utilisation -f à "Filtrer les enregistrements de recherche de domaine Brute Force qui se résolvent à l'adresse IP définie par des caractères génériques lors de l'enregistrement des enregistrements" (en citant sa page de manuel). Tu peux passer -D pour un fichier de dictionnaire.

Annexe: dictionnaires

Je suis toujours à la recherche de bons dictionnaires (pour deviner/forcer brutalement), mais voici certains que je connais. Aidez-moi à compléter cette liste! Plus ils sont gros, mieux c'est, tant qu'ils sont triés par vraisemblance.

4
Luc

Je l'essayerais avec knock mais attention: il y a un risque d'être mis sur liste noire.

Malheureusement, il n'y a aucun moyen de contourner la force brute si un transfert de zone ne fonctionne pas.

3
Dr.Ü

Jason Haddix a écrit mon outil de découverte de sous-domaine/nom d'hôte préféré qui dépend d'une version très récente de recon-ng - disponible ici - https://github.com/jhaddix/domain

subbrute est décent, fierce -dns <domain> fonctionne très bien, dnsmap <domain> -r file.txt est également valide, et je ne vois aucune raison de ne pas aimer knock -wc <domain> (bien que les autres caractéristiques de la frappe puissent être suspectes). Cependant, tous ces outils utilisent des techniques qui montrent leur âge. L'astuce pour certaines de ces améliorations d'attaque est de créer un fichier personnalisé avec des noms d'hôtes spécialement adaptés à la cible.

Cependant, la tronçonneuse pour la découverte DNS est dnsrecon. Il fait tout.

Vous pouvez également envisager une offre commerciale, telle que RiskIQ, qui peut faire beaucoup plus que tous ces outils. Leurs techniques incluent beaucoup de levés auxquels la plupart d'entre vous ne penseraient pas.

[MISE À JOUR] Un autre favori (pour les noms d'hôtes, pas principalement les sous-domaines - le PO est-il intéressé par les deux?) Est - https://github.com/tomsteele/blacksheepwall

3
atdre

Over on Stack Overflow , Paul Melici a suggéré d'utiliser WolframAlpha . (Captures d'écran par moi-même)

  1. Entrez le domaine dans la zone de recherche et lancez la recherche. (Par exemple. stackexchange.com )

    Wolfram - Homepage

  2. Dans la 3e section du haut (nommée "Statistiques Web pour tout stackexchange.com"), cliquez sur Sous-domaines

    Wolfram - Subdomains button

  3. Dans la section Sous-domaines, cliquez sur Plus

    Wolfram - More subdomains button

Vous pourrez y voir une liste de sous-domaines. Bien que je soupçonne qu'il ne montre pas TOUS les sous-domaines.

1
Stevoisiak

Jetez un œil à http://ha.ckers.org/fierce/ . Il peut prendre un fichier dictionnaire ainsi que la force brute. Il est également inclus dans Kali.

0
void_in

Au départ, j'utilise souvent une base de données DNS passive pour trouver des sous-domaines pour un site. L'inconvénient de cette méthode est que vous ne pouvez rechercher que les sites répertoriés dans la base de données. Mais l'avantage est que vous pouvez trouver des sites qui ne figurent dans aucune liste de mots.

Quelques bases de données pour référence:

https://www.virustotal.com/en/domain/stackexchange.com/information/

http://www.nonexiste.net/?q=stackexchange.com

0
Dog eat cat world