利用smtp协议发邮箱 -- 实现邮件轰炸

声明:本文只为深入理解和运用smtp协议,发布的源码仅做交流使用,不可用于攻击行为!!!

  上一周,网络安全老师布置一个作业:选择一个小项目玩玩。看了看那些项目,一眼就瞅中“email邮件炸弹”,感觉这个挺有趣的,就想倒腾玩玩。

  首先,连了解一下smtp协议:https://blog.csdn.net/qq_35644234/article/details/68961603(这个博客写的很好)

  我来大概总结一下吧。

  先大致说一下邮件的发送流程。首先明确,邮件的发送是通过smtp服务器的,例如你用qq邮箱要给163邮箱发送信件,那么你得先登录qq邮箱的smtp服务器(smtp.qq.com),然后把邮件发送给这个服务器,接着qq邮箱的smtp服务器就会把你的邮件发送给你指定的smtp服务器(163邮箱的服务器:smtp.163.com)。而你要登录到你的smtp服务器,就得用smtp协议。

  既然是协议,那么就会有一套事先约定好的规则,你要按照固定的格式与smtp服务器进行交互,最终才能登录到smtp服务器上。而登录的步骤有以下几步:

    ① 终端输入:telnet smtp服务器域名或者ip smtp服务器的端口号
      解释:SMTP服务器向该客户送回应答码220 进入交互界面
    ② 在交互界面输入: helo smtp服务器的名字(如163邮箱即为163,QQ邮箱即为qq,大学的邮箱一般为学校的英文简称)
      解释:发送的HELO用来向服务器提供客户端的标识信息    服务器端回应应答码250,通知客户端:请求建立smtp邮件服务会话已经实现
    ③ 输入:auth login
      解释:发送login先服务器申请登录  服务器返回“334 dXNlcm5hbWU6(是username:的Base64编码)”,要求你的账号
    ④ 输入:你的账号的Base64编码(可以用这个工具进行编码:https://c.runoob.com/front-end/693
      解释:向服务器发送你的账号  如果服务器中存在你的账号时,会返回“334 UGFzc3dvcmQ6(是Password:的Base64编码)”,要求你的密码
    ⑤ 输入:你的密码的Base64编码 如果账号密码对应的话,会返回235,表示登录成功
    ⑥ 输入:MAIL FROM: 自己的邮箱地址
      解释:向服务器报告发信人的邮箱与域名      服务器向客户回应应答码“250”,代表请求命令完成
    ⑦ 输入:RCPT TO:要发送的邮箱地址
      解释:向服务器报告收信人的邮箱与域名    服务器向客户回应应答码“250”,代表请求命令完成
    ⑧ 输入:DTAT
      解释:用“DTAT”命令对报文的传送进行初始化    服务器回应“354”,表示可以进行邮件输入了
    ⑨ 输入:From:发件人的邮箱地址
            To:收件人的邮箱地址
            Subject:邮件的标题
            Date:发件的时间
            (空一行表示正文开始
            ......(正文)

            .(这一行单独一个.  表示结束正文)
      解释:服务器向客户回应应答码“250”,代表请求命令完成,完成邮件的发送(如果回复是550,表示邮件被退回了,可能是你收件地址写错啦。。也可能是被对方的服务器弹回去了。。)
    ⑩ 输入:QUIT
      解释:客户端发送“QUIT”命令,结束发件  服务器收到命令后,回应应答码“221”,并结束会话
    

可以参考下面几张图,加深对这个过程的理解:

 

 

效果图:

几点说明:

① 我这里用的是学校的邮箱([email protected]),在登录一个服务器之前,你得先知道服务器的域名或ip,
我们学校的smtp服务器域名叫em.njupt.edu.cn,而大部分的smtp服务器域名为smtp.XX.com(如smtp.qq.com,smtp.163.com) 然后还得知道服务器对应的端口号(一般为25)
② 

① 在用终端发送邮件时,先确认你的windows系统打开了telnet服务,其次你所要登录的smtp服务器,你在这个服务器上的账号打开了SMTP服务,否则无法登录服务器,什么?不知道咋打开?好吧,下面以qq邮箱为例,直接看图吧,很简单的

 

② 我这里用的是学校的邮箱([email protected]),在登录一个服务器之前,你得先知道服务器的域名或ip,我们学校的smtp服务器域名叫em.njupt.edu.cn,而大部分的smtp服务器域名为smtp.XX.com(如smtp.qq.com,smtp.163.com) 然后还得知道服务器对应的端口号(一般为25)
③  从上到下,箭头指向的行(包括第一张图上)就是上面各个步骤的输入。注意:输入是不能输错的,因为你的每一次按键实际上已经被传送到服务器,所以输入错误时不能使用退格键删除,只能换行重新输入(可以事先把所有的命令复制到一个txt文件里,然后复制+在终端中右击(粘贴),需要留意的是,复制一行时不可以双击选中一行,因为这样你会默认选择一行中最后的换行符,所以还是老老实实按住左键复制全部吧。。。)

     其实可以分为五部分:1. 打招呼,开始会话(红色箭头) 2. 登录服务器(蓝色箭头) 3. 填写“快递信息”:发件地址和收件地址(紫色箭头) 4. 发出开始“向快递盒中装邮件的命令”:data  5. 书写邮件(橙、棕、红三色),这个部分又分为:写写信人暱称、收信人暱称、邮件标题、发件时间、正文(以上参数可以缺省) 6. 发出结束会话命令“Quit”(黄色箭头)

④  在交互窗口下是无法输入汉字的,可以在写字板中打好汉字后复制粘贴进去,不过显示还是乱码,发出的邮件也是奇奇怪怪的中文字符。。。附上一张图(图中有一个错误,就是subject下面,在开始正文前缺少一个空行,事实证明发出的邮件也没有正文。。。):

上图中的“适蜒”其实是“誓言”。。。至少是谐音。至于“创怂父”我就不明所以了。。

 

最后附上一张效果比较好的截图:

感谢你能坚持看到这,现在你应该对smtp协议有了一定的了解吧,不过如果想用终端手动输入实现邮件轰炸显然不太现实。。。。所以,就用python写了一个脚本,在linux系统运行,实现了邮件轰炸的功能。

有两个文件,一个config.py(用于存smtp服务器域名(或ip)、端口号、账号、密码、发件人邮箱地址、收件人邮箱地址)

另一个sendInfo.py(导入了config)用于邮件轰炸,其实就是利用了python3的smtplib类中的函数(参考:http://www.runoob.com/python/python-email.html

贴一张效果图吧:

源码放在这里了(由于老师验收还没结束。。防止被本班的同学拿去,所以以后再传):

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章