Telnet è un protocollo facente parte del TCP/IP, il quale fornisce servizi di connessione a terminali in remoto, in questo articolo descriverò la procedura ed i comandi necessari per inviare messaggi di posta elettronica utilizzando Telnet, per fare questo, utilizzeremmo un piccolo programma incluso nella maggior parte delle versioni di Windows che consente all'utente di connettersi ed interagire con un sistema remoto tramite linea di comando. Il piccolo programma che andremmo a utilizzare è Telnet.exe, più comunemente chiamato Telnet.
Il protocollo Telnet e un protocollo di login remoto di tipo client-server, che permette ad un utente attestato ad una certa macchina di stabilire una connessione TCP con un server remoto, la porta di default che utilizza è la numero 23.
La procedura ed i comandi da utilizzare:
L'invio dei messaggi di posta elettronica avviene generalmente tramite un server SMTP (Simple Mail Transfer Protocol) con il quale si comunica attraverso la porta 25 (quella riservata appunto al protocollo SMTP).
Il server SMTP è quindi il sistema remoto a cui andremmo a connetterci e ad interagire tramite Telnet; il server dovrà essere logicamente quello del nostro provider Internet (server della Tiscali se utilizziamo una connessione a Tiscali, server di Tin.it se utilizziamo una connessione Tin.it, ecc.). A seconda del provider, il nome (hostname) del server ovviamente varia: lo potete reperire sui settaggi del Server di posta in uscita del vostro eventuale client di posta elettronica (Outlook Express, Foxmail, Thunderbird, ecc.) oppure dalle informazioni fornitevi all'atto della sottoscrizione del vostro abbonamento Internet.
Per lanciare Telnet, basta scegliere Start>Esegui e digitare: Telnet e cliccare OK. Si aprirà il prompt dei comandi con Telnet pronto a ricevere comandi.
A questo punto dobbiamo connetterci al server SMTP. Il comando che in Telnet avvia una connessione ad un sistema remoto è:
open hostname port
dove hostname nel nostro caso rappresenta il nome del server SMTP e port la porta attraverso la quale comunicheremo con il server,cioè la 25. Occorre specificare sempre la porta qualora sia diversa dalla 23 poiché è quella utilizzata di default da Telnet per le connessioni.
Se ad esempio vogliamo utilizzare il server SMTP della Tiscali, dovremo digitare la riga:
open smtp.tiscali.it 25 seguita dalla pressione del tasto Invio.
Possiamo anche connetterci più velocemente al server senza dover prima lanciare
Telnet: basta digitare da
Start>Esegui, telnet open smtp.tiscali.it 25
quindi premere OK.
La scorciatoia funziona con qualsiasi sistema remoto. E' ovvio che per il buon fine dell'operazione deve essere attiva una connessione ad Internet e deve essere consentito (in caso di presenza di un firewall) il tentativo di accesso alla Rete da parte di Telnet.
Una volta connessi, il server risponderà con un messaggio di benvenuto e con la versione del suo software:
i comandi da utilizzare, a questo punto, sono praticamente gli stessi per tutti i server. Da notare che ad ogni comando inviato il server risponde con un codice e la relativa descrizione. Queste ultime possono leggermente variare a seconda del server, mentre i codici sono gli stessi.
Per il momento, sappiate che i codici di riposta "positiva" sono 220 e 250 ; descriverò più avanti i codici che rappresentano invece un errore.
A questo punto, possiamo iniziare ad inviare i comandi necessari per spedire l'e-mail. Per prima cosa è necessario "presentarsi" con il comando helo. In genere i client di posta indicano il nome host del computer mittente, ma potete anche mettere il vostro nome o quello che volete (ricordo che alla fine di ogni comando deve essere premuto il tasto Invio):
helo Mario Rossi
la stringa dopo helo verrà inserita nell'header del messaggio, accanto all'indirizzo IP mittente.
Dobbiamo ora indicare al server l'indirizzo e-mail mittente (il nostro), che verrà utilizzato dal destinatario in caso voglia risponderci (reply). Il comando da utilizzare è
mail from, con la seguente sintassi:
mail from:mario.rossi@internet.it
a questo comando deve seguire quello che indica l'indirizzo del destinatario del messaggio, che è rcpt to:
rcpt to:carlo.bianchi@internet.it
è necessario porre molta attenzione a scrivere l'indirizzo del destinatario in maniera corretta pena il mancato recapito dell'e-mail. E' inoltre possibile specificare più destinatari ripetendo il comando rcpt to.
rcpt to:carlo.bianchi@internet.it
rcpt to:vittorio.bianchi@internet.it
A questo punto, possiamo informare il server che siamo pronti a scrivere gli headers ed il corpo (body) del messaggio. Utilizziamo a tale scopo il comando data
data
senza aggiungere altre informazioni. Il server ci risponderà con il codice
354
invitandoci ad iniziare a scrivere le informazioni.
Anche in questo caso, ogni riga dovrà essere seguita dalla pressione del tasto Invio; a differenza di prima, però, il server non risponderà ad ogni linea inviata poiché il comando data lo istruisce sul fatto che stiamo scrivendo una serie di informazioni (per l'appunto gli headers ed il testo del messaggio).
Per iniziare, inseriamo i campi:
From: (che rappresentano le informazioni sul mittente) e
To: (le informazioni sul destinatario):
From: "Mario Rossi" <mario.rossi@internet.it>
To: "Carlo Bianchi" carlo.bianchi@internet.it
queste informazioni sono quelle che compariranno nella barra di anteprima del client di posta del destinatario (di seguito l'esempio di come si vedrebbe in Outlook Express):
a questo punto, possiamo inserire l'oggetto del nostro messaggio, in questo modo:
Subject: Messaggio per Carlo Bianchi
se vogliamo, possiamo anche impostare la priorità del messaggio, mediante le righe
X-Priority: 3 (Normal)
X-MSMail-Priority: Normal
se vogliamo dare al messaggio priorità normale (che viene anche data di default se non vengono specificate queste righe). Se riteniamo che il messaggio debba avere invece priorità alta, le righe da inserire sono:
X-Priority: 1 (Highest)
X-MSMail-Priority: High
mentre, per dare al messaggio priorità bassa, dovremo inviare le righe
X-Priority: 5 (Lowest)
X-MSMail-Priority: Low
Ci sono poi altri campi che è possibile inserire, ma tralascio perché in loro assenza il server SMTP provvede ad aggiungerli automaticamente (come la data e l'ora di invio del messaggio) o perché non sono importanti.
Possiamo ora inserire il testo vero e proprio del messaggio. Innanzitutto occorre istruire il server sul fatto che abbiamo concluso l'inserimento degli headers e ci accingiamo a scrivere il testo: questo lo si fa inserendo un invio a vuoto, a cui deve fare seguito il testo:
> Invio a vuoto
Gentile Carlo Bianchi,
le scrivo per ...
...
...
Distinti saluti.
adesso dobbiamo informare il server che abbiamo concluso la scrittura del testo: il comando preposto a questa azione è il punto (.), sempre seguito da Invio:
.
dopo questo comando, il server riterrà conclusa la e-mail e procederà alla suo recapito, rispondendo all'utente che ha accettato il messaggio mediante il codice 250.
L'ultima cosa che ci rimane da fare ora è chiudere la connessione con il server, mediante il comando quit:
quit
Telnet risponderà con il messaggio: Connessione al host perduta.
Nota importante: Telnet non permette di correggere eventuali errori di battitura da tastiera. L'uso dei tasti Backspace o Canc infatti non ha alcun effetto, per cui:
• se avete digitato in maniera errata un'informazione, vi conviene disconnettervi dal server con il comando quit e ricominciare daccapo;
• se invece avete sbagliato a digitare un comando, vi conviene dare Invio; in tal modo
il server risponderà che ha ricevuto un comando a lui sconosciuto e potrete quindi digitarlo nuovamente in maniera corretta.
Ecco l'esempio di invio di un'e-mail con Telnet (gli indirizzi usati sono di pura fantasia):
Per concludere, come detto in precedenza fornisco una sommaria descrizione dei più comuni codici di errore che sono restituiti dai server SMTP in caso di problemi:
421 - server al momento troppo affollato
500 - comando sconosciuto
501 - sintassi di un comando errata
503 - non è stato specificato l'indirizzo e-mail del mittente o del destinatario
504 - estensioni di un comando non valide
550 - relay non consentito verso l'indirizzo e-mail del destinatario (succede se non si è connessi al server del proprio provider Internet)
553 - indirizzo e-mail del mittente o del destinatario digitato in forma errata
Supponiamo di voler, per un motivo qualsiasi, inviare una e-mail a qualcuno
facendo sembrare che essa sia stata mandata da qualcun altro. Il metodo piu` semplice e` utilizzare uno dei siti per hackers che offrono la possibilità` di inviare FakeMail (basta cercare questa parola in un motore di ricerca su Internet, ad esempio
www.yahoo.com ha una sezione apposita per FakeMail e posta anonima). Ma per ora tralasciamo i siti e vediamo in pratica come funziona la tecnica delle FakeMail (che tra l'altro e` applicabile, in modo diverso, anche alle news).
Il motivo per cui la studieremo e` che provandone il funzionamento, ne
approfitteremo per imparare ad utilizzare Telnet e soprattutto SMTP, ovvero
il servizio della posta in uscita.
Questa e` infatti la base per capire come funzionano molte delle tecniche
piu` utilizzate, e vi permetterà, quando sarete padroni della materia, di
implementarne di nuove.
Iniziamo dunque imparando ad usare Telnet.
Usandolo per collegarvi a un sito semplicemente inserendo un host name, vi
collegherete al servizio Telnet. Ma abbiamo detto che non e` questo il
nostro obiettivo. A noi interessa il servizio SMTP. Dunque, come fare per
accedervi?
Bisognera` inserire, oltre all'indirizzo del server a cui vogliamo
collegarci, anche un numero di "porta". Ma cos'e` una porta?
Se riflettete, ogni server ha un unico indirizzo "centrale" (nome.com) ma
gestisce molti servizi (web, ftp, posta...). Di conseguenza dovrebbe avere
altrettanti server su altrettanti indirizzi diversi.
Per evitare un proliferare di indirizzi inutili esistono le porte, in pratica
nient'altro numeri a cui sono associati i vari servizi.
Vogliamo collegarci a SMTP? Basta utilizzare la porta 25. Ci interessano
le news? La porta e` 119. Oppure FTP, porta 21... sono tutti numeri "fissi"
(standard) e quindi, tranne in rarissimi casi, collegandosi - per esempio -
alla porta 25 ci risponderà sempre SMTP.
NOTA: se avete Winsock potete leggere il file "services", contenente i numeri
delle porte più usate. Il file si troverà nella directory di Winsock.
Ora che abbiamo chiarito il discorso delle porte, supponiamo di volerci
collegare a SMTP usando Telnet. Scegliamo un server qualsiasi (sono davvero
rari i casi in cui un server non gestisca la posta) e, in base al programma
usato, dovremmo operare differentemente.
La maggior parte di essi funziona in questo modo: per collegarsi a SMTP del
server prova.it bisogna inserire prova.it:25 come nome del server.
Alcuni invece non prevedono l'uso dei due punti per delimitare nome e porta,
ma hanno uno spazio in cui inserire, separatamente, il numero o il nome del
servizio.
Dunque, una volta connessi a prova.it:25 avremo un messaggio di questo tipo:
220 prova.it Sendmail x.x/x.x 11/11/97 ready at Mon, 30 Oct 97 06:22:19 –0200
e niente altro. Il server sta ora aspettando comandi da parte nostra.
La prima cosa da fare e` identificarsi, e cio` va fatto con il comando HELO
in questo modo:
HELO nomeprovider.it
sostituendo nomeprovider.it con il nome del nostro provider.
NOTA: usando Telnet *NON* e` possibile cancellare. Quindi digitate senza
fretta, e se proprio sbagliate riavviate la connessione e ripetete tutto,
oppure - in alcuni casi - può essere sufficiente premere invio e riscrivere
la riga da zero. Non cancellate, anche se sembra funzionare. I risultati
possono essere imprevedibili e potreste rivelare la vostra identità.
Talvolta e` possibile inserire un nome falso, ma i nuovi server conoscono
gia` il vostro IP Address quando vi collegate, quindi tanto vale inserire il
vero nome.
La risposta sarà:
250 prova.it Hello NOMEPROVIDER.IT, pleased to meet you
A questo punto dovremo dire al server qual'e` il nostro indirizzo di e-mail.
Usiamo allo scopo il comando "MAIL FROM" e digitiamo:
MAIL FROM:
...ovviamente l'indirizzo da inserire e` quello falso =)
Il server risponderà con un messaggio. Se avremo sbagliato qualcosa, sara`
un messaggio d'errore, e dovremo ripetere l'immissione.
A questo punto dobbiamo scegliere la nostra "vittima", che supponiamo essere
vittima@lamer.it. Usiamo il comando "RCPT TO" e scriviamo:
RCPT TO:
Il server risponderà con un altro messaggio.
Ed ora che abbiamo definito sorgente e destinazione passiamo all'invio delle
intestazioni e del corpo del messaggio.
Avvisiamo il server che siamo pronti, scrivendo:
DATA
e il server ci dirà di scrivere il messaggio e di concludere con un punto
su una riga vuota.
Fermiamoci un attimo. In ogni e-mail esistono delle intestazioni (headers)
che si trovano prima del corpo del messaggio vero e proprio. Il loro scopo
è elencare tutti i computer attraverso i quali e` passato il messaggio,
nonchè il nostro IP Address! Cio` potrebbe rivelare la nostra identità a
un hacker o a un SysAdmin esperto. Per evitarlo, digitiamo:
Received: by nomeprovider.it id AA11212 with SMTP; Sun, 12 Oct 97 13:40:58
dove nomeprovider.it e` il nome del vostro provider (quello che avete usato
con HELO) e l'ultima parte (Sun, 12 Oct...) e` la data in formato standard.
ID AA11212 va cambiato. Potete mettere un numero qualsiasi (possibilmente
che inizi con AA1 più altre 4 cifre, per farlo sembrare più reale).
Si tratta solo di un numero di serie del server, niente di importante.
Ora dobbiamo digitare:
Message-ID: <123.AA11345@microsoft.com>
Cio` serve a far credere che il messaggio sia partito effettivamente dal
server "microsoft.com" con l'ID AA11345 (puo` essere un numero qualsiasi,
purche` NON uguale a quello inserito prima con l'intestazione "Received:").
Inseriamo ora di nuovo il destinatario, la data e il soggetto della e-mail:
To:
Date: Sun, 12 Oct 97 11:30:27
Subject: questa e` una prova...
Lasciamo uno spazio e scriviamo il messaggio che vogliamo inviare (lungo
quanto vogliamo). Per concludere il messaggio lasciamo due righe vuote,
digitiamo un punto, premiamo invio, scriviamo QUIT e invio.
La FakeMail verrà inviata automaticamente dal server, e noi possiamo anche
chiudere Telnet.
E` importante inviare a se stessi dei messaggi di prova per vedere se il
server scelto ha ricevuto i dati correttamente, se non sono stati commessi
errori e, soprattutto, per vedere se il proprio IP Address si trova in
mezzo alle intestazioni "Received:", oppure (sbagliato) alla fine.
Ora che sappiamo come fare ad inviare una FakeMail, possiamo passare al
passo successivo: usare le FakeMail per far danni... vogliamo seppellire
la mailbox di qualcuno?
Creiamo una normale FakeMail con il metodo spiegato sopra, ma come mittente
dovremo inserire l'indirizzo e-mail della vittima e come destinatario usiamo
un "listserv" (come ad esempio listserv@brownvm.brown.edu).
Un listserv e` un programma che invia programmi tramite e-mail nel caso non
si riesca a prelevarlo via FTP.
Se ad esempio sappiamo che nella directory "mieifiles" del server pluto.it
c'è un file di 20 megabyte il cui nome è "enorme.zip" possiamo fare in modo
che quei 20 Mb vengano inviati sotto forma di testo nella e-mail della
nostra vittima...
Nell'esempio di cui sopra, dopo aver scritto i primi comandi della FakeMail,
arrivati a "Subject:" scriviamo quanto segue:
REPLY vittima@lamer.it
CONNECT pluto.it anonymous indirizzo@falso.com
BINARY
GET mieifiles/enorme.gz
QUIT
e concludiamo quindi con le due righe vuote, il punto, QUIT, ecc.
Ecco la spiegazione passo passo:
REPLY indica l'indirizzo e-mail a cui rispondere
CONNECT specifica il nome del provider a cui collegarsi e l'account da usare
BINARY specifica un file di tipo binario (non va cambiato)
GET specifica il nome del file da prelevare (completo di eventuali directory)
QUIT termina la connessione
Ovviamente, se dopo GET anziche` QUIT usiamo altri GET, il risultato sara`
molto più dannoso. Nel caso di un file di 20 MB, riscrivendo altre 10
volte il comando "GET ..." verranno mandati un totale di ben 200 megabyte al
povero utente destinatario!
E siccome i server di e-mail spezzano i messaggi in tanti piccoli messaggi,
la vittima riceverebbe migliaia e migliaia di messaggi...
E` un buon motivo per non dare in giro il proprio indirizzo e-mail, no?
Arrivederci al prossimo articolo
Michele Balzano