前言:
某次项目之后,突发奇想写一个全协议的邮箱暴破工具,与kali中的邮箱账户枚举工具配合使用更佳。(metasploit辅助模块:smtp_enum,smtp-user-enum工具)
该工具基于python3,分为6个模块,pop3,pop3S,smtp,smtps,imap,imaps。
不是每个邮箱系统都像163和QQ那么成熟,所以说,一个上线不久的邮件系统一般来说应该有以下挖掘点:
1、邮件伪造
2、账户名枚举
3、账户名密码暴力破解(基于协议层面)
0x00 邮箱伪造
这个已经老生常谈了,原因无非就是服务器没有开启SPF一类的机制,没有把域名和IP绑定在一起所导致的。
参考链接:https://www.freebuf.com/articles/database/188313.html
0x01 账户名枚举
这个挖掘点出现的原因是因为,SMTP服务器没有禁用一些特殊的命令:
参考链接:https://www.freebuf.com/articles/web/182746.html
这篇文章对账户名枚举的姿势进行了一系列的介绍。
0x02 账户名密码暴力破解
基于账户名枚举去做密码暴破的效率应该是最高的,这里我自己写了一个工具希望各位大佬多加指正。
0x03 工具模块介绍
pop3与pop3S
pop3与pop3S,使用python库为poplib
既然要保证效率和准确性,那就使用多线程和锁机制,这里的线程库使用的是threading
首先初始化函数接收的参数为邮箱地址,邮箱端口,用户名列表,密码集 合,然后对类变量进行赋值,确保能够被全局使用。
线程执行函数,先判断服务器的服务是不是开启,如果没有开启,输出错误信息。
之后判断用户名集 合与密码集 合是否为空,否则输出错误信息。
分行读取集 合中的内容,首先定义一个锁对象
定义完锁对象之后,开启同步锁,执行函数前申请锁,执行函数后释放锁。
定义pop3执行函数:
替换掉空格,新建邮箱服务器对象,进行登录,如果正确输出用户名密码信息,否则输出错误信息。
定义完函数之后,放入锁中间。
主函数中调用暴破函数,开启线程
smtp与smtps
smtp与smtps,使用python库为smtplib
smtp与pop3调用和使用过程基本一致,不同点是登录函数不一致
定义初始化:
定义线程执行函数:
定义登录函数与线程锁对象:
定义主文件调用函数:
imap与imaps
imap与imaps,使用python库为imaplib
定义初始化:
定义线程执行函数:
定义登录函数:
imap登录有两种选项,一种是正常登录,一种是MD5加密登录
定义主文件调用:
主文件中各种参数及接收参数定义
GitHub链接如下:https://github.com/shuimuLiu/MailBrust
若有错误及不足之处,希望各位大佬多加指点。
请登录后发表评论
注册