Guida a Netcat
Transcript
Guida a Netcat
Guida a Netcat Scritto da Administrator Lunedì 08 Settembre 2008 07:59 - Ultimo aggiornamento Sabato 20 Agosto 2011 19:31 - Introduzione Guida base Opzioni Esempi Dove trovare netcat Introduzione 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 definizione, si può dire che è una utility che legge e scrive dati utilizzando connessioni tcp/ip. Può facilmente essere usato da programmi esterni o scripts, e allo stesso tempo essere uno strumento di debbuging e controllo per le connessioni. 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 avanzato 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 eventualmente su un file. Queste sono in breve alcune delle caratteristiche di questo programma, ma vediamo magari con qualche esempio cosa veramente potremo fare. Guida di base a netcat Lanciando il comando "nc -[opzioni]" è possibile eseguire una molteplicità di azioni. Esistono tre modalità fondamentali per netcat: " Connection mode "," Listen mode " e " Tunnel 1/9 Guida a Netcat Scritto da Administrator Lunedì 08 Settembre 2008 07:59 - Ultimo aggiornamento Sabato 20 Agosto 2011 19:31 mode ". Connect Mode In modalità connect, netcat si connette ad un host in remoto e semplicemente collega il suo stdi n e stdout al flusso dati spedito o ricevuto da remoto. Netcat quindi 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. Questo in modo semplificato significa "collegare stdin e stdout locale al flusso dati spedito o ricevuto da remoto". 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 sarà 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 comportamento di ascolto. Le altre opzioni , 2/9 Guida a Netcat Scritto da Administrator Lunedì 08 Settembre 2008 07:59 - Ultimo aggiornamento Sabato 20 Agosto 2011 19:31 [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. Tunnel mode Nelle modalità descritte fino ad ora è chiaro che i dati passeranno in chiaro attraverso la rete. Questo è accettabile in una rete locale, mentre risulta un problema per la sicurezza se questi dati passato tramite internet senza alcuna criptazione. Sarebbe quindi saggio usare un tunnel SSH in modo da criptare i dati trasmessi. Usando un tunnel SSH si hanno due vantaggi: 1. I dati sono trasferiti dentro un tunnel criptato, in questo modo saranno ben protetti. 2. Non si avrà il bisogno di mantenere nessuna porta aperta nel firewall della macchina che agisce da server, dato che tutte le connessioni passeranno nel tunnel SSH. Per fare questo riverseremo il file in una connessione in ascolto sul server con le stesse modalità viste fino ad ora. E' scontato dire che sulla macchina che agisce da server sia presente un processo server SSH. Eseguiremo il seguente comando: $ cat backup.iso | nc -l 3333 Sulla macchina client che andrà a connettersi alla connessione in "listening" sulla macchina server attraverso un tunnel SSH : $ ssh -f -L 23333:127.0.0.1:3333 [email protected] sleep 10; nc 127.0.0.1 23333 | pv -b > backup.iso Questo modo di creare ed usare un tunnel SSH ha il vantaggio che questo tunnel si chiuderà a utomaticamente 3/9 Guida a Netcat Scritto da Administrator Lunedì 08 Settembre 2008 07:59 - Ultimo aggiornamento Sabato 20 Agosto 2011 19:31 dopo la fine del trasferimento del file. Il comando descritto qui sopra è per linux, ma, tranne il comando "pv" che serve solo a mostrare graficamente il trasferimento del file, è possibile usare una versione di ssh per windows (openSSH) che fa le stesse cose. Per maggiori chiarimenti leggere l'articolo sui tunnel SSH . 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 veng Opzioni di protocollo e inferfaccia '-t' o `--tcp' Imposta l'uso del protocollo TCP, che è anche quello predefinito. Questa opzione potrebbe ritornare mo '-u' '-p NUM' o`--udp' Imposta il protocollo UDP.(vedi opzione TCP) o `--local-port=NUM' Imposta la porta locale da utilizzare nella connessio '-s ADDRESS' ' o`--source=ADDRESS' Serve ad impostare l'indirizzo sorgente utilizzato nella -P NUM' o`--tunnel-port=NUM' E' come l'opzione "-p" ma h '-S ADDRESS' o `--tunnel-source=ADDRESS' Ha la stessa funzione dell'opzione "-s" ma ha effetto Opzioni avanzate '-i SECS' o '--interval SECS' Imposta il tempo di ritardo bufferizzato sul buffer in uscita. Questo quindiha conservato effetto sulle perconnessioni poi essere presenti usato nella e faconnessi in modo '-n' o '--dont-resolve' Impone di non usare il controllo DNS su di uno spec '-r' o '--randomize' Rende casuali le porte sul destinatario della connes 4/9 Guida a Netcat Scritto da Administrator Lunedì 08 Settembre 2008 07:59 - Ultimo aggiornamento Sabato 20 Agosto 2011 19:31 '-w' o '--wait=SECS' Imposta il tempo di inattività timeout dopo il quale netcat cio sar '-T' '-z' o `--telnet' o '--zero' Risposte e domande sulla codifica telnet possono e Imposta a zero il flag di I/O. In modalità connessione Altre opzioni '-c' Con questa opzione si dice hostname a netcat di eseguire port un comando in remoto subito " in cuidopo dicoladiconnessione eseguire lo comman script ed in '-l' L'opzione "-l" impone a netcat di rimanere in ascolto su una porta specificata in seguito con l'opzione "'-q NUM' In questo modo la connessione filenamecreata con netcat| terminerà netcat un numero di hostname secondi(NUM) dopo la1234 fine d '-e' Esegue un programma dopo essersi connesso vedi l'opzione "-c" (alcune differenze sono dovute alla v '-b' Permette il traffico broadcast '-g gateway' Source-routing gateway '-G num' Source-routing pointer: 4, 8, 12, ... '-r' Fa diventare casuale porte locali o remote '-d' Stealth mode, non viene più visualizzato dalla console (windows) '-o file' Imposta il file ini cui verrà riversato l'output 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 5/9 Guida a Netcat Scritto da Administrator Lunedì 08 Settembre 2008 07:59 - Ultimo aggiornamento Sabato 20 Agosto 2011 19:31 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 allo standard output dell'altro. Terminale remoto Per attivare un terminale remoto senza utilizzare telnet o ssh è sufficiente lanciare lato server netcat in modalità LISTEN: nc -l -p 4000 -e /bin/sh Per connettervi dal client invece è sufficiente invece il comando: nc <host> 4000 Dove <host> è 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 collego la prima cosa che fa è avviare una shell o meglio una console DOS dalla quale 6/9 Guida a Netcat Scritto da Administrator Lunedì 08 Settembre 2008 07:59 - Ultimo aggiornamento Sabato 20 Agosto 2011 19:31 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 <host> 4000 > miofile.txt Dove <host> è 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: 7/9 Guida a Netcat Scritto da Administrator Lunedì 08 Settembre 2008 07:59 - Ultimo aggiornamento Sabato 20 Agosto 2011 19:31 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 ascolto 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 OKrnContent-Type: text/htmlrnrn" echo -e "<html><h1>Hello World</h1></html>" } typeset -fx handle_req nc -l -p 8080 -c handle_req HTTP Client L’esempio che segue vi permetterà di visualizzare l’ultima versione del kernel di linux presa direttamente dal sito kernel.org: echo -e "GET /kdist/finger_banner HTTP/1.0rn" | nc www.kernel.org 80 | grep latest Anonimizzare Netcat Installando anche il pacchetto “tor” avrete a disposizione il comando “torify” che vi consentirà di anonimizzare tutto il traffico generato con Netcat (funzione sicuramente gradita agli appassionati di hacking ). Di seguito un esempio di utilizzo: 8/9 Guida a Netcat Scritto da Administrator Lunedì 08 Settembre 2008 07:59 - Ultimo aggiornamento Sabato 20 Agosto 2011 19:31 echo -e "GET /iponly/ HTTP/1.0rn" | torify nc ipid.shat.net 80 Questo comando visualizzerà l’IP address del server anonimo verso cui vi avrà dirottato il comando “torify”. Catturare una pagina web Se volessimo catturare l'output di una pagina web di un determinato sito: nc -v www.website.com 80 e scrivere nella console il comando "GET / HTTP/1.0" e mandando qualche "invio" come risposta il webserver ci trasmetterà la pagina che abbiamo richiesto. Per eseguire la cosa in automatico scrivere in un file di testo "GET / HTTP/1.0" poi darlo in pasto a netcat: nc -v www.website.com 80 < get.txt 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 oppure scaricarla dall'allegato qua sotto come anche la versione per windows. Delle varianti del programma sono" socat " e " SslNetcat ", e sia per linux che per windows anche " Cryptcat " dove il programma funziona esattamente come netcat ma con la quale potremo inviare i dati criptati. 9/9