前言

相信有些人也看过一些渗透,邮件伪造然后钓鱼这个在渗透中也是经典技巧了,那么邮件伪造又是如何运作的呢?下面的文章将会为你揭示邮件伪造,看完这篇文章,你会发现,原来就是这样。

邮件伪造原理

利用的是SMTP协议,因为在SMTP协议里面,是不需要身份认证的,也就是邮件发送者和邮件显示的发送人不一定要一致,那为什么我们平时发送的邮件的邮件发送人和显示的发送人都是一致的呢?这是邮件服务商人为要求的,163,qq邮箱都是如此

处理流程

  • 注册个邮箱,这里用网易163

  • 登陆邮箱

  • 进入设置

  • 打开SMTP服务

  • 设置授权码

这些只是代码之前的前奏,下面开始我们的工具编写

代码编写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# -*- coding: utf-8 -*-
'''
Program:邮件伪造
Function:伪造邮件发送工具

Version:Python3.6
Time:2017/10/13
Author:Walks
个人博客:http://www.bywalks.com
'''

import smtplib
import email.mime.multipart
import email.mime.text

#建立邮件对象
msg = email.mime.multipart.MIMEMultipart()
#添加数据,来自哪,去哪
msg['Subject'] = u'发送asd邮件时设置的标题asd'
msg['From'] = '[email protected]'
msg['To'] = '[email protected]'
content = "你好啊今asdasda好日子,所以西乡说些阿萨德asdasd事情阿斯达所阿斯达所大所大大所大库拉索多拉还是打款哈手机打开哈金士顿哈见到过巴克斯降本增效变成你们准备下次找你没错吧红烧冬瓜 。"

txt = email.mime.text.MIMEText(content,'text','utf-8')
msg.attach(txt) # 将多个子部分进行组合

#防出错
try:
smtp = smtplib.SMTP()
# 连接到服务器
smtp.connect('smtp.163.com', '25')
# 用户名密码登录,密码为163邮箱的授权码
smtp.login('[email protected]', 'XXX')
# 发送邮件
smtp.sendmail('[email protected]', ['[email protected]'], msg.as_string())
smtp.quit()
print('邮件发送成功email has send out !')
except Exception as e:
print(e)

逐行解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# -*- coding: utf-8 -*-
'''
Program:邮件伪造
Function:伪造邮件发送工具

Version:Python3.6
Time:2017/10/13
Author:Walks
个人博客:http://www.bywalks.com
'''

#导入两个库,用来发送邮件,multipart用来构造邮件,带附件的
import smtplib
import email.mime.multipart
import email.mime.text

#建立邮件对象
msg = email.mime.multipart.MIMEMultipart()
#添加数据,来自哪,去哪
msg['Subject'] = u'发送asd邮件时设置的标题asd'
#邮件显示的发送人
msg['From'] = '[email protected]'
#接受地
msg['To'] = '[email protected]'
#发送的内容
content = "你好啊今asdasda好日子,所以西乡说些阿萨德asdasd事情阿斯达所阿斯达所大所大大所大库拉索多拉还是打款哈手机打开哈金士顿哈见到过巴克斯降本增效变成你们准备下次找你没错吧红烧冬瓜 。"

txt = email.mime.text.MIMEText(content,'text','utf-8')
# 将多个子部分进行组合
msg.attach(txt)

#防出错
try:
smtp = smtplib.SMTP()
# 连接到服务器
smtp.connect('smtp.163.com', '25')
# 用户名密码登录,密码为163邮箱的授权码,自己设置的
smtp.login('[email protected]', 'XXX')
# 发送邮件(发送地,接受地,内容) 第二个参数必须为列表
smtp.sendmail('[email protected]', ['[email protected]'], msg.as_string())
#退出
smtp.quit()
print('邮件发送成功email has send out !')
except Exception as e:
#打印出错原因,可以查看出错代码
print(e)

两张成功图。这里为什么会显示代发,上面也说过了,邮件服务商要求,那么我们找一个小服务商是不是就行了?