Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
massdns — Ein Hochleistungs-DNS-Stub-Resolver für Massenabfragen und Aufklärung (Subdomain-Enumeration) | Kitploit
Tools/GitHubGitHub/blechschmidt/massdns
OSINT (Open-Source-Intelligence)AufklärungDNS- und Subdomain-EnumerationInformationsbeschaffungDNS-Analyse
GitHubblechschmidt/massdns

massdns

Ein Hochleistungs-DNS-Stub-Resolver für Massenabfragen und Aufklärung (Subdomain-Enumeration)

Repository anzeigen
3.6k504vor 4 MonatenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

MassDNS

Ein leistungsstarker DNS-Stub-Resolver

MassDNS ist ein einfacher, leistungsstarker DNS-Stub-Resolver, der sich an diejenigen richtet, die eine massive Anzahl von Domainnamen in der Größenordnung von Millionen oder sogar Milliarden auflösen möchten. Ohne spezielle Konfiguration ist MassDNS in der Lage, über 350.000 Namen pro Sekunde unter Verwendung öffentlich verfügbarer Resolver aufzulösen.

Contributors

  • Quirin Scheitle, Technical University of Munich

Kompilierung

Klonen Sie das Git-Repository und wechseln Sie mit cd in das Projektstammverzeichnis. Führen Sie dann make aus, um aus dem Quellcode zu kompilieren. Wenn Sie nicht unter Linux arbeiten, führen Sie make nolinux aus. Unter Windows werden die Cygwin-Pakete gcc-core, git und make benötigt.

Verwendung

root@kitploit:~
Usage: ./bin/massdns [options] [domainlist]
  -b  --bindto             Bind to IP address and port. (Default: 0.0.0.0:0)
      --busy-poll          Use busy-wait polling instead of epoll.
  -c  --resolve-count      Number of resolves for a name before giving up. (Default: 50)
      --drop-group         Group to drop privileges to when running as root. (Default: nogroup)
      --drop-user          User to drop privileges to when running as root. (Default: nobody)
      --extended-input     Input names are followed by a space-separated list of resolvers.
                           These are used before falling back to the resolvers file.
      --filter             Only output packets with the specified response code.
      --flush              Flush the output file whenever a response was received.
  -h  --help               Show this help.
      --ignore             Do not output packets with the specified response code.
  -i  --interval           Interval in milliseconds to wait between multiple resolves of the same
                           domain. (Default: 500)
  -l  --error-log          Error log file path. (Default: /dev/stderr)
      --norecurse          Use non-recursive queries. Useful for DNS cache snooping.
  -o  --output             Flags for output formatting.
      --predictable        Use resolvers incrementally. Useful for resolver tests.
      --processes          Number of processes to be used for resolving. (Default: 1)
  -q  --quiet              Quiet mode.
      --rand-src-ipv6      Use a random IPv6 address from the specified subnet for each query.
      --rand-src-ipv6-file Use a random IPv6 address from the specified file.
      --rcvbuf             Size of the receive buffer in bytes.
      --retry              Unacceptable DNS response codes.
                           (Default: All codes but NOERROR or NXDOMAIN)
  -r  --resolvers          Text file containing DNS resolvers.
      --root               Do not drop privileges when running as root. Not recommended.
  -s  --hashmap-size       Number of concurrent lookups. (Default: 10000)
      --sndbuf             Size of the send buffer in bytes.
      --status-format      Format for real-time status updates, json or ansi (Default: ansi)
      --sticky             Do not switch the resolver when retrying.
      --socket-count       Socket count per process. (Default: 1)
  -t  --type               Record type to be resolved. (Default: A)
      --verify-ip          Verify IP addresses of incoming replies.
  -w  --outfile            Write to the specified output file instead of standard output.

Output flags:
  L - domain list output
  S - simple text output
  F - full text output
  B - binary output
  J - ndjson output

Advanced flags for the domain list output mode:
  0 - Include NOERROR replies without answers.

Advanced flags for the simple output mode:
  d - Include records from the additional section.
  i - Indent any reply record.
  l - Separate replies using a line feed.
  m - Only output reply records that match the question name.
  n - Include records from the answer section.
  q - Print the question.
  r - Print the question with resolver IP address, Unix timestamp and return code prepended.
  s - Separate packet sections using a line feed.
  t - Include TTL and record class within the output.
  u - Include records from the authority section.

Advanced flags for the ndjson output mode:
  e - Write a record for each terminal query failure.

Eine detaillierte Beschreibung der Befehlszeilenschnittstelle finden Sie in der Manpage mit man ./doc/massdns.1.

Beispiel

Lösen Sie alle AAAA-Einträge aus domains.txt mit den Resolvern in resolvers.txt im Verzeichnis lists auf und speichern Sie die Ergebnisse in results.txt:

root@kitploit:~
$ ./bin/massdns -r lists/resolvers.txt -t AAAA domains.txt > results.txt

Dies ist äquivalent zu:

root@kitploit:~
$ ./bin/massdns -r lists/resolvers.txt -t AAAA -w results.txt domains.txt

Beispielausgabe

Standardmäßig gibt MassDNS Antwortpakete im Textformat aus, das ähnlich wie folgt aussieht:

root@kitploit:~
;; Server: 77.41.229.2:53
;; Size: 93
;; Unix time: 1513458347
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51298
;; flags: qr rd ra ; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0

;; QUESTION SECTION:
example.com. IN A

;; ANSWER SECTION:
example.com. 45929 IN A 93.184.216.34

;; AUTHORITY SECTION:
example.com. 24852 IN NS b.iana-servers.net.
example.com. 24852 IN NS a.iana-servers.net.

Die IP-Adresse des Resolvers ist enthalten, um es Ihnen zu erleichtern, die Ausgabe zu filtern, falls Sie feststellen, dass einige Resolver schlechte Ergebnisse liefern.

Auflösung

Das Repository enthält die Datei resolvers.txt, die eine gefilterte Teilmenge der Resolver des subbrute-Projekts enthält. Bitte beachten Sie, dass die Verwendung von MassDNS eine erhebliche Belastung der verwendeten Resolver verursachen und zu Missbrauchsbeschwerden bei Ihrem ISP führen kann. Beachten Sie auch, dass die bereitgestellten Resolver nicht als vertrauenswürdig garantiert werden können. Die Resolverliste ist derzeit veraltet, ein großer Teil der Resolver ist funktionsunfähig.

MassDNS' eigene, malloc-freie DNS-Implementierung unterstützt derzeit nur die gängigsten Einträge. Wir freuen uns über Ihre Mitarbeit, um dies zu ändern.

PTR-Einträge

MassDNS enthält ein Python-Skript, mit dem Sie alle IPv4-PTR-Einträge auflösen können, indem Sie die entsprechenden Abfragen auf die Standardausgabe ausgeben.

root@kitploit:~
$ ./scripts/ptr.py | ./bin/massdns -r lists/resolvers.txt -t PTR -w ptr.txt

Bitte beachten Sie, dass die Labels in in-addr.arpa umgekehrt sind. Um den Domainnamen von 1.2.3.4 aufzulösen, erwartet MassDNS 4.3.2.1.in-addr.arpa als Eingabeabfragenamen. Aus diesem Grund löst das Python-Skript die Einträge nicht in aufsteigender Reihenfolge auf, was ein Vorteil ist, da plötzliche starke Lastspitzen auf den Nameservern von IPv4-Subnetzen vermieden werden.

Aufklärung durch Brute-Force von Subdomains

Führen Sie Aufklärungsscans verantwortungsvoll durch und passen Sie den Parameter -s an, um autoritative Nameserver nicht zu überlasten.

Ähnlich wie subbrute ermöglicht Ihnen MassDNS das Brute-Forcen von Subdomains mit dem enthaltenen Skript subbrute.py:

root@kitploit:~
$ ./scripts/subbrute.py example.com lists/names.txt | ./bin/massdns -r lists/resolvers.txt -t A -o S -w results.txt

Als zusätzliche Methode der Aufklärung extrahiert das Skript ct.py Subdomains aus Certificate-Transparency-Logs, indem es die Daten von crt.sh abruft:

root@kitploit:~
$ ./scripts/ct.py example.com | ./bin/massdns -r lists/resolvers.txt -t A -o S -w results.txt

Die Dateien names.txt und names_small.txt, die aus dem subbrute-Projekt kopiert wurden, enthalten Namen häufig verwendeter Subdomains. Ziehen Sie auch Jason Haddix' Subdomain-Sammlung mit über 1.000.000 Namen oder die Assetnote-Wortliste mit über 9.000.000 Millionen Namen in Betracht.

MassDNS enthält außerdem ein Wrapper-Skript recon.py (Beta-Status) im Ordner scripts, das die Subdomain-Enumeration direkt gegen autoritative Nameserver durchführt und somit keine Resolver von Drittanbietern benötigt. Die Parallelität wird automatisch von MassDNS bestimmt und unterstützt Hunderttausende von Abfragen pro Sekunde bei zuverlässigen Ergebnissen. Auf einem günstigen dedizierten Server kann die Assetnode-Wortliste in weniger als einer Minute durchsucht werden. Eine aktuelle Einschränkung ist, dass die Zonendelegierung nur bis zum Delegierungspunkt behandelt wird. Wenn beispielsweise example.org durchsucht wird und sub.example.org an einen anderen Nameserver delegiert wird, wird abc.sub.example.org von diesem Skript nicht gefunden, wenn abc.sub in der Wortliste enthalten ist. Das Skript wird diesen Umstand in diesem Fall jedoch als ?.sub.example.org melden.

root@kitploit:~
$ ./scripts/recon.py -d google.com -l lists/best-dns-wordlist.txt > google.txt

Screenshots

Screenshot

Sicherheit

MassDNS benötigt keine Root-Rechte und wird daher standardmäßig die Privilegien auf den Benutzer „nobody“ herabsetzen, wenn es als Root ausgeführt wird. Wenn der Benutzer „nobody“ nicht existiert, verweigert MassDNS die Ausführung. In diesem Fall wird empfohlen, MassDNS als einen anderen unprivilegierten Benutzer auszuführen. Die Privilegienabsenkung kann mit dem Argument --root umgangen werden, was jedoch nicht empfohlen wird. Beachten Sie auch, dass andere Branches als master nicht in der Produktion verwendet werden sollten.

Praktische Überlegungen

Leistungsoptimierung

MassDNS ist eine einfache, single-threaded Anwendung, die für Szenarien entwickelt wurde, in denen das Netzwerk der Engpass ist. Sie ist für den Einsatz auf Servern mit hohen Upload- und Download-Bandbreiten ausgelegt. Intern verwendet MassDNS eine Hash-Map, die die Parallelität der Lookups steuert. Durch das Setzen des Größenparameters -s können Sie daher die Lookup-Rate steuern. Wenn Sie Leistungsprobleme haben, versuchen Sie, den -s-Parameter anzupassen, um eine bessere Erfolgsquote zu erzielen.

Umgehung von Ratenbegrenzungen

Falls die Ratenbegrenzung durch IPv6-Resolver ein Problem darstellt, können Sie --rand-src-ipv6 <your_ipv6_prefix> verwenden. MassDNS verwendet dann einen Raw-Socket zum Senden und Empfangen von DNS-Paketen und wählt für jede Abfrage zufällig eine IPv6-Quelladresse aus dem angegebenen Präfix aus. Dies erfordert, dass MassDNS mit CAP_NET_RAW-Berechtigungen ausgeführt wird. Bei Verwendung dieser Methode sollten Sie iptables oder nftables so konfigurieren, dass der von MassDNS empfangene DNS-Verkehr verworfen wird, damit vom Betriebssystem keine ICMP-Port unreachable-Antworten generiert werden, z.B. mit ip6tables -p udp --sport 53 -I INPUT -j DROP. Beachten Sie, dass diese Regel nur beispielhaft ist und den gesamten DNS-Verkehr verwirft, einschließlich des Verkehrs für andere Anwendungen. Möglicherweise möchten Sie die Regel feiner abstimmen, um sie an Ihren Anwendungsfall anzupassen.

Authentizität der Ergebnisse

Wenn die Authentizität der Ergebnisse von hoher Bedeutung ist, sollten Sie sich nicht auf die enthaltene Resolverliste verlassen. Richten Sie stattdessen einen lokalen unbound-Resolver ein und geben Sie MassDNS dessen IP-Adresse. Falls Sie MassDNS als Aufklärungswerkzeug verwenden, möchten Sie es möglicherweise zuerst mit der Standard-Resolverliste ausführen und die gefundenen Namen dann mit einer Liste vertrauenswürdiger Resolver erneut auflösen, um Fehlalarme zu eliminieren.

Falls Sie Subdomains für einen einzelnen Namen enumerieren, z.B. für example.com, möchten Sie möglicherweise einfach die Resolver von Drittanbietern weglassen. In diesem Fall können Sie die autoritativen Nameserver direkt wie folgt abfragen:

root@kitploit:~
$ ./bin/massdns -r <(./scripts/auth-addrs.sh example.com) --norecurse -o Je example-com-subdomains.txt > results.txt

Todo

  • Verhindern Sie das Überfluten von Resolvern, die Ratenbegrenzungen anwenden oder nach einiger Zeit Resolves verweigern
  • Implementieren Sie Bandbreitenbegrenzungen
  • Führen Sie Cross-Resolver-Prüfungen ein, um DNS-Vergiftung und DNS-Spam zu erkennen (z.B. Level 3 DNS Hijacking)
  • Fügen Sie Wildcard-Erkennung für die Aufklärung hinzu
  • Verbessern Sie die Zuverlässigkeit der Aufklärung durch Hinzufügen eines Modus, der gefundene Domains über eine Liste vertrauenswürdiger (lokaler) Resolver erneut auflöst, um Fehlalarme zu eliminieren
  • Erkennen Sie die optimale Parallelität automatisch
  • Analysieren Sie die Befehlszeile korrekt und erlauben Sie die Verwendung/Kombination von Kurzoptionen ohne Leerzeichen
Tool herunterladen