QUANDO ESIGENZA IMPONE...
(ovvero smtp auth login plain && base64 de/coder)
(ovvero smtp auth login plain && base64 de/coder)
"... In un vicolo di New York, dove il sole non batte neanche la domenica, ..."
Così esordivano le storie del famigerato GRUPPO TNT... ed è proprio in uno di quei racconti esilaranti che si riportava come titolo il motto sopra citato.... "quando esigenza impone", diventato forse per molti una regola di vita e lo spunto di questo articolo.
Molte più volte di quanto pensiamo necessitiamo di una VALIDA e SEMPLICE alternativa nel mondo informatico.
Da VI a CDRECORD, passando per SC, LYNX, ETTERCAP.... ;o)... eh eh eh. In buona sostanza non tutto è solamente grafica, anche perché più la cosa è complicata e più saranno complicati gli eventuali problemi correlati (Murphy docet).
Settimane fa entro a controllare la posta e oppsss! Il mio browser non mi fa leggere i messaggi a me arrivati, pur dandomi notizia di avere in casella alcune nuove missive. Praticamente un errore del server del servizio di posta, che non citerò qui, mi causava l'inconveniente, mentre mio figlio poteva tranquillamente leggere, dalla mia stessa macchina, la sua posta sul sito del mio stesso operatore. Ed eccoci al dunque... Cosa fare?
Per fortuna che avevo attivato in precedenza l'opzione SMTP e POP per poter leggere da telnet le mie mail. Altro oppsss!!! Mi si chiede un'autenticazione anche nel servizio SMTP... Ma come procedere?
Facciamo un passo indietro all'articolo di Sandro a riguardo di TELNET del 09 ott 2003, andatevelo a leggere perché è la base di ciò che verrà descritto dopo. Il buon kensan vi fa notare che con una sessione telnet su SMTP, si può fare una fake-mail. Ed è per questo che un riconoscimento era d'obbligo imporlo.
Eggià... ormai tutti i servizi di posta hanno posto delle limitazioni. Chi semplicemente rimandandovi al vostro ISP, Internet Service Provider, per poter usufruire di SMTP, quindi scaricando a lui il fardello dell'eventuale spammer, chi utilizzando un normale controllo sull'utenza basato su login e password. Noi esamineremo questo caso e quindi andiamo a vedere come autenticarci tramite una sessione Telnet.
Questa procedura, ora, nel mio caso è con il protocollo AUTH LOGIN PLAIN.
Prima di effettuare la connessione telnet dobbiamo trasformare la nostra USERID e la relativa PASSWORD in base64. O cavoli con carta e penna?! Ma nooo.... in rete trovate un sacco di applicazioni web-based, in codice C o in altri linguaggi da voi preferiti. Naturalmente sarebbe consigliata un'applicazione sulla propria macchina che una in rete... parlando di sicurezza non si sa mai.... che ne dite?
Di solito quando si codifica una stringa, per esempio "venusia" come userid e "segreto" come passwd, l'applicazione ci avverte che la sequenza è ultimata o con "==" o "o="; naturalmente qualche prova di codifica e decodifica non è male da sperimentare. Alla bisogna naturalmente non metteremo i simboli di "fine stringa" perché non fanno parte ovviamente dei dati che l'autentificazione ci richiederà.
Di seguito allego il codice di un de/codificatore, che uso per la sua semplicità ed efficenza, di cui gentilmente ringraziamo Daniel Lerch per averlo condiviso sulla rete... fatevi un giro sul suo sito.
/********************* ************************** ************************
*
* Autor: Daniel Lerch
* e-mail: lerch@ya.com
*
* Referencias:
* Network security with OpenSSL (O'Reilly)
*
* Compilacion:
* $ gcc base64.c -o base64 -lssl
*
********************** ************************** ***********************/
#include <stdio.h>
#include <string.h>
#include <openssl/evp.h>
unsigned char *base64_encode (unsigned char *buffer, unsigned int len)
{
unsigned char *ret = (unsigned char *) malloc
((((len+2)/3)*4)+1);
EVP_EncodeBlock (ret, buffer, len);
ret[(((len+2)/3)*4)] = 0;
return ret;
}
unsigned char *base64_decode (unsigned char *buffer, unsigned int len)
{
unsigned char *ret = (unsigned char *) malloc
((((len+2)/3)*4)+1);
EVP_DecodeBlock (ret, buffer, len);
ret[(((len+2)/3)*4)] = 0;
return ret;
}
void usage (char *progname) {
printf ("Usage: %s [ encode | decode ] Text\n\n",
progname);
exit(0);
}
int main (int argc, char *argv[])
{
int i;
/* Sin parametros */
if (argc < 3) usage(argv[0]);
if (argc == 3) {
/* Verificamos los
algoritmos */
if (strcmp(argv[1],
"encode") ==
0)
printf ("%s\n",
base64_encode (argv[2], strlen(argv[2])));
if (strcmp(argv[1],
"decode") == 0)
printf ("%s\n",
base64_decode (argv[2], strlen(argv[2])));
}
else usage(argv[0]);
return 0;
}
/********************** ************************ *************************/
Kensan.it
Naturalmente facciamo attenzione alla compilazione che lo stesso autore ci suggerisce:$ gcc
base64.c -o base64
-lssl
Ora che abbiamo tutto ciò che occorre vediamo la variante applicata alla sessione telnet:
telnet smtp.vega.it 25
[Trying 100.99.198.97...
Connected to vega.it.
Escape character is '^]'.
220 vega.it ESMTP Sendmail 8.12.9 ready at Sun,
03 Sep 2004 00:00:00 +0200 (CEST)]
[Trying 100.99.198.97...
Connected to vega.it.
Escape character is '^]'.
220 vega.it ESMTP Sendmail 8.12.9 ready at Sun,
03 Sep 2004 00:00:00 +0200 (CEST)]
in grassetto evidenziamo cosa andremo a comunicare al server
EHLO
LOCALHOST
250-vega.it
250-auth login plain
250-pipelining
250 8bitmime
250-vega.it
250-auth login plain
250-pipelining
250 8bitmime
avrete notato che non abbiamo usato il saluto solito HELO ma abbiamo avvertito il server che vogliamo autenticarci passandogli il comando EHLO. Delle sue risposte a noi interessa "250-auth login plain" che ci conferma l'uso di quel tipo di protocollo
AUTH
LOGIN
334-xxxxxxxxx
dmVudXNpYQ
334-xxxxxxxxx
c2VncmV0bw
235 ok, go ahead (#2.0.0)
334-xxxxxxxxx
dmVudXNpYQ
334-xxxxxxxxx
c2VncmV0bw
235 ok, go ahead (#2.0.0)
il server ha trasmesso la sua identificazione con il codice 334 e noi abbiamo immesso la userid (venusia) codificata in base64 "dmVudXNpYQ" e di seguito all'altra richiesta 334 la nostra passwd (segreto) "c2VncmV0bw" e se tutto è ok, ci viene comunicato con il codice 235.
Bene.... ora che siamo stati riconosciuti, il server attenderà poi la normale procedura con i comandi:
MAIL FROM:
RCPT TO:
DATA
e bla...bla... bla....
RCPT TO:
DATA
e bla...bla... bla....
ma questo lo sapete già... vero?!
Questo tutto nel rispetto del significato dell'acronimo KISS e nel segno del "semplicemente funzionale" a molti caro.
Ma quanto amo i comandi testuali!!!
Si denota ora, che abbiamo una valente risposta ai normali e frequenti problemi di gestione del server di posta ed alla lentezza cronica della grafica ad essa applicata. Se il vostro fornitore del servizio di posta non prevede la possibilità di usare i protocolli smtp e pop, che aspettate a cambiarlo?!
A tutto c'è rimedio.... eccetto a queste maledette zanzare che ho in camera... qualcuno ha una soluzione?
Commento di kensan: ho notato che ad alcuni non piace il tono scherzoso dell'articolo che si rifà alla cultura hacker pur essendo un testo di base che si trova da moltissime parti in Internet. Alcuni hanno detto che il tono dovrebbe essere "modesto" come modesto è l'argomento trattato. Comunque la pensiate questa pubblicazione è una continuazione di un mio scritto.
Commento:
ma a me non va, probabilmente per impostazioni di sicurezza o altro.
Comunque una volta mandato il comando ehlo non accetta il comando AUTH LOGIN
Sapete come mai?
grazie