27 KiB
53 - Pentesting DNS
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFTs
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.
DragonJAR Security Conference est un événement international de cybersécurité avec plus d'une décennie d'existence qui se tiendra les 7 et 8 septembre 2023 à Bogotá, en Colombie. C'est un événement de contenu technique de haut niveau où les dernières recherches en espagnol sont présentées, attirant des hackers et des chercheurs du monde entier.
Inscrivez-vous dès maintenant sur le lien suivant et ne manquez pas cette grande conférence !:
{% embed url="https://www.dragonjarcon.org/" %}
Informations de base
Le système de noms de domaine (DNS) est l'annuaire téléphonique d'Internet. Les humains accèdent aux informations en ligne via des noms de domaine, comme nytimes.com ou espn.com. Les navigateurs Web interagissent via des adresses de protocole Internet (IP). DNS traduit les noms de domaine en adresses IP afin que les navigateurs puissent charger les ressources Internet.
À partir de ici.
Port par défaut : 53
PORT STATE SERVICE REASON
53/tcp open domain Microsoft DNS 6.1.7601 (1DB15D39) (Windows Server 2008 R2 SP1)
5353/udp open zeroconf udp-response
53/udp open domain Microsoft DNS 6.1.7601 (1DB15D39) (Windows Server 2008 R2 SP1)
Différents serveurs DNS
Information de https://academy.hackthebox.com/module/112/section/1069
Type de serveur | Description |
---|---|
Serveur racine DNS |
Les serveurs racine du DNS sont responsables des domaines de premier niveau (TLD ). En tant que dernière instance, ils ne sont demandés que si le serveur de noms ne répond pas. Ainsi, un serveur racine est une interface centrale entre les utilisateurs et le contenu sur Internet, car il relie le domaine et l'adresse IP. La Corporation pour l'attribution des noms et des numéros sur Internet (ICANN ) coordonne le travail des serveurs de noms racine. Il existe 13 de ces serveurs racine dans le monde. |
Serveur de noms autoritatif |
Les serveurs de noms autoritatifs ont l'autorité sur une zone particulière. Ils ne répondent qu'aux requêtes de leur zone de responsabilité, et leurs informations sont contraignantes. Si un serveur de noms autoritatif ne peut pas répondre à la requête d'un client, le serveur de noms racine prend le relais à ce moment-là. |
Serveur de noms non autoritatif |
Les serveurs de noms non autoritatifs ne sont pas responsables d'une zone DNS particulière. Au lieu de cela, ils collectent eux-mêmes des informations sur des zones DNS spécifiques, ce qui est fait à l'aide d'une requête DNS récursive ou itérative. |
Serveur DNS de mise en cache |
Les serveurs DNS de mise en cache mettent en cache des informations provenant d'autres serveurs de noms pour une période spécifiée. Le serveur de noms autoritatif détermine la durée de ce stockage. |
Serveur de redirection |
Les serveurs de redirection ne remplissent qu'une seule fonction : ils redirigent les requêtes DNS vers un autre serveur DNS. |
Résolveur |
Les résolveurs ne sont pas des serveurs DNS autoritaires mais effectuent une résolution de noms localement dans l'ordinateur ou le routeur. |
Énumération
Banner Grabbing
DNS n'a pas de "bannière" à saisir. L'équivalent le plus proche est une requête magique pour version.bind. CHAOS TXT
qui fonctionnera sur la plupart des serveurs de noms BIND.
Vous pouvez effectuer cette requête en utilisant dig
:
dig version.bind CHAOS TXT @DNS
Si cela ne fonctionne pas, vous pouvez utiliser des techniques de reconnaissance d'empreintes pour déterminer la version du serveur distant -- l'outil fpdns
est une option pour cela, mais il en existe d'autres.
Vous pouvez également récupérer la bannière avec un script nmap :
--script dns-nsid
Tout enregistrement
L'enregistrement ANY demandera au serveur DNS de retourner toutes les entrées disponibles qu'il est prêt à divulguer.
dig any victim.com @<DNS_IP>
Transfert de zone
Cette procédure est abrégée Asynchronous Full Transfer Zone
(AXFR
).
dig axfr @<DNS_IP> #Try zone transfer without domain
dig axfr @<DNS_IP> <DOMAIN> #Try zone transfer guessing the domain
fierce --domain <DOMAIN> --dns-servers <DNS_IP> #Will try toperform a zone transfer against every authoritative name server and if this doesn'twork, will launch a dictionary attack
Sure, what additional information do you need?
dig ANY @<DNS_IP> <DOMAIN> #Any information
dig A @<DNS_IP> <DOMAIN> #Regular DNS request
dig AAAA @<DNS_IP> <DOMAIN> #IPv6 DNS request
dig TXT @<DNS_IP> <DOMAIN> #Information
dig MX @<DNS_IP> <DOMAIN> #Emails related
dig NS @<DNS_IP> <DOMAIN> #DNS that resolves that name
dig -x 192.168.0.2 @<DNS_IP> #Reverse lookup
dig -x 2a00:1450:400c:c06::93 @<DNS_IP> #reverse IPv6 lookup
#Use [-p PORT] or -6 (to use ivp6 address of dns)
Utilisation de nslookup
nslookup
> SERVER <IP_DNS> #Select dns server
> 127.0.0.1 #Reverse lookup of 127.0.0.1, maybe...
> <IP_MACHINE> #Reverse lookup of a machine, maybe...
Modules utiles de Metasploit
DNS
dns_brute
Ce module effectue une attaque de force brute sur un serveur DNS pour trouver des sous-domaines. Il utilise une liste de noms de sous-domaines pour effectuer l'attaque.
dns_cache_snoop
Ce module permet de récupérer les enregistrements DNS mis en cache sur un serveur DNS. Cela peut être utile pour trouver des informations sur les noms de domaine qui ont été récemment résolus.
dns_client
Ce module permet de simuler un client DNS et d'envoyer des requêtes DNS à un serveur DNS. Cela peut être utile pour tester la sécurité d'un serveur DNS.
dns_fuzz
Ce module effectue une attaque de fuzzing sur un serveur DNS pour trouver des vulnérabilités. Il envoie des requêtes DNS avec des données aléatoires pour tester la réponse du serveur.
dns_recon
Ce module effectue une reconnaissance DNS sur un domaine pour trouver des informations sur les enregistrements DNS. Il peut être utilisé pour trouver des sous-domaines, des adresses IP et d'autres informations utiles.
dns_server_cache
Ce module permet de récupérer les enregistrements DNS mis en cache sur un serveur DNS. Cela peut être utile pour trouver des informations sur les noms de domaine qui ont été récemment résolus.
dns_srv_enum
Ce module effectue une énumération des enregistrements SRV sur un serveur DNS. Les enregistrements SRV sont utilisés pour fournir des informations sur les services disponibles sur un réseau.
dns_tld_enum
Ce module effectue une énumération des domaines de premier niveau (TLD) sur un serveur DNS. Les domaines de premier niveau sont les domaines de plus haut niveau dans la hiérarchie DNS.
dns_transfer
Ce module permet de transférer une zone DNS à partir d'un serveur DNS. Cela peut être utile pour récupérer des informations sur les enregistrements DNS d'un domaine.
dns_update
Ce module permet de mettre à jour les enregistrements DNS sur un serveur DNS. Cela peut être utilisé pour modifier les enregistrements DNS d'un domaine.
dns_version
Ce module permet de récupérer la version du logiciel de serveur DNS utilisé par un serveur DNS. Cela peut être utile pour trouver des vulnérabilités connues dans le logiciel.
Autres
http_put
Ce module permet de télécharger des fichiers sur un serveur web en utilisant la méthode HTTP PUT. Cela peut être utilisé pour télécharger des fichiers sur un serveur web qui n'a pas de formulaire de téléchargement.
snmp_enum
Ce module effectue une énumération SNMP sur un hôte pour trouver des informations sur le système. SNMP est un protocole de gestion de réseau utilisé pour surveiller et gérer les périphériques réseau.
snmp_login
Ce module permet de se connecter à un hôte en utilisant des informations d'identification SNMP. Cela peut être utilisé pour accéder à des périphériques réseau qui utilisent SNMP pour l'authentification.
snmp_enumshares
Ce module effectue une énumération des partages SMB sur un hôte en utilisant SNMP. Cela peut être utilisé pour trouver des partages SMB sur un hôte qui utilise SNMP pour la gestion de réseau.
snmp_enumusers
Ce module effectue une énumération des utilisateurs sur un hôte en utilisant SNMP. Cela peut être utilisé pour trouver des informations sur les utilisateurs d'un système.
snmp_enumprocs
Ce module effectue une énumération des processus en cours d'exécution sur un hôte en utilisant SNMP. Cela peut être utilisé pour trouver des informations sur les processus en cours d'exécution sur un système.
auxiliary/gather/enum_dns #Perform enumeration actions
Scripts nmap utiles
- dns-brute - Performs brute force enumeration of DNS names.
- dns-brute - Effectue une énumération par force brute des noms de DNS.
- dns-cache-snoop - Attempts to retrieve the DNS server cache information using DNS queries and tries to find any misconfigurations or vulnerabilities.
- dns-cache-snoop - Tente de récupérer les informations de cache du serveur DNS en utilisant des requêtes DNS et essaie de trouver des erreurs de configuration ou des vulnérabilités.
- dns-zone-transfer - Attempts to perform a DNS zone transfer and retrieve all DNS records for a domain.
- dns-zone-transfer - Tente d'effectuer un transfert de zone DNS et de récupérer tous les enregistrements DNS pour un domaine.
- http-vhosts - Enumerates virtual hosts on a web server.
- http-vhosts - Énumère les hôtes virtuels sur un serveur web.
- http-enum - Enumerates directories and files on a web server.
- http-enum - Énumère les répertoires et les fichiers sur un serveur web.
- http-methods - Enumerates HTTP methods supported by a web server.
- http-methods - Énumère les méthodes HTTP prises en charge par un serveur web.
- http-robots.txt - Retrieves the robots.txt file from a web server.
- http-robots.txt - Récupère le fichier robots.txt à partir d'un serveur web.
- http-shellshock - Tests for the Shellshock vulnerability in web servers.
- http-shellshock - Teste la vulnérabilité Shellshock dans les serveurs web.
- http-sitemap-generator - Generates a sitemap of a web server.
- http-sitemap-generator - Génère un plan de site d'un serveur web.
- ssl-enum-ciphers - Enumerates SSL/TLS ciphers supported by a server.
- ssl-enum-ciphers - Énumère les chiffrements SSL/TLS pris en charge par un serveur.
- ssl-heartbleed - Tests for the Heartbleed vulnerability in SSL/TLS servers.
- ssl-heartbleed - Teste la vulnérabilité Heartbleed dans les serveurs SSL/TLS.
#Perform enumeration actions
nmap -n --script "(default and *dns*) or fcrdns or dns-srv-enum or dns-random-txid or dns-random-srcport" <IP>
DNS - Force brute inversé
dnsrecon -r 127.0.0.0/24 -n <IP_DNS> #DNS reverse of all of the addresses
dnsrecon -r 127.0.1.0/24 -n <IP_DNS> #DNS reverse of all of the addresses
dnsrecon -r <IP_DNS>/24 -n <IP_DNS> #DNS reverse of all of the addresses
dnsrecon -d active.htb -a -n <IP_DNS> #Zone transfer
{% hint style="info" %} Si vous êtes capable de trouver des sous-domaines résolvant vers des adresses IP internes, vous devriez essayer d'effectuer une recherche inversée DNS sur les serveurs de noms du domaine en demandant cette plage d'adresses IP. {% endhint %}
Un autre outil pour le faire : https://github.com/amine7536/reverse-scan
Vous pouvez interroger les plages d'adresses IP inverses sur https://bgp.he.net/net/205.166.76.0/24#_dns (cet outil est également utile avec BGP).
DNS - Recherche de sous-domaines BF
dnsenum --dnsserver <IP_DNS> --enum -p 0 -s 0 -o subdomains.txt -f subdomains-1000.txt <DOMAIN>
dnsrecon -D subdomains-1000.txt -d <DOMAIN> -n <IP_DNS>
dnscan -d <domain> -r -w subdomains-1000.txt #Bruteforce subdomains in recursive way, https://github.com/rbsec/dnscan
Serveurs Active Directory
dig -t _gc._tcp.lab.domain.com
dig -t _ldap._tcp.lab.domain.com
dig -t _kerberos._tcp.lab.domain.com
dig -t _kpasswd._tcp.lab.domain.com
nmap --script dns-srv-enum --script-args "dns-srv-enum.domain='domain.com'"
DNSSec
DNSSec (Domain Name System Security Extensions) est une extension de sécurité pour le système de noms de domaine (DNS). Il permet de garantir l'authenticité et l'intégrité des données DNS en utilisant des signatures numériques. Cela empêche les attaques telles que le DNS spoofing et le cache poisoning. Les serveurs DNS peuvent être configurés pour prendre en charge DNSSec en ajoutant des enregistrements de ressource spéciaux (RR) à la zone DNS. Les clients DNS peuvent également être configurés pour utiliser DNSSec pour valider les réponses DNS qu'ils reçoivent.
#Query paypal subdomains to ns3.isc-sns.info
nmap -sSU -p53 --script dns-nsec-enum --script-args dns-nsec-enum.domains=paypal.com ns3.isc-sns.info
IPv6
Force brute en utilisant des requêtes "AAAA" pour collecter les adresses IPv6 des sous-domaines.
dnsdict6 -s -t <domain>
Bruteforce reverse DNS en utilisant des adresses IPv6
Lorsque vous travaillez avec des adresses IPv6, il est important de comprendre que les adresses IPv6 inverses sont stockées dans la zone ip6.arpa
. Cette zone est organisée de manière similaire à la zone in-addr.arpa
pour les adresses IPv4.
Pour effectuer une attaque de bruteforce sur les adresses IPv6 inverses, vous pouvez utiliser l'outil dnsrevenum6
de dnsrevenum
. Cet outil génère une liste d'adresses IPv6 inverses possibles pour un préfixe donné.
Voici un exemple d'utilisation de dnsrevenum6
pour générer une liste d'adresses IPv6 inverses possibles pour le préfixe 2001:db8:1:0:0:0:0:0/64
:
$ dnsrevenum6 2001:db8:1:0:0:0:0:0/64 > ipv6_reverse.txt
Une fois que vous avez généré la liste d'adresses IPv6 inverses possibles, vous pouvez utiliser un outil comme dnsrevenum
pour effectuer une recherche DNS inverse sur chaque adresse de la liste. Cela vous permettra de déterminer si une adresse IPv6 inverse correspond à un nom de domaine.
Voici un exemple d'utilisation de dnsrevenum
pour effectuer une recherche DNS inverse sur chaque adresse IPv6 inverse de la liste générée précédemment :
$ cat ipv6_reverse.txt | dnsrevenum -r 8.8.8.8
Cet exemple utilise le serveur DNS 8.8.8.8
pour effectuer la recherche DNS inverse. Vous pouvez remplacer ce serveur DNS par un autre serveur DNS de votre choix.
En utilisant cette technique, vous pouvez identifier les noms de domaine associés à des adresses IPv6 inverses et potentiellement découvrir des informations sensibles sur le réseau cible.
dnsrevenum6 pri.authdns.ripe.net 2001:67c:2e8::/48 #Will use the dns pri.authdns.ripe.net
Attaque DDoS de récursion DNS
Si la récursion DNS est activée, un attaquant pourrait usurper l'origine du paquet UDP afin de faire envoyer la réponse DNS au serveur victime. Un attaquant pourrait abuser des types d'enregistrement ANY ou DNSSEC car ils ont tendance à avoir les plus grandes réponses.
La façon de vérifier si un DNS prend en charge la récursion est de consulter un nom de domaine et de vérifier si le drapeau "ra" (récursion disponible) est présent dans la réponse :
dig google.com A @<IP>
Non disponible:
Disponible:
DragonJAR Security Conference est un événement international de cybersécurité qui a plus d'une décennie et qui se tiendra les 7 et 8 septembre 2023 à Bogotá, en Colombie. C'est un événement de contenu technique élevé où les dernières recherches en espagnol sont présentées, attirant des hackers et des chercheurs du monde entier.
Inscrivez-vous dès maintenant sur le lien suivant et ne manquez pas cette grande conférence!:
{% embed url="https://www.dragonjarcon.org/" %}
Envoi de courrier à une adresse inexistante
Extrait du livre: Network Security Assessment (3ème édition)
L'envoi d'un simple message électronique à une adresse inexistante sur un domaine cible révèle souvent des informations utiles sur le réseau interne grâce à une notification de non-livraison (NDN).
Generating server: noa.nintendo.com
blah@nintendo.com
#550 5.1.1 RESOLVER.ADR.RecipNotFound; not found ##
Original message headers:
Received: from ONERDEDGE02.one.nintendo.com (10.13.20.35) by
onerdexch08.one.nintendo.com (10.13.30.39) with Microsoft SMTP Server (TLS)
id 14.3.174.1; Sat, 26 Apr 2014 16:52:22 -0700
Received: from barracuda.noa.nintendo.com (205.166.76.35) by
ONERDEDGE02.one.nintendo.com (10.13.20.35) with Microsoft SMTP Server (TLS)
id 14.3.174.1; Sat, 26 Apr 2014 16:51:22 -0700
X-ASG-Debug-ID: 1398556333-0614671716199b0d0001-zOQ9WJ
Received: from gateway05.websitewelcome.com (gateway05.websitewelcome.com [69.93.154.37]) by
barracuda.noa.nintendo.com with ESMTP id xVNPkwaqGgdyH5Ag for <blah@nintendo.com>; Sat,
26 Apr 2014 16:52:13 -0700 (PDT)
X-Barracuda-Envelope-From: chris@example.org
X-Barracuda-Apparent-Source-IP: 69.93.154.37
Les données suivantes dans cette transcription sont utiles :
- Les noms d'hôtes internes, les adresses IP et la disposition des sous-domaines
- Le serveur de messagerie utilise Microsoft Exchange Server 2010 SP3
- Un dispositif Barracuda Networks est utilisé pour effectuer la filtrage de contenu
Fichiers de configuration
host.conf
/etc/resolv.conf
/etc/bind/named.conf
/etc/bind/named.conf.local
/etc/bind/named.conf.options
/etc/bind/named.conf.log
/etc/bind/*
Paramètres dangereux lors de la configuration d'un serveur Bind:
Option | Description |
---|---|
allow-query |
Définit les hôtes autorisés à envoyer des requêtes au serveur DNS. |
allow-recursion |
Définit les hôtes autorisés à envoyer des requêtes récursives au serveur DNS. |
allow-transfer |
Définit les hôtes autorisés à recevoir des transferts de zone depuis le serveur DNS. |
zone-statistics |
Collecte des données statistiques sur les zones. |
Commandes automatiques HackTricks
Protocol_Name: DNS #Protocol Abbreviation if there is one.
Port_Number: 53 #Comma separated if there is more than one.
Protocol_Description: Domain Name Service #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for DNS
Note: |
#These are the commands I run every time I see an open DNS port
dnsrecon -r 127.0.0.0/24 -n {IP} -d {Domain_Name}
dnsrecon -r 127.0.1.0/24 -n {IP} -d {Domain_Name}
dnsrecon -r {Network}{CIDR} -n {IP} -d {Domain_Name}
dig axfr @{IP}
dig axfr {Domain_Name} @{IP}
nslookup
SERVER {IP}
127.0.0.1
{IP}
Domain_Name
exit
https://book.hacktricks.xyz/pentesting/pentesting-dns
Entry_2:
Name: Banner Grab
Description: Grab DNS Banner
Command: dig version.bind CHAOS TXT @DNS
Entry_3:
Name: Nmap Vuln Scan
Description: Scan for Vulnerabilities with Nmap
Command: nmap -n --script "(default and *dns*) or fcrdns or dns-srv-enum or dns-random-txid or dns-random-srcport" {IP}
Entry_4:
Name: Zone Transfer
Description: Three attempts at forcing a zone transfer
Command: dig axfr @{IP} && dix axfr @{IP} {Domain_Name} && fierce --dns-servers {IP} --domain {Domain_Name}
Entry_5:
Name: Active Directory
Description: Eunuerate a DC via DNS
Command: dig -t _gc._{Domain_Name} && dig -t _ldap._{Domain_Name} && dig -t _kerberos._{Domain_Name} && dig -t _kpasswd._{Domain_Name} && nmap --script dns-srv-enum --script-args "dns-srv-enum.domain={Domain_Name}"
Entry_6:
Name: consolesless mfs enumeration
Description: DNS enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/dns/dns_amp; set RHOSTS {IP}; set RPORT 53; run; exit' && msfconsole -q -x 'use auxiliary/gather/enum_dns; set RHOSTS {IP}; set RPORT 53; run; exit'
DragonJAR Security Conference est un événement international de cybersécurité qui a plus d'une décennie et qui se tiendra les 7 et 8 septembre 2023 à Bogotá, en Colombie. C'est un événement de contenu technique élevé où les dernières recherches en espagnol sont présentées, attirant des hackers et des chercheurs du monde entier.
Inscrivez-vous dès maintenant sur le lien suivant et ne manquez pas cette grande conférence !:
{% embed url="https://www.dragonjarcon.org/" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFTs
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.