红蓝对抗之邮箱入口

目录

爆破邮箱账号

1:收集目标邮箱系统账号

2:验证邮箱账号可用性

3:爆破邮箱账号

绕过SPF

SPF记录的语法

1:SPF解析不当导致绕过

2、SPF配置不当导致绕过

3、高权限用户绕过

4、邮件客户端内容解析差异

5、From字段名截断绕过

鱼叉钓鱼

钓鱼文件制作

发送钓鱼邮件


在红蓝对抗中,邮箱是一个非常重要的一个入口。针对邮箱攻击有几个思路:

  • 邮箱系统是否有漏洞
  • 能否爆破出可用的邮箱账号进行登录(根据爆破出账号密码的权限再进行下一步操作)
  • 能否伪造任意用户发送邮件进行鱼叉钓鱼(SPF是否可绕过)

本文中,关于邮箱系统的漏洞暂不提及,会在以后的文章中继续分析。本文主要讲如何爆破出可用的邮箱账号和能否绕过SPF伪造任意用户发送邮件。

爆破邮箱账号

1:收集目标邮箱系统账号

要想爆破邮箱账号,肯定首先得有足够多的邮箱账号。那么,我们从哪里去获取目标邮箱系统的邮箱账号呢?

  • https://hunter.io/  
  • https://www.email-format.com/i/search/

这两个网站只要输入目标域名,就可以从互联网上搜到对应格式的邮箱账号。

红蓝对抗之邮箱入口_第1张图片

红蓝对抗之邮箱入口_第2张图片

还有两个Github上的项目:

  • https://github.com/bit4woo/teemo
  • https://github.com/laramies/theHarvester

2:验证邮箱账号可用性

收集到邮箱账号后,我们还需要对邮箱账号的可用性进行检测。因为有些邮箱账号很有可能已经弃用了。通过下面这些网站可以验证邮箱地址的可用性:

  • https://mailtester.com/testmail.php
  • https://github.com/Tzeross/verifyemail

3:爆破邮箱账号

筛选出可用的邮箱账号后,我们就需要对目标邮箱系统进行爆破了。对邮箱进行爆破,有两种方式:

  • 一是对邮箱的端口号进行爆破
  • 二是对网页版的邮箱登录处进行爆破。

既然对端口号进行爆破,那么我们就自然得知道邮箱的常用端口号了。

  • SMTP默认端口是25 ,SSL加密端口是 465 
  • POP3默认端口是110,SSL加密端口是 995 
  • IMAP默认端口是143,SSL加密端口是 993

传送门:SMTP、POP3和IMAP邮件协议

常见的爆破工具有:超级弱口令检查工具、medusa、hydra、SNETCracker、APT34组织、 owa爆破工具。

绕过SPF

     SPF(Sender Policy Freamwork)发件人策略框架,是一种以IP地址认证电子邮件发件人身份的技术。在SPF出现之前,发件人的邮箱地址是可以由发信人任意声明的,这带来了很大的危险性。SPF的出现,就是为了防止发信人随意伪造发件人。

     SPF记录实际上是服务器的一个DNS记录,原理如下:假设邮件服务器收到一封来自IP为192.168.10.10主机发送的邮件,并且声称发件人为 [email protected] 。邮件系统为了确认发件人不是伪造的,邮件服务器会去查询 qq.com 的SPF记录。如果该域的SPF记录中允许该IP发送邮件,则邮件服务器就认为该邮件是合法的, 否则会认为这是一封非正常邮件并且拒收或标记为垃圾、仿冒邮件。因为攻击者虽然可以声称邮件是来自 qq.com ,但是他却无权操作qq.com的DNS记录,并且他也无法伪造自己的IP地址为SPF中允许的IP地址,因此正确配置SPF还是很有效果的。目前大多数邮件服务提供商都会去验证SPF。

   邮件系统如果没有配置SPF,则攻击者可以随便伪造邮件。即使配置了SPF(错误配置),也存在被绕过的风险。下面命令查看目标域名邮件系统是否配置SPF。

nslookup -type=txt taobao.com

红蓝对抗之邮箱入口_第3张图片

SPF记录的语法

一条 SPF 记录定义了一个或者多个策略,而策略则定义了哪些 IP 是允许的,哪些 IP 是拒绝的。

这些策略包括以下几类:

all | ip4 | ip6 | a | mx | ptr | exists | include

all

表示所有 IP,肯定会命中。因此通常把它放在 SPF 记录的结尾,表示处理剩下的所有情况。例如:

"v=spf1 -all" 拒绝所有
"v=spf1 +all" 接受所有

ip4

格式为 ip4: 或者 ip4:/,指定一个 IPv4 地址或者地址段。如果prefix-length没有给出,则默认为/32。例如:

"v=spf1 ip4:192.168.10.1/24 -all"
只允许在 192.168.10.1 ~ 192.168.10.255 范围内的 IP

ip6

格式和ip4的很类似,默认的prefix-length/128。例如:

"v=spf1 ip6:1080::8:800:200C:417A/96 -all"
只允许在 1080::8:800:0000:0000 ~ 1080::8:800:FFFF:FFFF 范围内的 IP

a 和 mx

这俩的格式是相同的,以 为例,格式为以下四种之一:

a
a/
a:
a:/

会命中相应域名的 a 记录(或 mx 记录)中包含的 IP 地址(或地址段)。如果没有提供域名,则使用当前域名。例如:

"v=spf1 mx -all"
允许当前域名的 mx 记录对应的 IP 地址。

"v=spf1 mx mx:deferrals.example.com -all"
允许当前域名和 deferrals.example.com 的 mx 记录对应的 IP 地址。

"v=spf1 a/24 -all"
类似地,这个用法则允许一个地址段。

例如,这是一个比较常见的 SPF 记录,它表示支持当前域名的 a 记录和 mx 记录,同时支持一个给定的 IP 地址;其他地址则拒绝:

v=spf1 a mx ip4:173.194.72.103 -all

include

格式为include:,表示引入域名下的 SPF 记录。注意,如果该域名下不存在 SPF 记录,则会导致一个PermError结果。例如:

"v=spf1 include:example.com -all" 即采用和 example.com 完全一样的 SPF 记录

exists

格式为 exists:。将对执行一个 A 查询,如果有返回结果(无论结果是什么),都会看作命中。

ptr

格式为ptr或者ptr:。使用ptr机制会带来大量很大开销的 DNS 查询,所以连官方都不推荐使用它。

访问控制

每个策略可以有四种前缀:

"+"  Pass(通过)
"-"  Fail(拒绝)
"~"  Soft Fail(软拒绝)
"?"  Neutral(中立)

测试时,将从前往后依次测试每个策略。如果一个策略包含了要查询的 IP 地址(称为命中),则测试结果由相应策略的前缀决定。默认的前缀为+,也就是通过。如果测试完所有的策略也没有命中,则结果为Neutral中立。

除了以上四种情况,还有 None(无结果)、PermError(永久错误)和 TempError(临时错误)三种其他情况。对于这些情况的解释和服务器通常的处理办法如下:

结果 含义 服务器处理办法
Pass 发件 IP 是合法的 接受来信
Fail 发件 IP 是非法的 退信
Soft Fail 发件 IP 非法,但是不采取强硬措施 接受来信,但是做标记
Neutral SPF 记录中没有关于发件 IP 是否合法的信息 接受来信
None 服务器没有设定 SPF 记录 接受来信
PermError 发生了严重错误(例如 SPF 记录语法错误) 没有规定
TempError 发生了临时错误(例如 DNS 查询失败) 接受或拒绝

注意,上面所说的服务器处理办法仅仅是 SPF 标准做出的建议,并非所有的邮件服务器都严格遵循这套规定。 

关于v=spf1,这是必须的,这个表示采用 SPF 1 版本,现在它的最新版本就是第 1 版。

1:SPF解析不当导致绕过

假设目标邮件系统的SPF记录设置为

v=spf1 ip4:192.168.10.0/24 ~all

这条SPF记录的意思是只接收192.168.10.0/24范围内的IP发送的邮件,其他地址发送的邮件软拒绝。

这就存在两个安全隐患:

  • 一个是IP段过大,在C段里面,只要获取任意一台主机的权限,那么就可以使用合法的IP进行邮件伪造。
  • 一个是软拒绝,也就是会接受来信,但可能被标记为垃圾邮件。如果SPF记录设置拒绝,就会有大量的邮件被丢弃或者隔离,影响办公效率,有一些邮件系统管理员为了减少业务影响,而采用软拒绝的策略。

当 SPF 记录设置成 ~all 时,通过测试可以发现,outlook 邮箱可以接收邮件,QQ邮箱不接收,163邮箱被标记为垃圾邮件。

还有一种极为严重的错误,就是SPF解析记录配置错误,早在之前鹅厂就出现过SPF解析错误,比如:

v=spf1 ip4:113.110.223.0/24 183.110.226.0/24 183.110.255.0/24 59.110.132.0/24 -all

这里介绍一个工具,输入域名和SPF记录,可快速检查SPF记录是否正确

测试地址:https://www.kitterman.com/spf/validate.html

红蓝对抗之邮箱入口_第4张图片

SPF记录报错,在这条SPF记录中,存在多个IP段,但只有开头的一段ip用了ipv4,这就导致了语法错误。因为这个错误,将导致整个SPF记录完全失效,因为SPF无效,邮件接收方的SPF检测功能也就完全失效了。

综上,当我们在查看一个域名的SPF记录时,它其实不只是一条解析记录,更是一种邮件安全的策略,SPF记录配置不严或SPF解析错误,就容易导致大量本该被拦截的邮件直接被放进来,而绕过的策略就隐藏在这条SPF记录里面。

2、SPF配置不当导致绕过

邮件服务器管理员做SPF配置时,其实是需要两个步骤的。首先在域名中增加SPF记录,向支持SPF功能的邮件服务器提供验证信息,使别人能验证自己;另外,需要配置邮件服务器支持 SPF,这样才可以验证别人。

那么,在SPF配置过程中,也常常因为配置不当导致绕过,比如:

第一种情况:

域名增加了SPF记录,但是邮件服务器不支持SPF检查或邮件网关未开启SPF检测,无法验证邮件来源。这种情况下,我们声明了自己是谁,但却无法验证对方是谁,SPF检测无效,可伪造任意用户发送到你的域名邮箱里。

第二种情况:

SPF解析在公网DNS,邮件服务器配置内部DNS,内部DNS无法进行SPF解析,从而导致绕过,可从公网伪造任意用户发送邮件。

第三种情况:

攻击者在公司内网,内网SMTP服务器开启匿名邮件发送或者在信任服务器IP段,就可以使用任意用户发送邮件。

比如,当 mynetworks=192.168.10.0/24,在内网,任意一台终端就可以直连公司的SMTP服务器,伪造了一封来自 [email protected] 的邮件发给自己。

python SimpleEmailSpoofer.py -t [目标邮箱]  -n QQ邮箱管理员 -f [email protected] -j "邮件主题"  -e 1.txt  -s [内网邮件服务器IP]

3、高权限用户绕过

对于Exchange邮箱系统,拥有Domain admins权限的域用户,可通过outlook直接指定发件人,伪造任意发件人发送邮件。伪造邮件的方式十分简单,且邮件头无法显示真实IP。

测试过程:我给自己的账号添加了Domain admin权限。

使用Outlook2013客户端指定发件人发送邮件,接收邮件直接显示伪造人的名字,伪造成功

使用Outlook2016客户端测试,邮件接收方的发件人位置显示”XXX代表XXX”,伪造失败

红蓝对抗之邮箱入口_第5张图片

4、邮件客户端内容解析差异

很多时候,大部分的企业邮箱SPF配置都是正确的,理论上,它会对每一封邮件进行检测,那么它是如何验证发件人IP地址的?
我们使用一个SPF在线检测的工具,来做一个的尝试,利用我本地搭建的匿名SMTP服务器伪造 [email protected] 邮箱。
测试地址:https://www.kitterman.com/spf/validate.html

1、在IP address: 里输入将要发信的IP地址,即本地ip地址。
2、SPF Record v=spf1...://-->:输入nslookup查出来的SPF记录
3、Mail From address:输入将要发信的发件人

红蓝对抗之邮箱入口_第6张图片

点击Test SPF Recod进行验证:

红蓝对抗之邮箱入口_第7张图片

结果毫无疑问,SPF验证失败,伪造邮箱不成功,伪造的邮件将会被退回。
通过查看邮件头信息,有两个比较重要的字段,Sender和From。
Sender字段,代表的是邮件的实际发送者,邮件接收方会对它的邮件域名进行SPF检测,确认是否包含了发信人的IP地址。From字段,代表的是邮件发送人,即邮件里所显示的发件人,容易被伪造。
在SPF配置有效的情况下,Sender必须通过SPF检验,所以我们可以设置为正常的邮件服务器地址,然后对From字段进行伪造。
使用swaks做一个邮件测试:

sudo ./swaks --to 67*****[email protected]  --from [email protected]  --h-From: '=?GB2312?B?UVHTys/kudzA7dSx?= ' --ehlo evil.com --body hello --header "Subject: test"
    --from   <实际发件人,对应Sender字段>
    --h-From <邮件显示的发件人,对应From字段>

QQ邮箱网页版查看邮件,Sender和From字段不一样时,发件人的位置显示由[email protected]代发。

红蓝对抗之邮箱入口_第8张图片

使用Foxmail客户端查看同一封邮件,Sender和From字段不一样时,不显示代发,伪造成功。

红蓝对抗之邮箱入口_第9张图片

我们分别使用网页版邮箱和客户端邮箱打开同一封邮件,通过对比可以发现,不同的邮件客户端对发件人位置的内容解析是不一样的。
平时工作中,不少使用腾讯企业邮箱的童鞋,都喜欢使用Foxmail客户端查收邮件,这就给了我们成功伪造邮件的可乘之机。
通过测试可以发现:qq邮箱、163邮箱网页版均会显示代发,Outlook邮箱不显示代发,具体邮件客户端软件可具体再行测试。

5、From字段名截断绕过

当我们伪造邮件发送的时候,Sender和From字段不一样,邮件接收方会这样提示邮件代发。

那么有没有办法只显示伪造的发件人,不显示邮件代发呢?
在网络上看到一种思路,来源于网贴《关于邮件伪造的一些新思路》,挺有意思的。
在用SMTP发送电子邮件时,发件人别名,格式为:From:发件人别名<邮件地址>。通过对发件人别名字段填充大量的特殊字符,使邮箱客户端截取真实的邮件地址失败,从而只展示我们伪造的发件人别名和伪造邮箱。
邮件伪造测试过程:

  1. 在QQ邮箱中导出mail.eml文件,删除前面不必要的字段信息。
  2. 填充发件人别名,伪造邮件头Fron字段
From:=?gb2312?B?udzA7dSxIDxhZG1pbkBxcS5jb20+0aGhoaGhoaGhoaGhoaGhoaGhoaGhoQ==?=
=?gb2312?B?oaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGh?=
=?gb2312?B?oaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGh?=
=?gb2312?B?oaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGh?=
=?gb2312?B?oaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGh?=
=?gb2312?B?oaGhoaGhoaGhoaGhoaGhoaGhoaGhoSAgICAgICAgICAgICAgICAgIKGkoaQ=?=
=?gb2312?B?oaQgICAgICAgICAgICAgICAgIKGhICAgICAgIKGkoaShpA==?=  

使用 —data 参数发送邮件 

sudo ./swaks --data mail.eml --to 67*****[email protected] --from [email protected]

成功发送给目标邮箱,QQ邮箱接收邮件后的呈现效果

红蓝对抗之邮箱入口_第10张图片

备注:从测试情况看,伪造的邮件进了QQ垃圾箱,但这种思路还是挺不错的,重新Fuzz,或许可以构造特殊的数据包触发这个问题。

鱼叉钓鱼

钓鱼文件制作

  • 直接exe格式的木马文件,这里就不细说了。MSF和CobaltStrike都可以直接生成。
  • 生成word宏文件

发送钓鱼邮件

如果目标邮件服务器没有配置SPF的话,可以直接使用swaks伪造邮件发送

参考文章:邮件伪造之SPF绕过的5种思路

                  红队测试之邮箱打点

                  SPF 记录:原理、语法及配置方法简介

你可能感兴趣的:(红蓝对抗)