当前位置:网站首页 > 黑客培训 > 正文

关于钓鱼邮件,你了解多少?(上)

freebuffreebuf 2021-02-25 358 0

本文来源:cagetest

这一两年来,由于祖国对信息安全的重视,各事业单位、关键基础设施在经过一轮轮hvv的锤炼后,简单的漏洞变得越来越少,蓝队攻击的成本越来越高,要不是有反序列化、fastjson、thinkphp、shiro等饭碗,日子就越来越不好过了。同时也包括一些wa的取证项目,已经很少有thinkphp一把梭的小可爱了。这时候在不想被领导骂菜的情况下,只能研究一下钓鱼了。

之前也经常也接到一些钓鱼邮件的实施工作,不过都是gophish加一个企业邮发过去了事。比较浅显,也只是以点击链接给出警示,点到为止。并不会有后续操作。钓鱼按照目的来分,有两种:

一种是在钓鱼邮件中防止一个链接或者二维码,用于搜集一些关键系统口令或者个人敏感信息。这种适用于钓鱼邮件演练的实施。

一种是直接在附件中、或者链接中引导下载RAT,直接控制对端计算机,然后在内网中横向移动,这种的场景是wa取证项目或者一些红蓝对抗。

其中几个难点如下:

1.如何投递邮件?

2.如何诱导对方点击你的恶意链接、恶意文件?

3.如何免杀自己的RAT?

在本文中,我们讨论前两个问题,免杀的话题大概加起来比前两个都多,下一篇会讨论。

如何投递邮件?

1.有钱买域名

在真实的钓鱼场景中,一般是用一些近似的邮箱或邮件服务商注册的邮箱,在给甲方做钓鱼邮件演练的时候,如果预算高,会注册一个和甲方域名相似的域名,可以使用urlcrazy工具自动寻找:urlcrazy -i  weibo.com

1612418781_601b8edd8efc39fd87d28.png?1612418782091

valid为false的就是没有人使用的,挑一个便宜的、顺眼的注册一个。

有了域名之后,我们还需要一个smtp服务器,这里推荐ewomail,安装很方便,可以一键部署:wget -c http://download.ewomail.com/ewomail-1.0.sh -  220 mail.365-offices.com.cn ESMTP Postfix

使用EHLO/HELO命令,向对端的MTA标识自己的身份,格式是EHLO + domain>,MTA将返回一些元信息:

-> EHLO abctest.com.cn

-  250-mail.365-offices.com.cn

-  250-PIPELINING

-  250-SIZE

-  250-ETRN

-  250-STARTTLS

-  250-AUTH PLAIN LOGIN

-  250-AUTH=PLAIN LOGIN

-  250-ENHANCEDSTATUSCODES

-  250-8BITMIME

-  250 DSN

接下来进入邮件发送部分,使用mail from命令指定邮件由谁发出:

-> MAIL FROM:admin@abctest.com>

-  250 2.1.0 Ok

RCPT TO指定发送给谁:

-> RCPT TO:alice@365-offices.com.cn>

-  250 2.1.5 Ok

使用DATA命令指定邮件正文,以[.]结束,

-> DATA

-  354 End data with CR>LF>.CR>LF>

-> Date: Fri, 22 Jan 2021 02:19:04 -0500

-> To: alice@365-offices.com.cn

-> From: admin@abctest.com

-> Subject: test Fri, 22 Jan 2021 02:19:04 -0500

-> Message-Id: 20210122021904.1687008@h33l0>

-> X-Mailer: swaks v20190914.0 jetmore.org/john/code/swaks/

->

-> This is a test mailing

->

->

-> .

-  250 2.0.0 Ok: queued as 6488F6000103

QUIT结束连接。

-> QUIT

-  221 2.0.0 Bye

=== Connection closed with remote host.

3.邮件发送人伪造

首先,我想先讨论发件人的伪造,如果邮箱后缀都不够相似的话,很难说是一封合格的邮钓鱼件。

我们观察以上最简单的发送邮件流程中,涉及到域名后缀的有三个地方:

与接收者MTA打招呼时的EHLO命令

指定发送人的MAIL FROM命令

正文里的From头部

原理上,我们可以按照上面讲述原理的过程,直接与对端MTA交互,自定义以上三个部分,就可以模拟任何地址发送邮件了,因为MTA之间没有任何认证的过程,我们来测试一下。

这里我们介绍一下swaks,是perl开发的邮件伪造工具,kali自带,简而言之,他封装了MTA之间的交互逻辑,你可以用它伪装成MTA或者使用真实邮箱与其他MTA交互。贴一下说明:

--from 要显示的发件人邮箱>

--ehlo 伪造的邮件ehlo头>

--body 邮件正文>

--header 邮件头信息,subject为邮件标题>

--data 源邮件>

后面有用到其他选项再说,swaks会默认使用:

-> X-Mailer: swaks v20190914.0 jetmore.org/john/code/swaks/

X-mailer类似于web中的User-Agent,定义了客户端的类型,swaks作为著名工具会被检测出来,建议大家自己定义这个头部,方法是加上 --header-X-Mailer头部。

1612422335_601b9cbf02a2502a5310e.png?1612422335361

我们换一个邮箱试试:

(这时候ip因为发邮件太多,被腾讯企业邮ban了,换一个gmail演示,先用一下swaks)

root@h33l0:/tmp# proxychains swaks --to xxx@gmail.com --from admin@1634.com

1612422403_601b9d035a8f50ec90ef6.png?1612422403769

似乎简简单单有手就行?

当然不是的,因为我没有给我自己的smtp服务器配置任何安全策略,它并不检查MTA的合法性,向gmail发送的邮箱域名也是精心挑选的1634.com。

从smtp通讯过程来看,最简单有效杜绝发件人伪造的方法就是验证MTA的合法性,所谓合法的MTA就是拥有MTA对应域名的所属的邮件服务器,当然,实际应用上也是这样做的。

1.4SPF规则

SPF规则,网上的文章很多了,这里快速的说明一下:

Sender Policy Framework,即发件人策略框架,用来查验MTA的合法性,使用DNS中的TXT记录来配置,查询域名对应SPF的记录方法为:

nslookup -type=txt domain>

1612422514_601b9d728de175ddac707.png?1612422514976这一条以v=spf1开头的即为spf记录,其中v=spf1是固定前缀,表示了使用spf的第一个版本,后面每一条规则以空格隔开,与iptables、ACL一致,从前向后匹配规则,命中即结束匹配,这些规则定义了那些ip是合法的MTA。

可以用以下方式来配置(仅列举常见的):

all : 所有ip

ip4 : 一个ip地址

a : 该域名对应的a记录

mx : 该域名对应的mx记录

include:继承一个域名的spf记录

每个规则可以有四种前缀:

"+"  Pass(通过)

"-"  Fail(拒绝)

"~"  Soft Fail(软拒绝)

"?"  Neutral(中立)

详细可以查看openspf.org

spf配置,可以简单分为两种情况,企业自建的邮件服务:exchange、zimbra,他们的spf记录是这样的:

1612422602_601b9dcab371a8c5286d3.png?1612422603073

比较简单,自己的a记录、mx记录、和一个ip地址。

如果是托管在云提供商上,就类似于上图中的:

cagetest.com text = "v=spf1 include:spf.mail.qq.com ~all"

这时候,确切的想要知道是哪些主机就需要继续查询,一直查询到根节点:

nslookup -type=txt spf.mail.qq.com

1612422631_601b9de77f0e48c76101b.png?1612422631786

nslookup -type=txt spf-a.mail.qq.com1612422653_601b9dfd8d12b685b1200.png?1612422653886


所以,无论如何,最终你得到的就是一些合法的ip地址,和-all,拒绝其他所有地址。

这里有一个工具checkdmarc可以帮你做快速检查,dmarc是另一种spf的升级版,实测国内运营商支持的比较少,这里不探讨,

root@h33l0:/home/p1pp0/ # checkdmarc cagetest.com

{

"domain": "cagetest.com",

"base_domain": "cagetest.com",

"dnssec": false,

"ns": {

"hostnames": [

"f1g1ns2.dnspod.net",

"f1g1ns1.dnspod.net"

],

"warnings": []

},

"mx": {

"hosts": [

{

"preference": 10,

"hostname": "mxbiz1.qq.com",

"addresses": [],

"tls": false,

"starttls": false

},

{

"preference": 20,

"hostname": "mxbiz2.qq.com",

"addresses": [

"163.177.89.176",

"61.241.49.98"

],

"tls": false,

"starttls": false

}

],

"warnings": [

"The DNS operation timed out after 2.0 seconds",

"mxbiz1.qq.com: SSL error: [SSL: DH_KEY_TOO_SMALL] dh key too small (_ssl.c:1123)",

"163.177.89.176 does not have any reverse DNS (PTR) records",

"61.241.49.98 does not have any reverse DNS (PTR) records",

"mxbiz2.qq.com: SSL error: [SSL: DH_KEY_TOO_SMALL] dh key too small (_ssl.c:1123)"

]

},

"spf": {

"record": "v=spf1 include:spf.mail.qq.com ~all",

"valid": true,

"dns_lookups": 8,

"warnings": [],

"parsed": {

"pass": [],

"neutral": [],

"softfail": [],

"fail": [],

"include": [

{

"domain": "spf.mail.qq.com",

"record": "v=spf1 include:spf-a.mail.qq.com include:spf-b.mail.qq.com include:spf-c.mail.qq.com include:spf-d.mail.qq.com include:spf-e.mail.qq.com include:spf-f.mail.qq.com include:spf-g.mail.qq.com -all",

"dns_lookups": 7,

"parsed": {

"pass": [],

"neutral": [],

"softfail": [],

"fail": [],

"include": [

{

"domain": "spf-a.mail.qq.com",

"record": "v=spf1 ip4:203.205.251.0/24 ip4:103.7.29.0/24 ip4:59.36.129.0/24 ip4:113.108.23.0/24 ip4:113.108.11.0/24 ip4:119.147.193.0/24 ip4:119.147.194.0/24 ip4:59.78.209.0/24 ip4:113.96.223.0/24 ip4:183.3.226.0/24 ip4:183.3.255.0/24 ip4:59.36.132.0/24 -all",

"dns_lookups": 0,

"parsed": {

"pass": [

{

"value": "203.205.251.0/24",

"mechanism": "ip4"

},

{

"value": "103.7.29.0/24",

"mechanism": "ip4"

},

{

"value": "59.36.129.0/24",

"mechanism": "ip4"

},


],

"neutral": [],

"softfail": [],

"fail": [],

"include": [],

"redirect": null,

"exp": null,

"all": "fail"

},

"warnings": []

},


},

"dmarc": {

"record": null,

"valid": false,

"location": null,

"error": "The DNS operation timed out after 2.0 seconds"

}

}

(太长了删除了一部分)

由于篇幅有限,接下来内容将会在下篇文章中展开,敬请期待。

转载请注明来自网盾网络安全培训,本文标题:《关于钓鱼邮件,你了解多少?(上)》

标签:黑客数据泄露网络安全技术钓鱼邮件钓鱼邮件攻击

关于我

欢迎关注微信公众号

关于我们

网络安全培训,黑客培训,渗透培训,ctf,攻防

标签列表