
文章目录
*作者: Macr0phag3,本文是FreeBuf原创的激励程序,未经许可,严禁转载.
熟悉kali或进行过smtp分析的人们听说过Swaks工具. 它被称为SMTP世界的瑞士. 工具肯定会很棒,但是我不了解其原理,因此感到有些东西丢失了. 所以我自己用Python编写了一个类似的工具,添加了邮件的功能,并顺便分析了一波原理.
SMTP协议是一种简单的邮件传输协议. 它属于TCP / IP协议群集. 它是用于将邮件从源地址传输到目标地址的一组规则,并且它控制邮件的传输方法. SMTP服务器是遵循SMTP协议的传出邮件服务器,用于发送或转发电子邮件.
SMTP模型如下:


简单的通信过程如下(以163邮箱为例,以下返回为正常):
第一步是请求建立连接:
telnet: telnet 163mx03.mxmail.netease.com 25
返回: 220 163.com用于Coremail系统的反垃圾邮件GT(163com [20141201])
第二步是打开传输通道:
发送: HELO
返回: 250 OK或:
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2Urz44XGUCa0xDrUUUUj
250-STARTTLS
250-SIZE 73400320
250 8BITMIME
如您所见,EHLO返回更详细的信息.
第三步是MAIL命令:
发送: 邮件发件人: <发件人的邮箱>
返回: 250邮件确认
第四步是RCPT命令:
发送: RCPT发送至: <收件人的邮箱>
返回: 250邮件确认
第五步是DATA命令:

发送: DATA
返回: 354用
然后,您可以输入电子邮件的内容,包括主题,电子邮件正文等.
第五步完成后,服务器将返回发送电子邮件的成功或失败:
返回: <= 250 Mail OK作为mx13,P8CowAB3KDAxa5tbCxAiEg-排队. 29768S2 1536912177
通过这种方式,发送了一封简单的电子邮件. 当然,邮件服务器会在此过程中做出各种判断,以避免轻易接受垃圾邮件.
完整的演示如下:
<= 220 163.com Anti-spam GT for Coremail System (163com[20141201])
=> ehlo antispam
<= 250-mail
<= 250-PIPELINING
<= 250-AUTH LOGIN PLAIN
<= 250-AUTH=LOGIN PLAIN
<= 250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UFQXaMIUCa0xDrUUUUj
<= 250-STARTTLS
<= 250-SIZE 73400320
<= 250 8BITMIME
=> mail from:<hr@huawei.com>
<= 250 Mail OK
=> rcpt to:<手动打码@163.com>
<= 250 Mail OK
=> data
<= 354 End data with <CR><LF>.<CR><LF>
=> to: 手动打码@163.com
=> from: hr@huawei.com
=> subject: 这是一封垃圾邮件
=>
=> DKIM?听上去很好吃
=> SPF 不是防晒系数吗
=> 我觉得 SMTP 很安全啊
=> 我们不存在垃圾邮件,那些都是正常的邮件
=> 邮件也是不存在的
=> .
<= 250 Mail OK queued as mx3,NcCowADX4z1_bJtbcsNOQw--.37583S2 1536912511
电子邮件结果:


因此,由于发送了许多Telnet电子邮件,因此与通常的发送电子邮件方式有很大不同. 我们都是通过Web界面或GUI发送的,如下所示:


我们使用Telnet直接发送邮件,实际上,它是在模拟第二个Send.
清除SMTP,然后假设是假电子邮件的发件人.
回顾先前的Telnet电子邮件过程,我们可以看到我们使用的邮件来自: 声称是hr@huawei.com,并且SMTP协议本身不需要对此语句进行身份验证,因此可以通过这种方式进行伪造. 那么,经过这么多年的发展,制造商为解决这个问题做了什么努力?
SPF是一种DNS记录,旨在防止垃圾邮件. 它是TXT记录的一种. 它用于注册一个域名所拥有的所有IP地址以发送邮件. 发件人向收件人发送电子邮件后,邮件接收服务器将接收电子邮件并执行以下操作:
检查哪个域声称已发送邮件电子邮件软件,并检查域的SPF记录的DNS.
确定发送服务器的IP地址是否与SPF记录中发布的IP地址匹配.
为电子邮件评分: 如果IP地址匹配,则电子邮件通过身份验证并获得肯定的分数. 如果IP地址不匹配,则消息将通过身份验证失败并收到否定分数. 然后,将这些结果应用于现有的反垃圾邮件过滤策略和启发式过滤. 或直接拒绝接受并返回550 MI: SPF.
让我们检查一下SPF记录163:
> nslookup -q=TXT 163.com
Server: 202.117.112.3
Address: 202.117.112.3#53
Non-authoritative answer:
163.com text = "v=spf1 include:spf.163.com -all"
Authoritative answers can be found from:
163.com nameserver = ns5.nease.net.
163.com nameserver = ns3.nease.net.
163.com nameserver = ns6.nease.net.
163.com nameserver = ns1.nease.net.
163.com nameserver = ns4.nease.net.
163.com nameserver = ns8.166.com.
163.com nameserver = ns2.166.com.
ns1.nease.net internet address = 123.58.173.177
ns3.nease.net internet address = 220.181.36.234
ns4.nease.net internet address = 123.125.48.245
ns5.nease.net internet address = 121.195.179.18
ns6.nease.net internet address = 52.215.24.44

v = spf1包括: spf.163.com-这是什么意思?
SPF记录包含在TXT记录中,格式如下:
v=spf1 [[pre] type [ext] ] ... [mod]
1,v = spf1: SPF版本. 如果使用发件人ID,则此字段应为v = spf2
2. pre: 匹配时定义返回值. 可能的返回值包括:
+: 默认值. 测试完成时,表示通过.
-: 表示测试失败. 此值通常是-all,表示没有其他匹配发生.
〜: 表示软故障,通常表示测试未完成.
?: 表示不. 当测试未完成时,通常也使用此值.
3. 类型: 定义使用的确认测试的类型:
include: 包含给定的域名测试. 以include: domain的形式编写.
all: 终止测试序列. 例如,如果选项为-all,则到达此记录意味着测试失败. 但是,如果不确定,则可以使用“?All”表示测试将被接受.
ip4: 使用IPv4进行身份验证. 可以使用ip4: ipv4或ip4: ipv4 / cidr的形式.
4. ext: 定义类型的可选扩展名. 如果此字段不可用,则仅使用一条记录进行查询.
5. mod: 这是最后一个指示,作为记录的更正值.
测试后的以下结果:
通过; SPF记录指定要允许发送的主机;接受
硬故障; SPF记录已指定不允许主机发送;被拒绝
软件故障; SPF记录已指定不允许主机发送但正在转换主机. 接受但已标记
中性; SPF记录清楚地表明它与有效性无关;接受
否;此域中没有SPF记录,或者SPF记录不评估结果;接受
因此,当我们声称hr@qq.com向163发送电子邮件时,163将不会接受(因为qq由spf记录):
<= 220 163.com Anti-spam GT for Coremail System (163com[20141201])
=> ehlo antispam
<= 250-mail
<= 250-PIPELINING
<= 250-AUTH LOGIN PLAIN
<= 250-AUTH=LOGIN PLAIN
<= 250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UFsDjanUCa0xDrUUUUj
<= 250-STARTTLS
<= 250-SIZE 73400320
<= 250 8BITMIME
=> mail from:<hr@qq.com>
<= 550 MI:SPF 163 mx45,X8CowEB5qUXsdZtbeT4JTQ--.35331S2 1536914924 http://mail.163.com/help/help_spam_16.htm?ip=手动打码&hostid=mx45&time=1536914924

DKIM是一种验证技术,可以防止电子邮件欺诈. 它通过邮件加密和身份验证来验证通过电子邮件发送的域名.
DMARC是基于现有SPF和DKIM协议的可扩展电子邮件身份验证协议. 已在邮件发送方和接收方双方建立了邮件反馈机制,以便利邮件发送方和邮件接收方改善和监督域名管理.
如果您有兴趣,可以自己检查信息.
更多,SPF可以一劳永逸吗?其实并不是. 以163和qq为例,找到发送者的spf记录,并将其标记为硬故障. 当然,这是最好的. 直接判断. 但是,如果发件人使用软故障或没有SPF记录怎么办?例如,huawei.com是软故障:
huawei.com text = "v=spf1 ip4:45.249.212.32 ip4:45.249.212.35 ip4:119.145.14.93 ip4:58.251.152.93 ip4:194.213.3.17 ip4:206.16.17.72 ip4:45.249.212.255 ip4:45.249.212.187/29 ip4:45.249.212.191 ip4:185.176.76.210 ~all"
如果发生这种情况,则取决于制造商的工作. 一般来说,它是发布的.
完成假冒发件人之后,让我们谈谈邮件.
电子邮件是最古老的匿名攻击之一. 通过将机器设置为连续发送大量电子邮件到同一地址,攻击者可以耗尽接收者的网络带宽. 由于这种攻击方法简单易用,因此,还有许多用于发送匿名电子邮件的工具,只要对方知道您的电子邮件地址,您就可以进行攻击,因此这是每个人最有价值的攻击方法.
由于可以伪造发件人,因此发送邮件看起来很容易. 确实是这样. 另外,由于大量的请求和链接,它将触发接收者的各种抵制. 接下来,讨论邮件的三种不同方式.
单线程,只发送它,拿起无限循环并执行: 而1: xxxx
短连接是最容易想到的. 多线程,每个线程都会启动一个链接请求,并在发送一个链接请求后停止. 如果线程数很少,也可以,一旦获得更多线程,您就会得到疯狂的提示: 421连接过多. 它在ehlo反垃圾邮件中被杀死. 在大多数情况下,100个线程可以成功生成20个数据包,这很好. 发送链接后释放链接非常浪费. 而且,当smtp服务器对频繁的连接请求非常敏感时,很容易禁用ip(例如qq).
长连接: 设置线程数后,一旦ehlo反垃圾邮件成功,它将重复发送邮件到数据. 成功发送邮件后,链接将不会被释放,并且将一直发送. 如果接收者的smtp服务器强制释放该链接,则ehlo反垃圾邮件将重新启动. 在这种情况下,如果不手动停止,您将始终尝试链接和发送电子邮件. 轰炸效率加.
基于上述原则和思想,我自己编写了一个命令行工具: email_hack
usage: email_hack.py [-h] -faddr FROM_ADDRESS -taddr TO_ADDRESS
[-tnum THREADS_NUM] [-v VERBOSE] [-c CRAZY_MODE]
optional arguments:
-h, --help show this help message and exit
-faddr FROM_ADDRESS, --from_address FROM_ADDRESS
fake from address
-taddr TO_ADDRESS, --to_address TO_ADDRESS
the address you want to delivery
-tnum THREADS_NUM, --threads_num THREADS_NUM
how many threads you want
-v VERBOSE, --verbose VERBOSE
verbose level
-c CRAZY_MODE, --crazy_mode CRAZY_MODE
Keep sending fake email (** Use with caution **)
有关详细信息,请访问gayhub: .
假邮件效果:
163:


qq:


邮件效果:





供应商: 对spf记录使用硬故障标签. 并且在验证过程中预测到软故障标记时,将尽可能地拒绝它. 如果可能,请转到DKIM和DMARC
用户: 有关重要的电子邮件信息,您可能希望检查原始电子邮件.




如果仅接收到一个,并且列出的IP与声明的地址不匹配,则它是伪造的. 尽管可以伪造Received标头,但是新的Received标头将添加到邮件的标头中,因此,如果存在伪造的Received,它将始终位于后面.
如果有多个已接收,则第一个已接收由常规SMTP服务器(网易,腾讯等)转发,然后必须对其进行验证并且有效的用户可以转发它,因为这些制造商将不会在以下位置打开匿名转发这次,您只需要查看IP和声明的身份是否一致,协议就可以了. 如果您看起来不规则,则需要更加小心.
以2个示例为例:
未伪造:




伪造:




对于大量并发连接请求,不仅必须拒绝它,而且还必须在一段时间内阻止其IP. 经过测试,qq将在大量请求后阻塞,163只是拒绝连接,并返回类似“请在15分钟内重试”的信息,实际上,您仍然可以发起连接请求...╮(╯▽╰ )╭. 最后,当电子邮件多次发送失败时,请直接断开连接,不要保留频道,并强制发件人重新发起连接请求.
*作者: Macr0phag3,本文是FreeBuf原创的激励程序,未经许可,严禁转载.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-167377-1.html
你是怎么算出来这结果的
啊啊啊
实为恶狗假自在