利用Swaks绕过SPF记录伪造邮件
前几天验证了一个邮件伪造漏洞,发现非常适合网络钓鱼,在此记录学习过程。
前言
SPF介绍
SPF(Sender Policy Framework)是一种以IP地址认证电子邮件发件人身份的技术。当你定义了你域名的SPF记录之后,邮件接收方会首先检查域名的SPF记录,来确定连接过来的IP地址是否包含在SPF记录里面,如果在,就认为是一封正确的邮件,否则会认为是一封伪造的邮件进行退回或丢弃处理。
SPF可以防止别人假冒你来发邮件,是一个反伪造性邮件的解决方案。设置正确的SPF记录可以提高邮件系统发送外域邮件的成功率,也可以在一定程度上防止别人假冒你的域名发邮件。
SPF原理可参考维基百科:发件人策略框架。
Swaks介绍
Swaks(Swiss Army Knife for SMTP,SMTP瑞士军刀),多功能的SMTP协议测试工具,利用Swaks可以很方便的发送伪造邮件。
常用Swaks指令
-
--ehlo [helo-string]:伪造ehlo头信息
-
--header [header-and-data]:伪造From、Subject、Message-Id、X-Mailer等头信息
-
--data [data-portion]:伪造DATA的全部内容,可直接将邮件源码作为选项
-
--attach [attachment-specification]:添加附件
具体使用方法可见Swaks官方使用手册。
将邮件源码作为选项,可通过手动修改邮件源码中的From和To字段来控制显示在邮件中的发件人和收件人,示例命令如下:
swaks --data /root/Desktop/test.eml --to [email protected] --from [email protected] --ehlo qq.com --server mail.smtp2go.com -p 2525 -au xxx -ap xxx |
常用Swaks指令综合用法,示例命令如下:
swaks --to [email protected] --from [email protected] --ehlo qq.com --body 'This is a test mailing' --header 'Subject: test' --header 'Message-Id: <[email protected]>' --header 'X-Mailer: QQMail 2.x' --attach /root/Desktop/attach.txt --server mail.smtp2go.com -p 2525 -au xxx -ap xxx |
测试过程
未设置SPF记录
是否存在SPF记录可用nslookup进行探测,命令如下:
nslookup -type=txt xxx.com.cn |
xxx.com.cn未设置SPF记录,存在邮件伪造漏洞风险
使用Swaks伪造邮件,命令如下:
swaks --to [email protected] --from [email protected] --body 'This is a test mailing' --header 'Subject: test' |
伪造邮件投递成功:
查看邮件头信息,显示不存在SPF记录
有设置SPF记录
用nslookup进行探测,命令如下:
nslookup -type=txt qq.com |
qq.com有设置SPF记录
使用Swaks伪造邮件,命令如下:
swaks --to [email protected] --from [email protected] --body 'This is a test mailing' --header 'Subject: test' |
伪造邮件投递失败:
查看163官方给出的退信原因,发信IP未被发送域的SPF许可,也证明了伪造邮件SPF记录验证不通过时无法投递:
利用邮件托管平台绕过SPF记录
网上的邮件托管平台有很多,这里用到的是smtp2go,注册账户并登录,smtp2go中需要存在有效SMTP Users和Domains才能正常投递邮件。
Add SMTP Users
Add Domains,新建Domain需要一个域名并按照引导完成CNAME绑定
完成后可配合Swaks伪造邮件,命令如下:
swaks --to [email protected] --from [email protected] --body 'This is a test mailing' --header 'Subject: test' --server mail.smtp2go.com -p 2525 -au xxx -ap xxx |
伪造邮件投递成功
在163邮箱中发件人显示为[email protected],且出现由[email protected] 代发的字样
思考
为什么会产生由 [email protected] 代发的字样呢?又为什么利用邮件托管平台可以绕过SPF记录投递伪造邮件呢?
要想明白这两个问题,先看看邮件头信息中的From、Sender以及smtp.mail字段
-
From:宣称发件人,很容易被伪造
-
Sender:Sender值就是smtp.mail值。一般情况下Sender/smtp.mail值代表的就是真正发件人,收件服务器会去其代表的域下进行SPF记录校验
当Sender值和From值不同时,ESP(邮件服务商)可能会在客户端显示代发,用来提示收件人邮件伪造攻击风险,代发的邮箱地址就是Sender/smtp.mail字段值。
一般邮件头中第一个Received: from就是连接到收件服务器的IP,也是收件服务器要去发件域做SPF记录校验的IP。用邮件托管平台发送邮件时,连接收件服务器的就是邮件托管平台,其IP会被用来去发件域做SPF记录校验,而邮件托管平台的域名又会被作为Sender/smtp.mail值,所以利用邮件托管平台发送邮件时,SPF记录校验是一定PASS的。
如果想查看一封邮件的真正来源,可以参考:为何垃圾邮件发件人会是自己?
总结
所有测试均在默认反垃圾规则设置下的163邮箱中完成。不同邮件服务商的检测、防护机制会有所差别,测试结果可能不同。
-
本文作者:kaiputenku
-
本文链接:
-
https://kaiputenku.github.io/2020/02/16/利用Swaks绕过SPF记录伪造邮件/
往期经典推荐: ---------------------------------------------------------------------- 渗透实战(一)|BSides Vancouver 2018 (Workshop) 移动安全(一)|Android设备root及神器Xposed框架安装 >>关于我们: WhITECat安全小组隶属于起源实验室分支安全小组,主要致力于分享小组成员技术研究成果、最新的漏洞新闻、安全招聘以及其他安全相关内容。团队成员暂时由起源实验室核心成员、一线安全厂商、某研究院、漏洞盒TOP10白帽子等人员组成。 欢迎各位大佬关注^_^ |
本文始发于微信公众号(WhITECat安全团队):你熟悉得那些诱人的邮件都是如何伪造得?
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论