Enumeracion de usuarios por SMTP?

195 views
Skip to first unread message

Leandro Tami

unread,
Jun 8, 2011, 6:37:21 PM6/8/11
to hack-l...@googlegroups.com
Holas.
Recientemente en mi trabajo notamos que hay páginas que validan las
direcciones de correo antes de enviar mail (fíjense www.wannasurf.com,
en el formulario de contacto). Esto me resultó extraño, y en principio
hasta pensé que era imposible porque significaría que es posible
enumerar usuarios vía STMP. Hay dos comandos en este protocolo que
pueden servir para esto: VRFY y EXPN. El primero verifica que un
usuario exista, y el otro devuelve los usuarios que forman parte de
una lista de correos ("EXPN ALL" se supone que devuelve todos).
Normalmente por lo que noté esto no funciona porque se lo deshabilita
como medida de seguridad. Sin embargo, esa página seguia identificando
correctamente los nombres de usuario que existian de los que no!
Investigando un poco noté que si uno intenta enviar un correo a mano,
inmediatamente despues de poner RCTP To:x...@pirulo.com el servidor nos
responde con un código 550 (mailbox unavailable) o 250 (Requested mail
action okay). Esto parece ser la norma general, y el método que esta
página está usando para validar.

Alguien me dijo que esto es inevitable, ya que de una manera u otra un
servidor de correo debería notificarte si al enviar un correo este
llegó o no a una casilla válida. Normalmente esto pasa porque nos
llega otro mail avisandonos del problema. Eso es aún otro método más
que podemos usar para enumerar usuarios.

Mi pregunta es... cómo es que esto es válido y aparentemente se lo
permite en todos lados? No es un *gran* problema la posible
enumeracion de usuarios?

Uds. que opinan?

Leandro.-

Leandro Tami

unread,
Jun 8, 2011, 6:42:50 PM6/8/11
to hack-l...@googlegroups.com
Aca va un ejemplo de lo que dije en el correo anterior:

220 sarasa.com ESMTP MDaemon 11.0.0; Tue, 07 Jun 2011 19:15:29 -0300
HELO aslkdj
250 sarasa.com Hello xxx-xxx-xx-xxx.speedy.com.ar, pleased to meet you
VRFY usuario
252 local security policy has disabled this command
MAIL From:la...@prueba.com
250 <la...@prueba.com>, Sender ok
RCPT To:salkdj...@sarasa.com
550 <salkdj...@sarasa.com>, Recipient unknown
RCPT To:val...@sarasa.com
250 <val...@sarasa.com>, Recipient ok
EXPN
252 local security policy has disabled this command
EXPN all
252 local security policy has disabled this command

2011/6/8 Leandro Tami <leandr...@gmail.com>:

el draco

unread,
Jun 9, 2011, 10:00:01 AM6/9/11
to hack-l...@googlegroups.com
bueno, no estoy seguro, pero creo que lo mejor en cuanto a seguridad
sería que no se puedieran enumerar usuarios de ninguna forma.

Recuerdo al programa qmail, que cuando querias enviar un mail a una
casilla cualquiera, te decia "I'll do my best" y nada más. Esto
evitaba el problema.

Pero desde lo funcional, entiendo que es util saber si existe o no. De
hecho ahorra muuucho procesamiento y gasto de ancho de banda sin
sentido.

En los tiempos que corren, no debería estar y sí se puede evitar.

saludossssssss
sebas

2011/6/8 Leandro Tami <leandr...@gmail.com>:

Leandro Tami

unread,
Jun 9, 2011, 10:26:26 AM6/9/11
to hack-l...@googlegroups.com
Acabo de hacer la prueba con gmail y también funciona! Responde I'll
do my best cuando uso VRFY, pero si uso RCPT TO:<x...@xx.com> devuelve
ok o bien un mensaje largo de error indicando que el usuario no
existe.

Leandro.-

2011/6/9 el draco <eld...@gmail.com>:

el draco

unread,
Jun 9, 2011, 11:12:34 AM6/9/11
to hack-l...@googlegroups.com
mmmmmmm raro, como lo probaste????????

Hice la prueba y me costó mucho e incluso me da que no son vulnerables...

Hice esto:

1- Me conecté al smtp de gmail smtp.gmail.com puerto 25. (ncat
smtp.gmail.com 25)
2- Me pide que use SSL, así que no pude seguir porque ya estaba conectado.
3- Me conecto con ssl a smtp.gmail.com (ncat --ssl smtp.gmail.com 25),
pero no me deja ya que de principio no usa SSL.

4- Me conecté al smtp de gmail (smtp.gmail.com), puerto 465 usando SSL
(use ncat --ssl)
5- Para intentar mandar mails, me pide autenticación!!
6- Tuve que aprender a hablar el protocol extendido AUTH... que está
basado en base64...
7- Una vez logeado con mi usuario y clave, intento mandar a un mail
cualquiera y uno bueno y me da identicas respuestas.

Miren el log:
ncat --ssl smtp.gmail.com 465
220 mx.google.com ESMTP w66sm871313yhi.80
ehlo yo.com
250-mx.google.com at your service, [190.19.174.152]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH
250 ENHANCEDSTATUSCODES
mail from :<te...@test.com>
530-5.5.1 Authentication Required. Learn more at
530 5.5.1 http://mail.google.com/support/bin/answer.py?answer=14257
w66sm871313yhi.80
auth login
334 VXNlcm5hbWU6
dHV1c3VhcmlvQGdtYWlsLmNvbQo=
334 UGFzc3dvcmQ6
dHVwYXNzd29yZAo=
235 2.7.0 Accepted
mail from:<te...@test.com>
250 2.1.0 OK w66sm871313yhi.80
rcpt to:<asfdasd...@gmail.com>
250 2.1.5 OK w66sm871313yhi.80
rcpt to:<val...@gmail.com>
250 2.1.5 OK w66sm871313yhi.80
data
354 Go ahead w66sm871313yhi.80

Aclaro que cambié mi usuario y pass, y el mail val...@gmail.com ERA uno valido.

que piensan?
como lo hiciste lea?

saludos
sebas


2011/6/9 Leandro Tami <leandr...@gmail.com>:

el draco

unread,
Jun 9, 2011, 11:15:54 AM6/9/11
to hack-l...@googlegroups.com
por las dudas dejo mi intento en el smtp común, como si uno no fuera de gmail..


ncat gmail-smtp-in.l.google.com 25
220 mx.google.com ESMTP q32si4553932ybk.27
helo yo.com
250 mx.google.com at your service
mail from:<te...@test.com>
250 2.1.0 OK q32si4553932ybk.27
rcpt to:<asdfa...@gmail.com>
250 2.1.5 OK q32si4553932ybk.27
rcpt to:<val...@gmail.com>
250 2.1.5 OK q32si4553932ybk.27
data
354 Go ahead q32si4553932ybk.27


a mi no me enumera!!!!!!

2011/6/9 el draco <eld...@gmail.com>:

Leandro Tami

unread,
Jun 9, 2011, 11:21:32 AM6/9/11
to hack-l...@googlegroups.com
Estoy en mi trabajo, con Windows, asi que lo hice usando nslookup y el PuTTY.

1) Busco registros MX

C:\Users\Desarrollos2>nslookup
Servidor predeterminado: google-public-dns-a.google.com
Address: 8.8.8.8

> set q=MX
> gmail.com
Servidor: google-public-dns-a.google.com
Address: 8.8.8.8

Respuesta no autoritativa:
gmail.com MX preference = 40, mail exchanger = alt4.gmail-smtp-in.l.google
.com
gmail.com MX preference = 20, mail exchanger = alt2.gmail-smtp-in.l.google
.com
gmail.com MX preference = 30, mail exchanger = alt3.gmail-smtp-in.l.google
.com
gmail.com MX preference = 10, mail exchanger = alt1.gmail-smtp-in.l.google
.com
gmail.com MX preference = 5, mail exchanger = gmail-smtp-in.l.google.com
>

Resuelvo uno de esos dominios

C:\Users\Desarrollos2>nslookup alt4.gmail-smtp-in.l.google.com
Servidor: google-public-dns-a.google.com
Address: 8.8.8.8

Respuesta no autoritativa:
Nombre: alt4.gmail-smtp-in.l.google.com
Address: 74.125.155.27

Me conecto con el PuTTY a 74.125.155.27, puerto 25

220 mx.google.com ESMTP e1si3132290yhh.18
HELO lala.com


250 mx.google.com at your service

MAIL FROM:<sar...@mailinator.com>
250 2.1.0 OK e1si3132290yhh.18
RCPT TO:<leandr...@gmail.com>
250 2.1.5 OK e1si3132290yhh.18
RCPT TO:<gazjkfh...@gmail.com>
550-5.1.1 The email account that you tried to reach does not exist. Please try
550-5.1.1 double-checking the recipient's email address for typos or
550-5.1.1 unnecessary spaces. Learn more at
550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596
e1si3132290yhh.18
VRFY gazjkfhf3412412
252 2.1.5 Send some mail, I'll try my best e1si3132290yhh.18

Hice un VRFY al final para que veas lo del "I'll try my best".

2011/6/9 el draco <eld...@gmail.com>:

el draco

unread,
Jun 9, 2011, 11:32:38 AM6/9/11
to hack-l...@googlegroups.com
JAJAJAJAJAJA okkkkkkk ahi vi mi error.......... mi generador de mails
pseudo-aleatorios no sirve!!!!!! la casilla que había puesto como
invalida...... existia!

Acá dejo mis pruebas con tus datos:

ncat gmail-smtp-in.l.google.com 25
220 mx.google.com ESMTP i7si296385yhn.45


HELO lala.com
250 mx.google.com at your service
MAIL FROM:<sar...@mailinator.com>

250 2.1.0 OK i7si296385yhn.45
RCPT TO:<leandr...@gmail.com>
250 2.1.5 OK i7si296385yhn.45


RCPT TO:<gazjkfh...@gmail.com>
550-5.1.1 The email account that you tried to reach does not exist. Please try
550-5.1.1 double-checking the recipient's email address for typos or
550-5.1.1 unnecessary spaces. Learn more at
550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596

i7si296385yhn.45
RCPT TO:<asdfa...@gmail.com>
250 2.1.5 OK i7si296385yhn.45
RCPT TO:<asldfjaslfjirreier4...@gmail.com>


550-5.1.1 The email account that you tried to reach does not exist. Please try
550-5.1.1 double-checking the recipient's email address for typos or
550-5.1.1 unnecessary spaces. Learn more at
550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596

i7si296385yhn.45
VRFY eld...@gmail.com
252 2.1.5 Send some mail, I'll try my best i7si296385yhn.45


Asi que asdfa...@gmail.com existia!!!

bueno, tenes una enumeración de usuarios en gmail. Debe valer bastante seguro.

Vos dos cosas interesantes:
1- No creo que sea muy útil para encontrar miles de mails validos. A
fin de cuentas, casi todas lo que probas están registradas. Pero si
para verificar que el mail de alguien existe. Por ej si alguien se
llama "roberto arnasa" podés probar 1000 combinaciones hasta dar con
la cuenta de el.

2- Probando de logearme con usuario y password usando AUTH LOGIN,
descubri que podes probar todas las veces que quieras sin que diga
nada, ni te bloquee la cuenta, ni te pida captcha, ni nada. Así que el
cracking de passwords PODRIA funcionar.
Considerando todas las molestias que se tomaron para evitar eso en la
web... ... es para considerar.

Así que porque no unimos tu enumeracion de usuarios, con que podemos
crackear sus claves indefinidamente.... y vemos que pasa?
Ya tengo un programa python en mente..... ajajajajajajajaj

saludos
sebas

Leandro Tami

unread,
Jun 9, 2011, 11:38:01 AM6/9/11
to hack-l...@googlegroups.com
Y... se podria generar una larga lista de usuarios válidos, tipo 2000
o 3000 mails por lo menos, y luego tratar de crackear variando el
nombre de usuario, y usando la clave 12345, por ejemplo, u otra clave
que esté en el listado de las passwords más comunes que salió unos
meses atras.
Es un experimento interesante... y si, es una forma efectiva de
esquivar el captcha!

2011/6/9 el draco <eld...@gmail.com>:

Agustín Gugliotta

unread,
Jun 9, 2011, 12:26:29 PM6/9/11
to hack-l...@googlegroups.com
Si quieren passwords aca hay muchisimos xD

http://www.cyberhades.com/2011/06/08/diccionarios-y-listas-de-palabras-a-dieta/

2011/6/9 Leandro Tami <leandr...@gmail.com>

Leandro Tami

unread,
Jun 9, 2011, 7:14:19 PM6/9/11
to hack-l...@googlegroups.com
Estuve revisando la RFC2821 que define el protocolo SMTP
(http://www.ietf.org/rfc/rfc2821.txt)

The second step in the procedure is the RCPT command.

RCPT TO:<forward-path> [ SP <rcpt-parameters> ] <CRLF>

The first or only argument to this command includes a forward-path
(normally a mailbox and domain, always surrounded by "<" and ">"
brackets) identifying one recipient. If accepted, the SMTP server
returns a 250 OK reply and stores the forward-path. If the recipient
is known not to be a deliverable address, the SMTP server returns a
550 reply, typically with a string such as "no such user - " and the
mailbox name (other circumstances and reply codes are possible).
This step of the procedure can be repeated any number of times.

Si alguien implementa el protocolo a rajatabla según lo dice la RFC,
es vulnerable a enumeración de usuarios porque:
1) define un codigo diferente para cada situación (usuario válido/inexistente)
2) indica que este paso puede ser repetido un número cualquiera de veces

Lo más loco de esto es que tiene sentido: si quiero enviar un correo a
500 personas esto es perfectamente válido, y en teoria puedo seguir
agregando destinatarios sean válidos o no, recibiendo las respuestas
250 o 550 para cada uno de ellos.

Leandro.-

2011/6/9 Agustín Gugliotta <agustin...@gmail.com>:

Reply all
Reply to author
Forward
0 new messages