53 - DNS

Wichtige DNS-Records

DNS-Records sind Einträge, die Informationen über die Beziehung zwischen Domainnamen und IP-Adressen enthalten. Hier sind die wichtigsten:

Record
Beschreibung

A

Gibt die IPv4-Adresse der Domain zurück.

AAAA

Gibt die IPv6-Adresse der Domain zurück.

MX

Mail Exchange: Zeigt den zuständigen Mailserver für die Domain.

NS

Gibt die Nameserver der Domain zurück.

TXT

Enthält beliebige Textinformationen, z.B. SPF und DMARC für E-Mail-Sicherheit.

CNAME

Canonical Name: Alias für einen anderen Domainnamen.

PTR

Reverse Lookup: Konvertiert IP-Adressen in Domainnamen.

SOA

Start of Authority: Informationen über die DNS-Zone und den Administrator.


named.conf.local, named.conf.options, named.conf.log (Bind9 Konfiguration)

Bind9 ist der am häufigsten verwendete DNS-Server auf Linux-Systemen. Die Konfigurationsdateien sind in Abschnitte unterteilt, um den DNS-Dienst flexibel zu verwalten.

  • named.conf.local: Definiert die DNS-Zonen und erlaubt lokale Konfigurationen. Beispiel:

    $ cat /etc/bind/named.conf.local
    
    zone "domain.com" {
        type master;
        file "/etc/bind/db.domain.com";
        allow-update { key rndc-key; };
    };
  • named.conf.options: Beinhaltet globale Optionen, die für alle Zonen gelten, z.B. DNS-Caching, Weiterleitungen.

    $ cat /etc/bind/named.conf.options
    
    options {
        directory "/var/cache/bind";
        allow-query { any; };   # Ermöglicht Anfragen von allen Hosts
        recursion no;           # Verhindert rekursive Anfragen
    };
  • named.conf.log: Enthält Logging-Einstellungen für DNS-Anfragen, Fehler und Ereignisse.

    logging {
        channel default_log {
            file "/var/log/named/default.log" versions 3 size 5m;
            severity dynamic;
            print-time yes;
        };
    
        category default { default_log; };
    };

Gefährliche Einstellungen (Dangerous Settings)

Unsichere Einstellungen können ein DNS-Server angreifbar machen. Einige Beispiele für riskante Konfigurationen:

Option
Beschreibung

allow-query

Definiert, welche Hosts Anfragen an den DNS-Server senden dürfen.

allow-recursion

Ermöglicht rekursive Anfragen, die bei falscher Konfiguration missbraucht werden können.

allow-transfer

Erlaubt Zonentransfers (AXFR). Wenn dies nicht auf vertrauenswürdige Hosts eingeschränkt ist, können Angreifer die gesamte Zone abrufen.

Beispiel einer riskanten Konfiguration, die erlaubt, dass jeder Zonentransfers durchführen kann:

zone "domain.com" {
    type master;
    file "/etc/bind/db.domain.com";
    allow-transfer { any; };  # Riskant! Jeder kann die Zone übertragen.
};

Footprinting des Dienstes (Footprinting the Service)

1. dig (DNS Query)

  • NS-Abfrage: Fragt die Nameserver einer Domain ab.

    $ dig ns example.com
    ;; ANSWER SECTION:
    example.com.   172800 IN NS ns1.example.com.
  • ANY-Abfrage: Zeigt alle verfügbaren DNS-Records (sofern der Server es erlaubt).

    $ dig any example.com
  • Version des DNS-Servers abfragen: Abfragen der DNS-Server-Version (CHAOS query):

    $ dig CH TXT version.bind @dns.example.com

2. Zonentransfer (AXFR)

  • Öffentliche Zonen: Diese enthalten Informationen, die für die allgemeine Nutzung und Erreichbarkeit im Internet bestimmt sind, wie die IP-Adressen für öffentliche Web- und Mailserver.

  • Interne Zonen: Diese enthalten Informationen über interne Systeme und Dienste, die nicht für das öffentliche Internet zugänglich sein sollen. Zum Beispiel könnte eine interne Zone Details über interne Datenbankserver, Active Directory-Server oder VPN-Endpunkte enthalten.

Externer Zonentransfer

Ein Zonentransfer einer öffentlichen Zone zeigt in der Regel weniger kritische Informationen, da diese öffentlich zugänglich sein müssen. Hier ein Beispiel für einen erfolgreichen Zonentransfer von inlanefreight.htb:

$ dig axfr inlanefreight.htb @10.129.14.128

;; global options: +cmd
inlanefreight.htb.      604800  IN      SOA     inlanefreight.htb. root.inlanefreight.htb. 2 604800 86400 2419200 604800
inlanefreight.htb.      604800  IN      TXT     "v=spf1 include:mailgun.org include:_spf.google.com ..."
inlanefreight.htb.      604800  IN      NS      ns.inlanefreight.htb.
internal.inlanefreight.htb. 604800 IN   A       10.129.1.6
app.inlanefreight.htb.  604800  IN      A       10.129.18.15
ns.inlanefreight.htb.   604800  IN      A       10.129.34.136
;; Query time: 4 msec
;; SERVER: 10.129.14.128#53(10.129.14.128)
;; XFR size: 9 records

In diesem Fall sehen wir:

  • Den SOA-Record, der Informationen über die DNS-Zone enthält.

  • TXT-Records, die SPF-Einstellungen und andere Informationen zeigen.

  • NS- und A-Records, die Nameserver und IP-Adressen der öffentlichen Dienste anzeigen.

Interner Zonentransfer

Ein Zonentransfer für eine interne Zone offenbart oft viel mehr Informationen, die nicht für die Öffentlichkeit gedacht sind. Dies kann kritische interne Server und IP-Adressen anzeigen:

$ dig axfr internal.inlanefreight.htb @10.129.14.128

;; global options: +cmd
internal.inlanefreight.htb. 604800 IN SOA inlanefreight.htb. root.inlanefreight.htb. 2 604800 86400 2419200 604800
internal.inlanefreight.htb. 604800 IN TXT "MS=ms97310371"
internal.inlanefreight.htb. 604800 IN NS ns.inlanefreight.htb.
dc1.internal.inlanefreight.htb. 604800 IN A 10.129.34.16
vpn.internal.inlanefreight.htb. 604800 IN A 10.129.1.6
ws1.internal.inlanefreight.htb. 604800 IN A 10.129.1.34
mail1.internal.inlanefreight.htb. 604800 IN A 10.129.18.200

Hier sehen wir:

  • Interne Servernamen wie dc1, vpn, mail1 und ws1, die möglicherweise interne Dienste wie Active Directory, VPN oder Webserver betreiben.

  • Interne IP-Adressen, die in der Regel nicht öffentlich zugänglich sind.

Diese Art von Informationen ist für Angreifer besonders wertvoll, da sie eine Karte der internen Netzwerkinfrastruktur darstellen und Angriffsvektoren aufzeigen.

3. Subdomain-Bruteforcing mit gobuster

Um Subdomains zu finden, kann gobuster eine Wortliste gegen den DNS-Server verwenden:

  • Beispiel für Bruteforce von Subdomains mit gobuster:

    $ gobuster dns -d example.com -w /path/to/subdomains.txt -i

    Dieser Befehl versucht, Subdomains zu finden, indem er die subdomains.txt Liste durchläuft und die gefundenen Einträge anzeigt.

4. dnsenum für umfassende DNS-Reconnaissance

dnsenum ist ein Tool, das Zonentransfer, Subdomain-Bruteforcing und DNS-Abfragen kombiniert:

  • Beispiel:

    $ dnsenum --dnsserver 8.8.8.8 --enum example.com

Dieses Tool zeigt Nameserver, Mailserver und führt Subdomain-Bruteforcing durch.

5. Bruteforcing DNS Subdomaina

1. Subdomain-Bruteforcing mit Gobuster

Falls gobuster bereits installiert ist, kannst du direkt eine Subdomain-Suche starten.

Gobuster DNS-Bruteforcing

Verwende den folgenden Befehl, um eine Domain wie example.com auf Subdomains zu überprüfen:

$ gobuster dns -d example.com -w /path/to/subdomains.txt -i
Found: mail.example.com -> 192.168.1.1
Found: dev.example.com -> 192.168.1.2
Found: vpn.example.com -> 192.168.1.3

Erklärung:

  • -d example.com: Die Domain, die du überprüfen möchtest.

  • -w /path/to/subdomains.txt: Pfad zur Subdomain-Wortliste, z.B. aus SecLists.

  • -i: Zeigt nur gültige Ergebnisse an, indem leere oder ungültige Antworten ignoriert werden.


2. DNS-Bruteforcing mit DNSenum

Falls dnsenum installiert ist, kannst du es verwenden, um ebenfalls Subdomains zu brute-forcen und weitere DNS-Informationen abzurufen.

DNSenum DNS-Bruteforcing

Der folgende Befehl führt eine DNS-Enumeration inklusive Brute-Forcing von Subdomains durch:

$ dnsenum --dnsserver 8.8.8.8 --enum -f /path/to/subdomains.txt example.com
Host's addresses:
__________________

example.com.   172800 IN NS ns1.example.com.
Found: www.example.com -> 192.168.1.10
Found: mail.example.com -> 192.168.1.11
Found: dev.example.com -> 192.168.1.12

Erklärung:

  • --dnsserver 8.8.8.8: Der DNS-Server, an den die Anfragen gesendet werden (hier Google DNS).

  • --enum: Führe eine vollständige DNS-Enumeration durch.

  • -f /path/to/subdomains.txt: Pfad zur Wortliste, die Subdomains enthält.

  • example.com: Die Ziel-Domain.


Anpassung der hosts-Datei

Manchmal ist es notwendig, die hosts-Datei anzupassen, um lokale Domainnamen für CTFs aufzulösen. So kannst du dies tun:

  1. Datei Öffnen:

    • Linux/Unix/Mac:

      bashCopy code$ sudo nano /etc/hosts
    • Windows: Öffne C:\Windows\System32\drivers\etc\hosts mit Administratorrechten.

  2. Einträge Hinzufügen: Füge eine Zeile hinzu, um eine Domain auf eine IP-Adresse zu zeigen. Zum Beispiel:

    luaCopy code10.129.42.195    app.inlanefreight.local
    10.129.42.195    dev.inlanefreight.local
  3. Speichern und Schließen:

    • Linux/Unix/Mac: Speichere mit CTRL + O, bestätige mit Enter, und schließe mit CTRL + X.

    • Windows: Speichere die Datei und schließe den Editor.

  4. Überprüfen: Prüfe, ob die Änderungen funktionieren:

    bashCopy code$ ping app.inlanefreight.local

So stellst du sicher, dass dein System die Domain korrekt auf die Ziel-IP verweist. Entferne die Einträge nach dem CTF, um die Datei zu „reseten“.


Zusammenfassung der Tools und Techniken:

Tool
Verwendung
Beispielbefehl

dig

DNS-Abfragen, Zonentransfer, Version abfragen

$ dig any example.com

dnsenum

Automatische DNS-Enumeration, Subdomains

$ dnsenum --enum example.com

gobuster

Subdomain-Bruteforcing

$ gobuster dns -d example.com -w subdomains.txt

nmap

Subdomain-Bruteforcing, Zonentransfer

$ nmap --script dns-brute example.com

host

Schnelle DNS-Abfragen

$ host -t ns example.com

/etc/hosts

DNS Eintrag lokal für Virtual hosts

$ nano /etc/hosts

Last updated