Swaks基本用法:
1、swaks --to test@qq.com 测试邮箱的连通性;
2、参数说明(这里只是简单的罗列了一些,至于更加具体的内容可以使用–help进行查看了解):
--from [email protected] //发件人邮箱;
--ehlo qq.com //伪造邮件ehlo头,即是发件人邮箱的域名。提供身份认证
--body "http://www.baidu.com" //引号中的内容即为邮件正文;
--header "Subject:hello" //邮件头信息,subject为邮件标题
--data ./Desktop/email.txt //将正常源邮件的内容保存成TXT文件,再作为正常邮件发送;
Kali内置了swaks
如图所示:
实际测试:
1。临时邮箱申请
2.伪造一份来自 360hr 的邮件,收件人为9wgdxije@iffygame.com,内容为:“123456”,如下图所示:
swaks --to [email protected] --from hr@360 --ehlo 360.com --body "123456"
3.查看临时邮件收件箱情况,出现了来自360hr的邮件,内容为12356
补充(附件发送)
1.将当前目录下1.txt文件当附件发送给9wgdxije@iffygame.com
2.将–body 中的内容写入到1.txt中,在发送附件
swaks --to [email protected] --from hr@360 --ehlo 360.com --body "123456" --data 1.txt
造成原因
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 伪造邮件发送,思路偏向于防守和挖洞,而后两点则是运用一些技术实践任意邮件伪造漏洞,思路偏向于红队,接下来会再出一篇实操任意邮件伪造的思路。
版权归原作者 _s1mple 所有, 如有侵权,请联系我们删除。