
Verschlüsselter Command-and-Control-Tunnel über DNS-Protokoll. Erstellt verdeckte C&C-Kanäle für Penetrationstests, mit Dateiübertragung, Shell-Zugriff und Portweiterleitungsfunktionen durch DNS-Abfragen.
***** HINWEIS: Die Passwörter für die .zip-Downloads sind alle "password"! *****
Willkommen zu dnscat2, einem DNS-Tunnel, der dich NICHT krank macht und umbringt!
Dieses Tool wurde entwickelt, um einen verschlüsselten Command-and-Control (C&C)-Kanal über das DNS-Protokoll zu erstellen, einen effektiven Tunnel aus fast jedem Netzwerk.
Diese README-Datei sollte alles enthalten, was du brauchst, um loszulegen! Wenn du tiefer in das Protokoll, die Code-Struktur, zukünftige Pläne oder andere esoterische Dinge eintauchen möchtest, schau dir den Ordner doc/ an.
Dies wird unter der BSD-Lizenz veröffentlicht. Weitere Informationen findest du in LICENSE.md.
dnscat2 besteht aus zwei Teilen: dem Client und dem Server.
Der Client ist für die Ausführung auf einem kompromittierten Rechner konzipiert. Er ist in C geschrieben und hat die minimal möglichen Abhängigkeiten. Er sollte so ziemlich überall laufen (falls du ein System findest, auf dem er nicht kompiliert oder läuft, erstelle bitte ein Ticket, insbesondere wenn du mir helfen kannst, Zugang zu diesem System zu bekommen).
Wenn du den Client ausführst, gibst du normalerweise einen Domainnamen an. Alle Anfragen werden an den lokalen DNS-Server gesendet, der sie dann an den autoritativen DNS-Server für diese Domain weiterleitet (den du vermutlich kontrollierst).
Wenn du keinen autoritativen DNS-Server hast, kannst du auch direkte Verbindungen über UDP/53 (oder einen anderen Port) verwenden. Sie sind schneller und sehen für den oberflächlichen Betrachter immer noch wie DNS-Verkehr aus, sind aber in einem Paketprotokoll viel offensichtlicher (alle Domains werden mit "dnscat." präfixiert, sofern du den Quellcode nicht hackst). Dieser Modus wird häufig von Firewalls blockiert.
Der Server ist für die Ausführung auf einem autoritativen DNS-Server konzipiert. Er ist in Ruby geschrieben und hängt von mehreren verschiedenen Gems ab. Wenn du ihn ausführst, gibst du – ähnlich wie beim Client – an, auf welche Domain(s) er hören soll, zusätzlich zum Lauschen auf direkt an ihn gesendete Nachrichten über UDP/53. Wenn er Verkehr für eine dieser Domains empfängt, versucht er, eine logische Verbindung herzustellen. Wenn er anderen Verkehr empfängt, ignoriert er ihn standardmäßig, kann ihn aber auch nachgelagert weiterleiten.
Detaillierte Anleitungen für beide Teile folgen weiter unten.
dnscat2 strebt danach, sich von anderen DNS-Tunnelprotokollen zu unterscheiden, indem es für einen besonderen Zweck entwickelt wurde: Command and Control.
Dies ist nicht dafür gedacht, dich aus einem Hotelnetzwerk zu befreien oder kostenloses Internet im Flugzeug zu bekommen. Und es tunnelt nicht einfach TCP.
Es kann beliebige Daten ohne angehängtes Protokoll tunneln. Das bedeutet, es kann Dateien hoch- und herunterladen, eine Shell ausführen – und das alles gut. Es kann möglicherweise auch TCP tunneln, aber das wird nur im Kontext eines Penetration-Testing-Tools hinzugefügt (d.h. TCP in ein Netzwerk tunneln), nicht als allgemeines Tunnelwerkzeug. Das wurde bereits gemacht und ist (für mich) nicht interessant.
Es ist außerdem standardmäßig verschlüsselt. Ich glaube nicht, dass ein anderer öffentlicher DNS-Tunnel den gesamten Verkehr verschlüsselt!
Hier sind einige wichtige Links:
Die Theorie hinter dnscat2 ist einfach: Es erstellt einen Tunnel über das DNS-Protokoll.
Warum? Weil DNS eine erstaunliche Eigenschaft hat: Es findet seinen Weg von Server zu Server, bis es herausfindet, wohin es gehen soll.
Das bedeutet, dass dnscat, um Verkehr aus einem sicheren Netzwerk zu bekommen, einfach Nachrichten an einen DNS-Server senden muss, der die Dinge dann fröhlich durch das DNS-Netzwerk weiterleitet, bis sie deinen DNS-Server erreichen.
Das setzt natürlich voraus, dass du Zugang zu einem autoritativen DNS-Server hast. dnscat2 unterstützt auch "direkte" Verbindungen – das heißt, einen dnscat-Client auszuführen, der sich direkt mit deinem dnscat auf deiner IP-Adresse und UDP-Port 53 (standardmäßig) verbindet. Der Verkehr sieht immer noch wie DNS-Verkehr aus und könnte dümmere IDS/IPS-Systeme überlisten, wird aber wahrscheinlich von Firewalls gestoppt.
Wenn du nicht genau weißt, wie du einen autoritativen DNS-Server einrichtest, musst du das mit einem Domain-Anbieter konfigurieren. izhan hat dir freundlicherweise eine Anleitung geschrieben!
Das Kompilieren des Clients sollte ziemlich einfach sein – alles, was du zum Kompilieren brauchst, ist make/gcc (für Linux) oder entweder Cygwin oder Microsoft Visual Studio (für Windows). Hier sind die Befehle unter Linux:
$ git clone https://github.com/iagox86/dnscat2.git
$ cd dnscat2/client/
$ make
Unter Windows lade client/win32/dnscat2.vcproj in Visual Studio und drücke "Build". Ich habe es mit Visual Studio 2008 erstellt und getestet – bis ich eine kostenlose legale Kopie einer neueren Version bekomme, werde ich wahrscheinlich dabei bleiben. :)
Falls die Kompilierung fehlschlägt, erstelle bitte einen Fehlerbericht auf meiner Github-Seite! Bitte sende Details zu deinem System.
Du kannst überprüfen, ob dnscat2 erfolgreich kompiliert wurde, indem du es ohne Flags ausführst; du wirst sehen, dass es versucht, einen DNS-Tunnel mit dem konfigurierten DNS-Server zu starten (was fehlschlagen wird):