简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 即简单邮件传输协议,是在Internet传输email的事实标准。正如名字所暗示的那样,它其实是一个非常简单的传输协议,无需身份认证,而且发件人的邮箱地址是可以由发信方任意声明的,利用这个特性可以伪造任意发件人。
RFC821:https://tools.ietf.org/html/rfc821
• SMTP默认端口:25
• SSL SMTP默认端口:465
swaks 工具基本用法
输出内容的含义
===: swaks输出的信息行
*: swaks中产生的错误
->: 发送到目标的预期行(无错误)
<- : 服务器的预期回复(无错误)
<**: 服务器返回的错误信息
swaks --to <要测试的邮箱> 用来测试邮箱的连通性
swaks --to ******@qq.com
=== Trying mx3.qq.com:25...
=== Connected to mx3.qq.com.
<- 220 newxmmxsza51.qq.com MX QQ Mail Server.
-> EHLO kali
<- 250-newxmmxsza51.qq.com
<- 250-STARTTLS
<- 250-SIZE 73400320
<- 250 OK
-> MAIL FROM:<kali@kali>
<- 250 OK.
-> RCPT TO:<******@qq.com>
<- 250 OK 1
-> DATA
<- 354 End data with <CR><LF>.<CR><LF>.
-> Date: Mon, 22 Mar 2021 22:03:58 -0400
-> To: ******@qq.com
-> From: kali@kali
-> Subject: test Mon, 22 Mar 2021 22:03:58 -0400
-> Message-Id: <20210322220358.001219@kali>
-> X-Mailer: swaks v20201014.0 jetmore.org/john/code/swaks/
->
-> This is a test mailing
->
->
-> .
<** 550 Domain may not exist or DNS check failed [MAz3LfNr0S8JzuNjNLtpwmZUSRZisIHafHsJ/Fq33Wdo8+ze9yLN3dAcYpHgRxVRXQ== IP: ************].
-> QUIT
<- 221 Bye.
=== Connection closed with remote host.
无法发送成功,具体原因见附录。
选项说明:(更多高级功能请查man手册)
--from 000@qq.com //发件人邮箱;
--ehlo qq.com //伪造邮件ehlo头,即是发件人邮箱的域名。提供身份认证
--body "http://www.baidu.com" //引号中的内容即为邮件正文;
--header "Subject:邮件标题" //邮件头信息,subject为邮件标题
--data ./Desktop/email.txt //将正常源邮件的内容保存成TXT文件,再作为正常邮件发送;
–attach 添加附件
附带选项的测试:
swaks --to jqcanm56917@chacuo.net --from admin@********.com --ehlo ********.com --header "Subject:安全性警告" --body "您的邮箱密码已过期 请尽 快更改。"
=== Trying mx.chacuo.net:25...
=== Connected to mx.chacuo.net.
<- 220 web1905 chcuo.net server 0.2
-> EHLO *********.com
<- 250 web1905
-> MAIL FROM:<admin@********.com>
<- 250 Ok
-> RCPT TO:<jqcanm56917@chacuo.net>
<- 250 Ok
-> DATA
<- 354 End data with <CR><LF>.<CR><LF>
-> Date: Mon, 22 Mar 2021 23:49:33 -0400
-> To: jqcanm56917@chacuo.net
-> From: admin@********.com
-> Subject:安全性警告
-> Message-Id: <20210322234933.001791@kali>
-> X-Mailer: swaks v20201014.0 jetmore.org/john/code/swaks/
->
-> 您的邮箱密码已过期 请尽快更改。
->
->
-> .
<- 250 Ok
-> QUIT
<- 221 Bye
=== Connection closed with remote host.
邮件截图:
邮件伪造的困难
伪造邮件的原理
邮件为什么可以被伪造呢,最根本的原因就是SMTP协议不会验证发送者的身份,当邮件在两个不同的SMTP邮件服务器中被传输时,我们可以通过伪造来源欺骗接收者的SMTP服务器。
没有配置SPF,邮件服务器就不会去验证发件人,就可以直接进行伪造了。这一点利用上述工具即可实现。
也可以搭建自己的邮件服务器(见附录二),或者使用邮件伪造服务:http://tool.chacuo.net/mailanonymous
主流邮件服务提供商是不会接收从未配置SPF的服务器发来的邮件的。
QQ邮箱在接收到邮件时,会检查域名的SPF记录,未配置SPF的域名,邮箱容易被伪造并成功投递到目标邮箱;已经配置了SPF的域名,检验后会被投递到垃圾箱。
简单的绕过方式
申请一些和目标域名比较相似的域名,比如用0代替o,用1代替l,用vv代替w等等,这就需要发挥你的想象来寻找相似的域名:
http://www.taoba0.com/
http://www.a1iyun.com
使用这些域名搭建相关邮件服务。
高端玩法
攻击者的域名为
www.biṇaṇce.com
用于替换字母n的字符为:ṇ
Unicode编码为:U+1E47真正的字母n的Unicode编码为:
U+006E,攻击者上演了一出障眼法骗过了那些受害者。这样的域名是怎么注册的呢?在了解怎么注册一个这样的域名前,需要先了解什么是国际域名(Internationalized domain name, IDN)。
IDN是指在域名中包含至少一个特殊语言字母的域名,特殊语言包括中文、法文、拉丁文等。在DNS系统工作中,这种域名会被编码成ASCII字符串,并通过Punycode进行翻译。Punycode是一个根据RFC 3492标准而制定的编码系统,主要用于把域名从地方语言所采用的Unicode编码转换成为可用於DNS系统的编码。
目前,因为操作系统的核心都是英文组成,DNS服务器的解析也是由英文代码交换,所以DNS服务器上并不支持直接的中文域名解析,所有中文域名的解析都需要转成punycode码,然后由DNS解析punycode码。其实目前所说的各种主流浏览器都完美支持IDN域名,浏览器里面会自动对IDN域名进行Punycode转码,而地址栏依旧显示的是原始输入的IDN域名。
所以,要想注册“币安”的这个域名:
www.biṇaṇce.com
其实只需要注册他经过punycode转码后的域名:
www.xn--biace-4l1bb.com
然后让目标访问www.biṇaṇce.com,在地址栏中就很难被发现。
我遍历了unicode表,找了一些字母形似的unicode,可利用此表来注册一些钓鱼域名
仿冒的阿里云
www.аlіyun.com 0x456 і 0x430 а 经punycode转码:www.xn--lyun-43d3u.com