目录

Swaks基本用法:

补充(附件发送)

造成原因

1.1前提

1.2语法

1.3绕过

1.4总结


Swaks基本用法:

1、swaks --to test@qq.com 测试邮箱的连通性;

2、参数说明(这里只是简单的罗列了一些,至于更加具体的内容可以使用–help进行查看了解):

--from  test@qq.com     //发件人邮箱;
--ehlo   qq.com      //伪造邮件ehlo头,即是发件人邮箱的域名。提供身份认证
--body  "http://www.baidu.com"    //引号中的内容即为邮件正文;
--header  "Subject:hello"   //邮件头信息,subject为邮件标题
--data   ./Desktop/email.txt    //将正常源邮件的内容保存成TXT文件,再作为正常邮件发送;

Kali内置了swaks

如图所示:

能不能伪造一个email地址发邮件 如何伪造邮件_IP

实际测试:

1。临时邮箱申请

能不能伪造一个email地址发邮件 如何伪造邮件_发送邮件_02

2.伪造一份来自 360hr 的邮件,收件人为9wgdxije@iffygame.com,内容为:“123456”,如下图所示: 

swaks --to 9wgdxije@iffygame.com --from hr@360 --ehlo 360.com --body "123456"

能不能伪造一个email地址发邮件 如何伪造邮件_发送邮件_03

3.查看临时邮件收件箱情况,出现了来自360hr的邮件,内容为12356

能不能伪造一个email地址发邮件 如何伪造邮件_发送邮件_04

 

补充(附件发送)

1.将当前目录下1.txt文件当附件发送给9wgdxije@iffygame.com

能不能伪造一个email地址发邮件 如何伪造邮件_发送邮件_05

能不能伪造一个email地址发邮件 如何伪造邮件_IP_06

 

2.将–body 中的内容写入到1.txt中,在发送附件 

 

swaks --to 9wgdxije@iffygame.com --from hr@360 --ehlo 360.com --body "123456" --data 1.txt

能不能伪造一个email地址发邮件 如何伪造邮件_发送邮件_07

造成原因

1.1前提

  • SMTP协议是简单的邮件传输协议,目前邮件还是使用这个协议通信,但是它本身并没有很好的安全措施。SMTP协议本身没有机制鉴别寄件人的真正身份,电子邮件的“寄件者”一栏可以填上任何名字,于是伪冒他人身份来网络钓鱼或寄出垃圾邮件便相当容易,而真正来源却不易追查。
  • MX记录用于指定负责处理发往收件人域名的邮件服务器。MX记录允许设置一个优先级,当多个邮件服务器可用时,会根据该值决定投递邮件的服务器(值越小优先级越高)。SMTP会根据MX记录的值来决定邮件的路由过程。
  • SPF记录的全称为 Sender Policy Framework,中文译作“发件人策略框架”,它是一套电子邮件认证机制,可以确认电子邮件确实是由网域授权的邮件服务器寄出,防止有人伪冒身份网络钓鱼或寄出垃圾电邮。SPF允许管理员设定一个DNS TXT记录或SPF记录设定发送邮件服务器的IP范围,如有任何邮件并非从上述指明授权的IP地址寄出,则很可能该邮件并非确实由真正的寄件者寄出。

1.2语法

查看一个域名的SPF记录命令:

nslookup -type=txt example.com //windows
dig -t txt example.com         //linux

SPF记录会结合“匹配机制”和“限定词”使用,它其实就是一条有特殊语法的TXT记录

匹配机制主要用于定义和指定可由该域名发送邮件的主机,其定义方式包括:

  • all 匹配任何主机,它写在SPF记录最后以匹配在其前面所列出的主机
  • ip4 匹配 IPv4 地址或网络范围
  • ip6 匹配 IPv6 地址或网络范围
  • a 匹配主机名或域名
  • mx 匹配域名的MX记录,当出站与入站邮件为同一服务器时通常采用此种机制
  • ptr 通过DNS反向记录来匹配发件人IP和域名,由于会增加DNS负载,一般不采用此种机制
  • exists 只检查域是否在DNS中存在
  • include 将发件人IP和SPF记录指向另一个域,这种匹配机制通常用于云服务,

匹配机制会结合一些限定词来使用,以告诉服务器找到一条匹配记录时该怎么办。常见的限定词有:

  • + 放行,如果没有明确指定限定词,则为默认值
  • - 硬拒绝,直接拒绝来自未经授权主机的邮件
  • ~ 软拒绝,邮件可被接受,也可被标记为垃圾邮件
  • ? 中性,不考虑邮件是否被接受

一些实例(v=spf1 指采用SPF1版本,现在它的最新版本就是第 1 版):

"v=spf1 -all" (拒绝所有,表示这个域名不会发出邮件)
"v=spf1 +all" (接受所有)
"v=spf1 ip4:192.168.0.1/16 -all"(只允许 192.168.0.1/16 范围内的IP发送邮件)
"v=spf1 mx -all"(允许当前域名的 mx 记录对应的IP地址发送邮件)
"v=spf1 mx mx:test.example.com -all"(允许当前域名和 test.example.com 的 mx 记录对应的IP地址发送邮件)
"v=spf1 a mx ip4:173.194.72.103 -all"(允许当前域名的 a 记录和 mx 记录和一个给定的IP地址发送邮件)
"v=spf1 include:example.com -all"(采用和 example.com 一样的SPF记录)

1.3绕过

SPF解析不当

  • 语法错误将导致SPF记录完全失效,https://www.kitterman.com/spf/validate.html 网站输入域名和SPF记录,可以检查SPF记录是否正确(SPF记录本质上是一个DNS记录,所以并不是修改之后立即生效的,通常需要几个小时的时间)
  • 允许IP段过大,只要攻击者拿下一台网段内的机器即可绕过
  • ~all 软拒绝,会接受来信,但可能被标记为垃圾邮件(outlook 邮箱可以接收邮件,qq 邮箱不接收,163 邮箱标记为垃圾邮件)SPF记录设置硬拒绝,就会有大量的邮件被丢弃或者隔离,影响办公效率,为了减少业务影响,有些管理员采用软拒绝的策略,但也会在一定程度上造成安全风险

SPF配置不当

  • 域名增加了SPF记录,但是邮件服务器不支持SPF检查或邮件网关未开启SPF检测,无法验证邮件来源。这种情况下,我们声明了自己是谁,但却无法验证对方是谁,SPF检测无效,可伪造任意用户发送到你的域名邮箱里
  • SPF解析在公网DNS,邮件服务器配置内部DNS,内部DNS无法进行SPF解析,从而导致绕过,可从公网伪造任意用户发送邮件
  • 攻击者在公司内网,内网SMTP服务器开启匿名邮件发送或者在信任服务器IP段,就可以使用任意用户发送邮件

高权限用户绕过

  • Exchange 邮箱系统,拥有 Domain admin 权限的域用户,可以通过 outlook 直接指定发件人,伪造任意发件人发送邮件并且邮件头不会显示真实IP,但是这条没有什么实际意义,已经拥有 Domain admin 权限就没必要进行邮件伪造了

邮件客户端内容解析差异

From 字段特殊字符填充绕过

1.4总结

上一小节只讲了前三点进行SPF绕过的原理,因为写这篇随笔的初衷是如何判断邮件服务器有无配置SPF,如果没有或配置不当的话可以直接使用 swaks 伪造邮件发送,思路偏向于防守和挖洞,而后两点则是运用一些技术实践任意邮件伪造漏洞,思路偏向于红队,接下来会再出一篇实操任意邮件伪造的思路。