
Tunnel de commande et contrôle chiffré via le protocole DNS. Crée des canaux C&C furtifs pour les tests d'intrusion, avec transfert de fichiers, accès shell et capacités de redirection de ports via des requêtes DNS.
***** REMARQUE : Les mots de passe pour les téléchargements .zip sont tous "password" ! *****
Bienvenue sur dnscat2, un tunnel DNS qui NE vous rendra PAS malade et ne vous tuera pas !
Cet outil est conçu pour créer un canal de commande et contrôle (C&C) chiffré via le protocole DNS, qui constitue un tunnel efficace pour sortir de presque tous les réseaux.
Ce fichier README devrait contenir tout ce dont vous avez besoin pour démarrer ! Si vous souhaitez approfondir le protocole, la structure du code, les projets futurs ou d'autres sujets ésotériques, consultez le dossier doc/.
Ceci est publié sous la licence BSD. Voir LICENSE.md pour plus d'informations.
dnscat2 se compose de deux parties : le client et le serveur.
Le client est conçu pour être exécuté sur une machine compromise. Il est écrit en C et a le moins de dépendances possible. Il devrait fonctionner pratiquement partout (si vous trouvez un système où il ne compile pas ou ne s'exécute pas, veuillez ouvrir un ticket, surtout si vous pouvez m'aider à accéder à ce système).
Lorsque vous exécutez le client, vous spécifiez généralement un nom de domaine. Toutes les requêtes seront envoyées au serveur DNS local, qui sont ensuite redirigées vers le serveur DNS faisant autorité pour ce domaine (que vous, présumément, contrôlez).
Si vous n'avez pas de serveur DNS faisant autorité, vous pouvez également utiliser des connexions directes sur UDP/53 (ou tout autre port de votre choix). Elles seront plus rapides, et ressembleront toujours à du trafic DNS pour l'observateur occasionnel, mais elles seront beaucoup plus évidentes dans un journal de paquets (tous les domaines sont préfixés par "dnscat.", sauf si vous modifiez le source). Ce mode sera fréquemment bloqué par les pare-feux.
Le serveur est conçu pour être exécuté sur un serveur DNS faisant autorité. Il est en Ruby, et dépend de plusieurs gems différentes. Lorsque vous l'exécutez, comme pour le client, vous spécifiez le(s) domaine(s) sur le(s)quel(s) il doit écouter en plus d'écouter les messages qui lui sont envoyés directement sur UDP/53. Lorsqu'il reçoit du trafic pour l'un de ces domaines, il tente d'établir une connexion logique. S'il reçoit d'autre trafic, il l'ignore par défaut, mais peut également le transférer en amont.
Des instructions détaillées pour les deux parties sont fournies ci-dessous.
dnscat2 s'efforce d'être différent des autres protocoles de tunneling DNS en étant conçu pour un objectif particulier : le commandement et contrôle.
Il n'est pas conçu pour vous faire sortir d'un réseau d'hôtel, ou pour obtenir un accès Internet gratuit dans un avion. Et il ne se contente pas de tunnelliser TCP.
Il peut tunnelliser n'importe quelles données, sans protocole attaché. Cela signifie qu'il peut télécharger et téléverser des fichiers, exécuter un shell, et le faire correctement. Il peut également potentiellement tunnelliser TCP, mais cela ne sera ajouté que dans le cadre d'un outil de test d'intrusion (c'est-à-dire, tunnelliser TCP dans un réseau), pas comme un outil de tunnellisation à usage général. Cela a déjà été fait, ce n'est pas intéressant (pour moi).
Il est également chiffré par défaut. Je ne crois pas qu'aucun autre tunnel DNS public chiffre tout le trafic !
Voici quelques liens importants :
La théorie derrière dnscat2 est simple : il crée un tunnel via le protocole DNS.
Pourquoi ? Parce que le DNS a une propriété étonnante : il va se déplacer de serveur en serveur jusqu'à ce qu'il trouve où il doit aller.
Cela signifie que pour que dnscat fasse sortir le trafic d'un réseau sécurisé, il lui suffit d'envoyer des messages à un serveur DNS, qui transférera joyeusement les choses à travers le réseau DNS jusqu'à ce qu'elles atteignent votre serveur DNS.
Cela suppose bien sûr que vous ayez accès à un serveur DNS faisant autorité. dnscat2 supporte également les connexions "directes" - c'est-à-dire, exécuter un client dnscat qui se connecte directement à votre dnscat sur votre adresse IP et le port UDP 53 (par défaut). Le trafic ressemble toujours à du trafic DNS, et pourrait passer les systèmes IDS/IPS les plus simples, mais il est toujours susceptible d'être arrêté par les pare-feux.
Si vous ne comprenez pas comment configurer un serveur DNS faisant autorité, c'est quelque chose que vous devez configurer avec un fournisseur de domaine. izhan en a écrit un pour vous !
Compiler le client devrait être assez simple - tout ce dont vous avez besoin pour compiler est make/gcc (pour Linux) ou Cygwin ou Microsoft Visual Studio (pour Windows). Voici les commandes sur Linux :
$ git clone https://github.com/iagox86/dnscat2.git
$ cd dnscat2/client/
$ make
Sur Windows, chargez client/win32/dnscat2.vcproj dans Visual Studio et cliquez sur "build". Je l'ai créé et testé sur Visual Studio 2008 - jusqu'à ce que j'obtienne une copie légale gratuite d'une version plus récente, je vais probablement rester avec celle-là. :)
Si la compilation échoue, veuillez signaler un bug sur ma page github ! Veuillez envoyer des détails sur votre système.
Vous pouvez vérifier que dnscat2 est bien compilé en l'exécutant sans options ; vous verrez qu'il tente de démarrer un tunnel DNS avec le serveur DNS configuré (ce qui échouera) :