mercoledì 2 settembre 2009

Guida a netcat: il "coltellino svizzero della rete"

Per chiunque si sia addentrato nel mondo del networking, è impossibile non essersi imbattuto in netcat.
Questo piccolo programmino permette di fare veramente tante cose, ma se proprio volessimo darne una definizine, si può dire che è una utility che legge e scrive dati utilizzando connessioni tcp/ip.


Con esso è possibile :
  • Aprire o leggere connessioni sia tcp o udp su o da qualsiasi porta.
  • Effettuare delle connessione in "tunnel mode".
  • Effettuare delle scansioni sulle porte, anche in modalità random.
  • Uso vanzato con l'invio in modalità buffer (per esempio inviare una riga ogni N secondi conservando i dati da inviare in un buffer) e un hexdump dei dati trasmessi o ricevuti da reindirizzare eventualente su un file.



Guida di base a netcat

Lanciando il comando "nc -[opzioni]" è possibile eseguire una molteplicità di azioni.
Esistono due modalità fondamentali per netcat: "Connection Mode" e "Listen Mode" anche se è possibile fare molte alte cose:

Connect Mode

In modalità connect Netcat  agirà in modalità client, connettendosi ad un server remoto ed inviandogli dei dati e leggendo i dati ricevuti dal server.
Come esempio immaginatevi il programma telnet, una volta connessi al server tramite telnet, tutto quello che scrivete con la tastiera nella shell verrà inviato in remoto, il risultato cioè quello che da remoto arriva a sua volta verrà sempre visualizzato nella vostra shell.

L'uso comune è:
netcat [opzioni] hostname porte ... 
Il parametro "porte" indica tutte le porte alle quali connettersi. Durante il funzionamento netcat si collegherà alle porte in modo sequenziale ( o volendo anche casuale specificando l'opzione -r) ma non sarà possibile utilizzare più di una porta alla volta.


Listen Mode
In modalità "listen" netcat rimane in ascolto su di una porta, specificata con l'opzione '-p' fino a che qualche client da remoto ci si connette (il client potrebbe essere anche in locale). A questo punto il suo comportamento è identico a quello in modalità "connect", cioè ci sara un collegamento tra client e server.

Il comando si usa così:
netcat -l -p porta [nome_pc_remoto] [Porte_sul_pc_remoto] ...  
L'opzione fondamentale è "-l" che impone il comportaemnto di ascolto. Le altre opzioni , [nome_pc_remoto] [Porte_sul_pc_remoto], indicano quale nome deve avere il pc remoto dal quale accettare al connessione e su quali porte sorgenti deve usare per avere il permesso di connettersi. Solitamente questi parametri non vengono specificati, ma se voleste selezionare i clients con queste opzioni potrete farlo.
Attenzione che a differenza di telnet o ssh o simili.. netcat non ha metodi di autorizzazione, cioè niente user o password, quindi attenzione a come viene usato, perchè una volta in ascolto su di una porta chiunque potrebbe eventualmente connettersi.

Opzioni

Opzioni di base
'-V' o '--version' Mostrala versione di netcat e termina il programma.
'-h' o '--help' Stampa un messaggio di aiuto con le più comuni comandi di netcat
'-v' o '--verbose' Stampa dei messaggi di controllo. Solitamente vengono inviati nello stderr. Con '-vv' si avranno ancora più informazioni

Esempi
Il più semplice e primitivo uso di netcat è quello di un semplicissima situazione server-client.
Creo sul pc1 (che ha come indirizzo ip 192.168.0.1) un server in ascolto sulla porta 3333 digitando il comando:
nc -l 3333 Nel pc2 invece eseguo il seguente comando:
nc 192.168.0.1 3333
con il quale mi connetto tramite netcat al pc1 sulla sua porta 3333.
A questo punto tutto quello che scrivo nella console del pc1 verrà trasferito al pc2 e viceversa, dato che stdin e sdtout,cioè lo standard input di uno è connesso all standard output dell'altro.

Terminale remoto
Per attivare un terminale remoto senza utilizzare telnet o ssh è sufficiente lanciare lato server netcat in modalita LISTEN:
nc -l -p 4000 -e /bin/sh
Per connettervi dal client invece è sufficiente invece il comando:
nc  4000
Dove è l’indirizzo IP del server.
Sotto windows un classico esempio di backdoor potrebbe essere:
nc -l -p 23 -t -e cmd.exe
cioè avvio un server nel pc remoto che rimane in ascolto sulla porta 23 e appena io dal mio pc mi ci colelgo la prima cosa che fa è avviare una shell o meglio una console DOS dalla quale poter eseguire i vari comandi sul server remoto.

Port Scanning
Per effettuare un port scan con netcat al fine di verificare le porte aperte di un certo server remoto è sufficiente lanciare il comando:
#test di due porte specifiche (80 e 21)
nc -v -z www.kernel.org 80 21
#test di un range di porte (dalla 21 alla 23)
nc -v -z www.kernel.org 21-23
File transfer
Netcat si presta benissimo anche al trasferimento files via rete: la configurazione da utilizzare è simile a quella utilizzata per il terminale remoto. Supponendo che il nome del file da trasferire sia “miofile.txt“, posizionatevi nella directory in cui si trova e lanciate netcat come segue:
cat miofile.txt| nc -l -p 4000
Il netcat server appena creato si metterà all'ascolto sulla porta 4000 in attesa di un client.
Per avviare il download lato client invece lanciate il comando:
nc   4000 > miofile.txt
Dove è l’indirizzo IP del server su cui si trova il file da scaricare, appena connesso infatti il server incomincerà a traferire i dati al client, dopo di che terminerà la connessione.
Se volessimo trasferire un file un po più grande, come ad esempio una immagine iso e volessimo sapere lo stato di avanzamento potremo usare l'utility "pv", che ci terrebbe informati dei byte inviati e ricevuti fino alla fine del trasferimento:
cat backup.iso | pv -b | nc -l 3333
per inviare il file
nc 192.168.0.1 3333 | pv -b > backup.iso
per ricevere il file.

HTTP Server
Ecco come attivare un semplice HTTP Server in ascolo sulla porta 8080. L’opzione “-l ” avvia netcat in modalità LISTEN e l’opzione “-c” specifica il comando da lanciare ogni volta che viene stabilita una connessione. Creo un piccolo script che con pochi comandi crea il mio piccolo http server:
#!/bin/bash
handle_req()
{
read req file proto
echo -e "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"
echo -e "hello word"
}
typeset -fx handle_req
nc -l -p 8080 -c handle_req
Anonimizzare Netcat
Installando anche il pacchetto “tor” avrete a disposizione il comando “torify” che vi consentira di anonimizzare tutto il traffico generato con Netcat (funzione sicuramente gradita agli appassionati di hacking ;-) ). Di seguito un esempio di utilizzo:
echo -e "GET /iponly/ HTTP/1.0\r\n" | torify nc ipid.shat.net 80
Questo comando visualizzerà l’IP address del server anonimo verso cui vi avrà dirottato il comando “torify”.

Dove trovare questo programma
Netcat esiste sia per linux o unix che per windows, completo di sorgenti.
Per la versione linux potete controllare la revisione più aggiornata qui: Linux netcat
Per windows cliccate qui

|Via|



0 commenti:

Posta un commento