
Ein Hochleistungs-DNS-Stub-Resolver für Massenabfragen und Aufklärung (Subdomain-Enumeration)
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.
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.
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.
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:
$ ./bin/massdns -r lists/resolvers.txt -t AAAA domains.txt > results.txt
Dies ist äquivalent zu:
$ ./bin/massdns -r lists/resolvers.txt -t AAAA -w results.txt domains.txt
Standardmäßig gibt MassDNS Antwortpakete im Textformat aus, das ähnlich wie folgt aussieht:
;; 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.
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.
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.
$ ./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.
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:
$ ./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:
$ ./scripts/ct.py example.com | ./bin/massdns -r lists/resolvers.txt -t A -o S -w results.txt