对邮箱系统测试的一些思考 – 作者:水木逸轩con

前言:

某次项目之后,突发奇想写一个全协议的邮箱暴破工具,与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

图片[1]-对邮箱系统测试的一些思考 – 作者:水木逸轩con-安全小百科

首先初始化函数接收的参数为邮箱地址,邮箱端口,用户名列表,密码集 合,然后对类变量进行赋值,确保能够被全局使用。

图片[2]-对邮箱系统测试的一些思考 – 作者:水木逸轩con-安全小百科

线程执行函数,先判断服务器的服务是不是开启,如果没有开启,输出错误信息。

之后判断用户名集 合与密码集 合是否为空,否则输出错误信息。

分行读取集 合中的内容,首先定义一个锁对象

图片[3]-对邮箱系统测试的一些思考 – 作者:水木逸轩con-安全小百科

定义完锁对象之后,开启同步锁,执行函数前申请锁,执行函数后释放锁。

定义pop3执行函数:

图片[4]-对邮箱系统测试的一些思考 – 作者:水木逸轩con-安全小百科

替换掉空格,新建邮箱服务器对象,进行登录,如果正确输出用户名密码信息,否则输出错误信息。

定义完函数之后,放入锁中间。

图片[5]-对邮箱系统测试的一些思考 – 作者:水木逸轩con-安全小百科

主函数中调用暴破函数,开启线程

图片[6]-对邮箱系统测试的一些思考 – 作者:水木逸轩con-安全小百科

smtp与smtps

smtp与smtps,使用python库为smtplib

smtp与pop3调用和使用过程基本一致,不同点是登录函数不一致

定义初始化:

图片[7]-对邮箱系统测试的一些思考 – 作者:水木逸轩con-安全小百科

定义线程执行函数:

图片[8]-对邮箱系统测试的一些思考 – 作者:水木逸轩con-安全小百科

定义登录函数与线程锁对象:图片[9]-对邮箱系统测试的一些思考 – 作者:水木逸轩con-安全小百科

定义主文件调用函数:

图片[10]-对邮箱系统测试的一些思考 – 作者:水木逸轩con-安全小百科

imap与imaps

imap与imaps,使用python库为imaplib

定义初始化:

图片[11]-对邮箱系统测试的一些思考 – 作者:水木逸轩con-安全小百科

定义线程执行函数:

图片[12]-对邮箱系统测试的一些思考 – 作者:水木逸轩con-安全小百科

定义登录函数:

图片[13]-对邮箱系统测试的一些思考 – 作者:水木逸轩con-安全小百科

imap登录有两种选项,一种是正常登录,一种是MD5加密登录

定义主文件调用:

图片[14]-对邮箱系统测试的一些思考 – 作者:水木逸轩con-安全小百科

主文件中各种参数及接收参数定义

图片[15]-对邮箱系统测试的一些思考 – 作者:水木逸轩con-安全小百科

GitHub链接如下:https://github.com/shuimuLiu/MailBrust

若有错误及不足之处,希望各位大佬多加指点。

来源:freebuf.com 2020-08-14 12:39:45 by: 水木逸轩con

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论