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
dnschef-ng — DNSChef (NG) - DNS proxy for Penetration Testers and Malware Analysts | Kitploit
Tools/GitHubGitHub/byt3bl33d3r/dnschef-ng
Data ExfiltrationInformation GatheringNetwork SecurityMalware AnalysisPenetration TestingRed TeamingDNS Analysis
GitHubbyt3bl33d3r/dnschef-ng

dnschef-ng

DNSChef (NG) - DNS proxy for Penetration Testers and Malware Analysts

Repository anzeigen
17316vor 2 JahrenVon 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

[!NOTE] Dies ist eine aktualisierte Version von DNSChef, ursprünglich geschrieben von @iphelix``` _ _ __
| | v0.7 | | / |
| | __ ___ | | | | ______ _ __ __ _ / | '_ \/ __|/ __| '_ \ / _ \ _|______| '_ \ / _ | | (| | | | _ \ (__| | | | __/ | | | | | (| | _,|
| ||/_|| ||___|| || ||_, | / | |_/ D O C U M E N T A T I O N

root@kitploit:~
DNSChef ist ein hochgradig konfigurierbarer DNS-Proxy für Penetrationstester und Malware-Analysten. Ein DNS-Proxy (auch „Fake DNS“ genannt) ist ein Werkzeug, das unter anderem für die Analyse des Netzwerkverkehrs von Anwendungen verwendet wird. Beispielsweise kann ein DNS-Proxy verwendet werden, um Anfragen für „badguy.com“ so zu fälschen, dass sie auf eine lokale Maschine zur Beendigung oder Abfangung zeigen, anstatt auf einen echten Host irgendwo im Internet.

Es gibt einige DNS-Proxys auf dem Markt. Die meisten leiten einfach alle DNS-Anfragen an eine einzelne IP-Adresse um oder implementieren nur rudimentäre Filter. DNSChef wurde im Rahmen eines Penetrationstests entwickelt, bei dem ein besser konfigurierbares System benötigt wurde. Das Ergebnis ist eine plattformübergreifende Anwendung, die Antworten auf der Grundlage von inklusiven und exklusiven Domainlisten fälschen kann, mehrere DNS-Record-Typen unterstützt, Domains mit Platzhaltern abgleicht, echte Antworten für nicht passende Domains weiterleitet, externe Konfigurationsdateien definiert, IPv6 und viele weitere Funktionen bietet. Eine detaillierte Erläuterung der einzelnen Funktionen und vorgeschlagenen Anwendungen findest du weiter unten.

Der Einsatz eines DNS-Proxys wird in Situationen empfohlen, in denen eine Anwendung nicht dazu gezwungen werden kann, einen anderen Proxy-Server direkt zu verwenden. Beispielsweise ignorieren einige mobile Anwendungen die HTTP-Proxy-Einstellungen des Betriebssystems vollständig. In solchen Fällen ermöglicht dir der Einsatz eines DNS-Proxyservers wie DNSChef, die Anwendung dazu zu bringen, Verbindungen an das gewünschte Ziel weiterzuleiten.

## Neue Funktionen

- Erfordert Python 3.11+
- Unterstützt das Staging von Dateien über DNS (derzeit nur über `A`,`AAAA`,`TXT` ...)
- Konfigurationsdatei ist jetzt TOML
- Optionale HTTP-API (ermöglicht das Abfragen von Logs und das Aktualisieren der Konfiguration aus der Ferne)
- Vollständig asynchron für verbesserte Leistung (nutzt AsyncIO)
- Strukturierte Protokollierung und eine Reihe von QOL-Verbesserungen
- Ist jetzt ein Python-Paket
- Dockerisiert
- Enthält eine Reihe von PRs und Fixes aus dem ursprünglichen Repository

## Installation

Um die neueste Version zu installieren, solltest du [pipx](https://pypa.github.io/pipx/) verwenden (es sei denn, du bist ein Arschloch, das schlampige Steaks mag):

    pipx install dnschef-ng

Wenn du die HTTP-API nutzen möchtest (erfordert einige zusätzliche Abhängigkeiten):

    pipx install dnschef-ng[api]

Neueste Version aus Git mit pipx installieren:

     pipx install git+https://github.com/byt3bl33d3r/dnschef-ng.git

Neueste Version aus Git mit pipx inklusive der Abhängigkeiten für die HTTP-API installieren:

     pipx install "git+https://github.com/byt3bl33d3r/dnschef-ng.git#egg=dnschef-ng[api]"

## Einrichten eines DNS-Proxys

Bevor du DNSChef verwenden kannst, musst du deinen Rechner so konfigurieren, dass er einen DNS-Nameserver verwendet, auf dem das Tool läuft. Je nach Betriebssystem hast du mehrere Möglichkeiten:

- **Linux** – Bearbeite */etc/resolv.conf*, um ganz oben eine Zeile mit deinem Analyse-Host einzufügen (z. B. füge „nameserver 127.0.0.1“ hinzu, wenn du lokal arbeitest). Alternativ kannst du über Tools wie den Network Manager eine DNS-Serveradresse hinzufügen. Öffne im Network Manager die IPv4-Einstellungen, wähle *Nur automatische (DHCP) Adressen* oder *Manuell* aus dem Dropdown-Menü *Methode* und bearbeite das Textfeld *DNS-Server*, um eine IP-Adresse mit laufendem DNSChef einzutragen.

- **Windows** – Wähle im *Systemsteuerung* die *Netzwerkverbindungen* aus. Wähle dann eine der Verbindungen aus (z. B. „LAN-Verbindung“), klicke mit der rechten Maustaste darauf und wähle Eigenschaften. Wähle im neu erscheinenden Dialogfeld *Internetprotokoll (TCP/IP)* aus und klicke auf Eigenschaften. Wähle schließlich das Optionsfeld *Folgende DNS-Serveradressen verwenden* und gib die IP-Adresse ein, auf der DNSChef läuft. Wenn du z. B. lokal arbeitest, gib 127.0.0.1 ein.

- **OS X** – Öffne *Systemeinstellungen* und klicke auf das Symbol *Netzwerk*. Wähle die aktive Schnittstelle aus und fülle das Feld *DNS-Server* aus. Wenn du Airport verwendest, musst du auf die Schaltfläche *Erweitert…* klicken und die DNS-Server dort bearbeiten. Alternativ kannst du */etc/resolv.conf* bearbeiten und ganz oben einen gefälschten Nameserver hinzufügen (z. B. „nameserver 127.0.0.1“).

- **iOS** – Öffne *Einstellungen* und wähle *Allgemein*. Wähle dann *WLAN* und tippe auf den blauen Pfeil rechts neben einem aktiven Zugangspunkt in der Liste. Bearbeite den DNS-Eintrag, sodass er auf den Host mit laufendem DNSChef zeigt. Stelle sicher, dass du die Mobilfunk-Schnittstelle deaktiviert hast (falls verfügbar).

- **Android** – Öffne *Einstellungen* und wähle *Drahtlos und Netzwerke*. Tippe auf *WLAN-Einstellungen* und wähle *Erweitert*, nachdem du die *Optionen*-Taste am Telefon gedrückt hast. Aktiviere das Kontrollkästchen *Statische IP verwenden* und konfiguriere einen benutzerdefinierten DNS-Server.

Wenn du die DNS-Einstellungen des Geräts nicht manuell ändern kannst, gibt es dennoch mehrere Optionen mit Techniken wie [ARP-Spoofing](http://en.wikipedia.org/wiki/ARP_spoofing), [Rogue DHCP](http://www.yersinia.net/doc.htm) und anderen kreativen Methoden.

Schließlich musst du einen gefälschten Dienst konfigurieren, auf den DNSChef alle Anfragen umleiten soll. Wenn du beispielsweise Webverkehr abfangen möchtest, musst du entweder einen separaten Webserver auf Port 80 starten oder einen Web-Proxy (z. B. Burp) einrichten, um den Verkehr abzufangen. DNSChef leitet die Anfragen an deinen Proxy-/Server-Host mit entsprechend konfigurierten Diensten weiter.

## DNSChef ausführen

DNSChef ist eine plattformübergreifende, in Python entwickelte Anwendung, die auf den meisten Plattformen mit einem Python-Interpreter laufen sollte. Diese Anleitung konzentriert sich auf Unix-Umgebungen; alle unten aufgeführten Beispiele wurden jedoch auch unter Windows getestet.

Verschaffen wir uns einen ersten Eindruck von DNSChef mit seiner grundlegenden Überwachungsfunktion. Führe den folgenden Befehl als Root aus (erforderlich, um einen Server auf Port 53 zu starten):

    # ./dnschef.py
        
              _                _          __  
             | | version 0.2  | |        / _| 
           __| |_ __  ___  ___| |__   ___| |_ 
          / _` | '_ \/ __|/ __| '_ \ / _ \  _|
         | (_| | | | \__ \ (__| | | |  __/ |  
          \__,_|_| |_|___/\___|_| |_|\___|_|  
                       [email protected]  

    [*] DNSChef started on interface: 127.0.0.1 
    [*] Using the following nameservers: 8.8.8.8
    [*] No parameters were specified. Running in full proxy mode

Ohne Parameter läuft DNSChef im vollständigen Proxy-Modus. Das bedeutet, dass alle Anfragen einfach an einen vorgelagerten DNS-Server (standardmäßig 8.8.8.8) weitergeleitet und an den anfragenden Host zurückgegeben werden. Fragen wir beispielsweise einen „A“-Datensatz für eine Domain ab und beobachten wir die Ergebnisse:

    $ host -t A thesprawl.org
    thesprawl.org has address 108.59.3.64

DNSChef gibt die folgende Protokollzeile aus, die Zeit, Quell-IP-Adresse, Typ des angeforderten Datensatzes und – am wichtigsten – den abgefragten Namen anzeigt:

    [23:54:03] 127.0.0.1: proxying the response of type 'A' for thesprawl.org

Dieser Modus ist nützlich für die einfache Anwendungsüberwachung, wenn du herausfinden möchtest, welche Domains eine Anwendung für ihre Kommunikation verwendet.

DNSChef bietet volle Unterstützung für IPv6, die mit den Flags *-6* oder *--ipv6** aktiviert werden kann. Es funktioniert genau wie der IPv4-Modus, mit der Ausnahme, dass die Standard-Listening-Schnittstelle auf ::1 und der Standard-DNS-Server auf 2001:4860:4860::8888 umgestellt wird. Hier ist eine Beispielausgabe:

    # ./dnschef.py -6
              _                _          __
             | | version 0.2  | |        / _|
           __| |_ __  ___  ___| |__   ___| |_
          / _` | '_ \/ __|/ __| '_ \ / _ \  _|
         | (_| | | | \__ \ (__| | | |  __/ |
          \__,_|_| |_|___/\___|_| |_|\___|_|
                       [email protected]

    [*] Using IPv6 mode.
    [*] DNSChef started on interface: ::1
    [*] Using the following nameservers: 2001:4860:4860::8888
    [*] No parameters were specified. Running in full proxy mode
    [00:35:44] ::1: proxying the response of type 'A' for thesprawl.org
    [00:35:44] ::1: proxying the response of type 'AAAA' for thesprawl.org
    [00:35:44] ::1: proxying the response of type 'MX' for thesprawl.org

HINWEIS: Standardmäßig erstellt DNSChef einen UDP-Listener. Du kannst stattdessen TCP verwenden, und zwar mit dem später besprochenen Argument *--tcp*.

## Ausführen der DNSChef-HTTP-API

> [!WARNING]
> Die API verfügt über keine Authentifizierung. Erlaube/verweigere den Zugriff auf Netzwerkebene über Sicherheitsgruppen, iptables, Firewall usw..

`uvicorn dnschef.api:app`

Danach kannst du die OpenAPI-Dokumentation unter `http://127.0.0.1:8000/docs` aufrufen.```
$ uvicorn dnschef.api:app
INFO:     Started server process [28327]
INFO:     Waiting for application startup.
          _                _          __  
         | | version 0.6.0  | |        / _| 
       __| |_ __  ___  ___| |__   ___| |_ 
      / _` | '_ \/ __|/ __| '_ \ / _ \  _|
     | (_| | | | \__ \ (__| | | |  __/ |  
      \__,_|_| |_|___/\___|_| |_|\___|_|  
                @iphelix // @byt3bl33d3r  

2023-09-28 11:24:59 cooking replies                domain=*.thesprawl.org record=192.0.2.1 section=A
2023-09-28 11:24:59 cooking replies                domain=*.thesprawl.org record=2001:db8::1 section=AAAA
-- SNIP --
2023-09-28 11:24:59 cooking replies                domain=*.thesprawl.org record=1 . alpn=h2 ipv4hint=127.0.0.1 ipv6hint=::1 section=HTTPS
INFO:     Application startup complete.
2023-09-28 11:24:59 DNSChef is active              interface=127.0.0.1 ipv6=False nameservers=['8.8.8.8'] port=53 tcp=False
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

Alle Antworten abfangen

Nun, da du weißt, wie du DNSChef startest, konfigurieren wir es so, dass alle Antworten mit dem Parameter --fakeip auf 127.0.0.1 gefälscht werden:

root@kitploit:~
# ./dnschef.py --fakeip 127.0.0.1 -q
[*] DNSChef started on interface: 127.0.0.1 
[*] Using the following nameservers: 8.8.8.8
[*] Cooking all A replies to point to 127.0.0.1
[23:55:57] 127.0.0.1: cooking the response of type 'A' for google.com to 127.0.0.1
[23:55:57] 127.0.0.1: proxying the response of type 'AAAA' for google.com
[23:55:57] 127.0.0.1: proxying the response of type 'MX' for google.com

In der obigen Ausgabe kannst du sehen, dass DNSChef so konfiguriert wurde, dass alle Anfragen über 127.0.0.1 weitergeleitet werden. Die erste Protokollzeile um 23:55:57 zeigt, dass wir die „A“-Ressourceneintragsantwort „manipuliert“ haben, sodass sie auf 127.0.0.1 zeigt. Weitere Anfragen für „AAAA“- und „MX“-Einträge werden jedoch einfach von einem echten DNS-Server weitergeleitet. Schauen wir uns die Ausgabe des aufrufenden Programms an:

root@kitploit:~
$ host google.com localhost
google.com has address 127.0.0.1
google.com has IPv6 address 2001:4860:4001:803::1001
google.com mail is handled by 10 aspmx.l.google.com.
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 30 alt2.aspmx.l.google.com.
google.com mail is handled by 20 alt1.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.

Wie du sehen kannst, wurde das Programm dazu verleitet, 127.0.0.1 für die IPv4-Adresse zu verwenden. Die Informationen aus den IPv6- (AAAA) und Mail- (MX) Einträgen erscheinen jedoch völlig legitim. Das Ziel von DNSChef ist es, die korrekte Funktionsweise des Programms so wenig wie möglich zu beeinträchtigen. Wenn eine Anwendung also von einem bestimmten Mailserver abhängt, erhält sie diesen über diese weitergeleitete Anfrage korrekt.

Lass uns eine weitere Anfrage fälschen, um zu veranschaulichen, wie mehrere Einträge gleichzeitig angezielt werden können:

root@kitploit:~
# ./dnschef.py --fakeip 127.0.0.1 --fakeipv6 ::1 -q
[*] DNSChef started on interface: 127.0.0.1 
[*] Using the following nameservers: 8.8.8.8
[*] Cooking all A replies to point to 127.0.0.1
[*] Cooking all AAAA replies to point to ::1
[00:02:14] 127.0.0.1: cooking the response of type 'A' for google.com to 127.0.0.1
[00:02:14] 127.0.0.1: cooking the response of type 'AAAA' for google.com to ::1
[00:02:14] 127.0.0.1: proxying the response of type 'MX' for google.com

Zusätzlich zum --fakeip-Flag habe ich jetzt --fakeipv6 angegeben, das dazu dient, „AAAA“-Record-Abfragen zu fälschen. Hier ist die aktualisierte Programmausgabe:

root@kitploit:~
$ host google.com localhost
google.com has address 127.0.0.1
google.com has IPv6 address ::1
google.com mail is handled by 10 aspmx.l.google.com.
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 30 alt2.aspmx.l.google.com.
google.com mail is handled by 20 alt1.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.

Auch hier wurden alle Datensätze, die nicht explizit von der Anwendung überschrieben wurden, weitergeleitet und vom echten DNS-Server zurückgegeben. Sowohl IPv4 (A) als auch IPv6 (AAAA) wurden jedoch so gefälscht, dass sie auf die lokale Maschine zeigen.

DNSChef unterstützt mehrere Datensatztypen:

HINWEIS: Aus Gründen der Benutzerfreundlichkeit sind nicht alle DNS-Datensatztypen über die Befehlszeile verfügbar. Weitere Datensätze wie PTR, TXT, SOA usw. können mit dem Flag --file und einem passenden Datensatz-Header angegeben werden. Siehe Abschnitt Externe Definitionsdatei weiter unten.

Zum Schluss wollen wir beobachten, wie die Anwendung Anfragen vom Typ ANY behandelt:

root@kitploit:~
# ./dnschef.py --fakeip 127.0.0.1 --fakeipv6 ::1 --fakemail mail.fake.com --fakealias www.fake.com --fakens ns.fake.com -q
[*] DNSChef started on interface: 127.0.0.1 
[*] Using the following nameservers: 8.8.8.8
[*] Cooking all A replies to point to 127.0.0.1
[*] Cooking all AAAA replies to point to ::1
[*] Cooking all MX replies to point to mail.fake.com
[*] Cooking all CNAME replies to point to www.fake.com
[*] Cooking all NS replies to point to ns.fake.com
[00:17:29] 127.0.0.1: cooking the response of type 'ANY' for google.com with all known fake records.

DNS-ANY-Abfragen führen dazu, dass DNSChef jeden gefälschten Datensatz zurückgibt, den es für eine zutreffende Domäne kennt. Hier ist die Ausgabe, die das Programm sehen wird:

root@kitploit:~
# host -t ANY google.com localhost
google.com has address 127.0.0.1
google.com has IPv6 address ::1
google.com mail is handled by 10 mail.fake.com.
google.com is an alias for www.fake.com.
google.com name server ns.fake.com.

Domänen filtern

Betrachten wir anhand des obigen Beispiels, dass du nur Anfragen für thesprawl.org abfangen möchtest und Anfragen an alle anderen Domänen wie webfaction.com unverändert lassen willst. Du kannst den Parameter --fakedomains verwenden, wie unten dargestellt:

root@kitploit:~
# ./dnschef.py --fakeip 127.0.0.1 --fakedomains thesprawl.org -q
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8  
[*] Cooking replies to point to 127.0.0.1 matching: thesprawl.org
[00:23:37] 127.0.0.1: cooking the response of type 'A' for thesprawl.org to 127.0.0.1
[00:23:52] 127.0.0.1: proxying the response of type 'A' for mx9.webfaction.com

Im obigen Beispiel wurde die Anfrage für thesprawl.org gefälscht; die Anfrage für mx9.webfaction.com wurde jedoch unverändert gelassen. Das Filtern von Domänen ist sehr nützlich, wenn du versuchst, eine einzelne Anwendung zu isolieren, ohne den Rest zu beeinträchtigen.

HINWEIS: DNSChef prüft nicht, ob die Domäne existiert, bevor die Antwort gefälscht wird. Wenn du eine Domäne angegeben hast, wird sie immer zu einem gefälschten Wert aufgelöst, unabhängig davon, ob sie wirklich existiert oder nicht.

Umgekehrtes Filtern

In einer anderen Situation musst du möglicherweise Antworten für alle Anfragen fälschen, außer für eine definierte Liste von Domänen. Du kannst diese Aufgabe mit dem Parameter --truedomains wie folgt erledigen:

root@kitploit:~
# ./dnschef.py --fakeip 127.0.0.1 --truedomains thesprawl.org,*.webfaction.com -q
[*] DNSChef started on interface: 127.0.0.1
[*] Using the following nameservers: 8.8.8.8  
[*] Cooking replies to point to 127.0.0.1 not matching: *.webfaction.com, thesprawl.org
[00:27:57] 127.0.0.1: proxying the response of type 'A' for mx9.webfaction.com
[00:28:05] 127.0.0.1: cooking the response of type 'A' for google.com to 127.0.0.1

Im obigen Beispiel passieren mehrere Dinge. Beachte zunächst die Verwendung eines Platzhalters (*). Alle Domänen, die auf *.webfaction.com matchen, werden umgekehrt abgeglichen und auf ihre wahren Werte aufgelöst. Die Anfrage für 'google.com' ergab 127.0.0.1, da sie nicht auf der Liste der ausgeschlossenen Domänen stand.

HINWEIS: Platzhalter sind positionsspezifisch. Eine Maske vom Typ *.thesprawl.org matcht www.thesprawl.org, aber nicht www.test.thesprawl.org. Eine Maske vom Typ ..thesprawl.org matcht jedoch thesprawl.org, www.thesprawl.org und www.test.thesprawl.org.

Externe Definitionsdatei

Es kann Situationen geben, in denen das Definieren eines einzelnen gefälschten DNS-Eintrags für alle passenden Domänen nicht ausreicht. Du kannst eine externe Datei mit einer Sammlung von DOMAIN=RECORD-Paaren verwenden, die genau definiert, wohin die Anfrage gehen soll.

Lass uns zum Beispiel die folgende Definitionsdatei erstellen und sie dnschef.toml nennen:```toml [A] ".google.com"="192.0.2.1" "thesprawl.org"="192.0.2.2" ".wordpress.*"="192.0.2.3"

root@kitploit:~
Beachte den Abschnittsheader `[A]`, er definiert den Datensatztyp für DNSChef. Betrachten wir nun aufmerksam die Ausgabe mehrerer Abfragen:

    # ./dnschef.py --file dnschef.toml -q
    [*] DNSChef started on interface: 127.0.0.1 
    [*] Using the following nameservers: 8.8.8.8
    [+] Cooking A replies for domain *.google.com with '192.0.2.1'
    [+] Cooking A replies for domain thesprawl.org with '192.0.2.2'
    [+] Cooking A replies for domain *.wordpress.* with '192.0.2.3'
    [00:43:54] 127.0.0.1: cooking the response of type 'A' for google.com to 192.0.2.1
    [00:44:05] 127.0.0.1: cooking the response of type 'A' for www.google.com to 192.0.2.1
    [00:44:19] 127.0.0.1: cooking the response of type 'A' for thesprawl.org to 192.0.2.2
    [00:44:29] 127.0.0.1: proxying the response of type 'A' for www.thesprawl.org
    [00:44:40] 127.0.0.1: cooking the response of type 'A' for www.wordpress.org to 192.0.2.3
    [00:44:51] 127.0.0.1: cooking the response of type 'A' for wordpress.com to 192.0.2.3
    [00:45:02] 127.0.0.1: proxying the response of type 'A' for slashdot.org

Sowohl *google.com* als auch *www.google.com* passten auf den Eintrag *\*.google.com* und wurden korrekt auf *192.0.2.1* aufgelöst. Die Anfrage für *www.thesprawl.org* wurde hingegen einfach proxied, anstatt modifiziert zu werden. Schließlich passten alle Varianten wie *wordpress.com*, *www.wordpress.org* usw. auf die Maske *\*.wordpress.\** und wurden korrekt auf *192.0.2.3* aufgelöst. Schließlich wurde eine undefinierte *slashdot.org*-Abfrage einfach mit einer echten Antwort proxied.

Du kannst Abschnittsheader für alle anderen unterstützten DNS-Datensatztypen angeben, einschließlich derer, die nicht direkt über die Befehlszeile verfügbar sind: [A], [AAAA], [MX], [NS], [CNAME], [PTR], [NAPTR] und [SOA]. Definieren wir zum Beispiel einen neuen [PTR]-Abschnitt in der Datei `dnschef.toml`:```toml
[PTR]
"*.2.0.192.in-addr.arpa"="fake.com"

Beobachten wir das Verhalten von DNSChef mit diesem neuen Record-Typ:

root@kitploit:~
 ./dnschef.py --file dnschef.toml -q
[sudo] password for iphelix: 
[*] DNSChef started on interface: 127.0.0.1 
[*] Using the following nameservers: 8.8.8.8
[+] Cooking PTR replies for domain *.2.0.192.in-addr.arpa with 'fake.com'
[00:11:34] 127.0.0.1: cooking the response of type 'PTR' for 1.2.0.192.in-addr.arpa to fake.com

Und hier ist, was ein Client bei Reverse-DNS-Abfragen sehen könnte:

root@kitploit:~
$ host 192.0.2.1 localhost
1.2.0.192.in-addr.arpa domain name pointer fake.com.

Einige Records erfordern exakte Formatierung. Gute Beispiele sind SOA und NAPTR```toml [SOA] "*.thesprawl.org" = "ns.fake.com. hostmaster.fake.com. 1 10800 3600 604800 3600"

[NAPTR] ".thesprawl.org" = "100 10 U E2U+sip !^.$!sip:[email protected]! ."

root@kitploit:~
Siehe Beispieldatei `dnschef.toml` für weitere Beispiele.

## Datei-Staging

DNSChef kann jede Datei über DNS „stagen“. Derzeit wird das Datei-Staging nur mit den Records `A`, `AAAA` und `TXT` unterstützt (weitere werden folgen). Um DNSChef anzuweisen, eine Datei zu stagen, fügen Sie den folgenden Abschnitt zu Ihrer `dnschef.toml` hinzu:```toml
[A]
"*.wat.org" = { file = "/home/payload.exe", chunk_size = 4 }

[AAAA]
"*.gorgetowngeronimos.org" = { file = "/home/payload.exe", chunk_size = 16 }

[!NOTE] Die Einstellung chunk_size ist optional und ihr Verhalten hängt stark vom Abfragetyp ab. Beispiel: Da A-Abfragen eine IPv4-Adresse zurückgeben, beträgt die maximal zulässige chunk_size 4 Bytes. Wird die chunk_size auf einen Wert über 4 gesetzt, wird dies ignoriert.

Eine A-Abfrage an *.wat.org, die eine Zahl im DNS-Namen enthält, gibt nun den entsprechenden Teil der Datei zurück. Z. B. gibt die Abfrage ns0.wat.org eine IPv4-Adresse zurück, die den ersten Teil der Datei (4 Bytes) enthält. Eine Abfrage für test1.wat.org gibt den zweiten Teil der Datei zurück usw.

Bei der Verwendung von Wildcard-Domains wie in den obigen Beispielen können die „Teil"-Nummern überall platziert werden und müssen nicht zusammenhängen. Z. B. gibt eine A-Abfrage für 1aliens2.wat.org den 12. Teil der Datei zurück.

TXT-Datensätze unterstützen zusätzliche Optionen für das Staging von Dateien, da sie mehr Flexibilität bieten:```toml [TXT] "ns*.dungbeetle.org" = { file = "~/payload.exe", chunk_size = 189, response_format = "{prefix}test-{chunk}", response_prefix_pool = ["atlassian-domain-verification=", "onetrust-domain-verification=", "docusign=" ] }

root@kitploit:~
Mit dieser Konfiguration gibt jede `TXT`-Abfrage an `ns*.dungbeetle.org` einen Teil unserer Datei zurück, die sich lokal im Dateisystem unter `~/payload.exe` befindet.

Die Einstellungen `response_format` und `response_prefix_pool` sind optional, ermöglichen es dir aber, die DNS-`TXT`-Antwort weiter anzupassen.

Die Einstellung `response_format` definiert das Format der `TXT`-Antwort: 

- Die Variable `{prefix}` wird zufällig durch einen der in dem Array `response_prefix_pool` definierten Werte ersetzt.

- Die Variable `{chunk}` wird durch den Dateiteil (Chunk) ersetzt.

Mit der obigen Konfiguration gibt eine `TXT`-Abfrage an `ns1.dungbeetle.org` die folgende Antwort zurück:```
docusign=test-<BASE64_ENCODED_FILE_CHUNK_N1>

Wenn Sie eine weitere TXT-Abfrage durchführen (z. B. ns10.dungbeetle.org), sehen Sie, dass sich das Präfix ändert:``` atlassian-domain-verification=test-<BASE64_ENCODED_FILE_CHUNK_N10>

root@kitploit:~
## Erweiterte Filterung

Sie können Eingaben aus einer Datei und von der Befehlszeile beliebig kombinieren. Der folgende Befehl verwendet beispielsweise sowohl die Parameter `--file` als auch `--fakedomains`:

    # ./dnschef.py --file dnschef.toml --fakeip 6.6.6.6 --fakedomains=thesprawl.org,slashdot.org -q
    [*] DNSChef started on interface: 127.0.0.1 
    [*] Using the following nameservers: 8.8.8.8
    [+] Cooking A replies for domain *.google.com with '192.0.2.1'
    [+] Cooking A replies for domain thesprawl.org with '192.0.2.2'
    [+] Cooking A replies for domain *.wordpress.* with '192.0.2.3'
    [*] Cooking A replies to point to 6.6.6.6 matching: *.wordpress.*, *.google.com, thesprawl.org
    [*] Cooking A replies to point to 6.6.6.6 matching: slashdot.org, *.wordpress.*, *.google.com, thesprawl.org
    [00:49:05] 127.0.0.1: cooking the response of type 'A' for google.com to 192.0.2.1
    [00:49:15] 127.0.0.1: cooking the response of type 'A' for slashdot.org to 6.6.6.6
    [00:49:31] 127.0.0.1: cooking the response of type 'A' for thesprawl.org to 6.6.6.6
    [00:50:08] 127.0.0.1: proxying the response of type 'A' for tor.com

Beachten Sie, dass die Definition für *thesprawl.org* im Befehlszeilenparameter Vorrang vor *dnschef.toml* hatte. Dies kann nützlich sein, wenn Sie Werte in der Konfigurationsdatei überschreiben möchten. slashdot.org wird weiterhin auf die gefälschte IP-Adresse aufgelöst, da es im Parameter *--fakedomains* angegeben wurde. Die tor.com-Anfrage wird einfach per Proxy weitergeleitet, da sie weder in der Befehlszeile noch in der Konfigurationsdatei angegeben wurde.

## Weitere Konfigurationen

Aus Sicherheitsgründen lauscht DNSChef standardmäßig auf der lokalen Schnittstelle 127.0.0.1 (bzw. ::1 für IPv6). Sie können DNSChef mit dem Parameter *--interface* auf einer anderen Schnittstelle lauschen lassen:

    # ./dnschef.py --interface 0.0.0.0 -q
    [*] DNSChef started on interface: 0.0.0.0
    [*] Using the following nameservers: 8.8.8.8 
    [*] No parameters were specified. Running in full proxy mode
    [00:50:53] 192.0.2.105: proxying the response of type 'A' for thesprawl.org

oder für IPv6:

    # ./dnschef.py -6 --interface :: -q
    [*] Using IPv6 mode.
    [*] DNSChef started on interface: ::
    [*] Using the following nameservers: 2001:4860:4860::8888
    [*] No parameters were specified. Running in full proxy mode
    [00:57:46] 2001:db8::105: proxying the response of type 'A' for thesprawl.org

Standardmäßig verwendet DNSChef den öffentlichen DNS-Server von Google für Proxy-Anfragen. Sie können jedoch mit dem Parameter *--nameservers* eine eigene Liste von Nameservern festlegen:

    # ./dnschef.py --nameservers 4.2.2.1,4.2.2.2 -q
    [*] DNSChef started on interface: 127.0.0.1 
    [*] Using the following nameservers: 4.2.2.1, 4.2.2.2
    [*] No parameters were specified. Running in full proxy mode
    [00:55:08] 127.0.0.1: proxying the response of type 'A' for thesprawl.org

Es ist möglich, einen nicht standardmäßigen Nameserver-Port mithilfe der IP#PORT-Notation anzugeben:

    # ./dnschef.py --nameservers 192.0.2.2#5353 -q
    [*] DNSChef started on interface: 127.0.0.1 
    [*] Using the following nameservers: 192.0.2.2#5353
    [*] No parameters were specified. Running in full proxy mode
    [02:03:12] 127.0.0.1: proxying the response of type 'A' for thesprawl.org

Gleichzeitig ist es möglich, DNSChef selbst über den Parameter `-p port#` auf einem alternativen Port zu starten:

    # ./dnschef.py -p 5353 -q
    [*] Listening on an alternative port 5353
    [*] DNSChef started on interface: 127.0.0.1 
    [*] Using the following nameservers: 8.8.8.8
    [*] No parameters were specified. Running in full proxy mode

Das DNS-Protokoll kann über UDP (Standard) oder TCP verwendet werden. DNSChef implementiert einen TCP-Modus, der mit dem Flag `--tcp` aktiviert werden kann.
Tool herunterladen
RecordBeschreibungArgumentBeispiel
AIPv4-Adresse--fakeip--fakeip 192.0.2.1
AAAAIPv6-Adresse--fakeipv6--fakeipv6 2001:db8::1
MXMailserver--fakemail--fakemail mail.fake.com
CNAMECNAME-Eintrag--fakealias--fakealias www.fake.com
NSNameserver--fakens--fakens ns.fake.com