你熟悉得那些诱人的邮件都是如何伪造得?

  • A+
所属分类:安全闲碎

利用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记录伪造邮件/

往期经典推荐:

----------------------------------------------------------------------

漏洞笔记|记一次与XXE漏洞的爱恨纠缠

深入探究浏览器编码及XSS Bypass

Apache Solr远程命令执行复现

“最后”的Bypass CDN 查找网站真实IP

渗透实战(一)|BSides Vancouver 2018 (Workshop)

移动安全(一)|Android设备root及神器Xposed框架安装

内网信息收集篇

MSF 下域内渗透


>>关于我们:

WhITECat安全小组隶属于起源实验室分支安全小组,主要致力于分享小组成员技术研究成果、最新的漏洞新闻、安全招聘以及其他安全相关内容。团队成员暂时由起源实验室核心成员、一线安全厂商、某研究院、漏洞盒TOP10白帽子等人员组成。

欢迎各位大佬关注^_^

你熟悉得那些诱人的邮件都是如何伪造得?


 


本文始发于微信公众号(WhITECat安全团队):你熟悉得那些诱人的邮件都是如何伪造得?

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: