简介
SMTP 为邮件协议,默认端口号为 25,经常被用来邮箱伪造,钓鱼攻击。除此之外还有经典的 SMTP 账号信息泄露,如 Github,oschina 上的源码托管商的代码里面经常也可以看到相关的信息泄露。
建立 TCP 连接
知道了邮件服务器的地址,就可以与它建立 TCP 连接了。SMTP 协议的默认端口是 25。使用 Telnet 或 Netcat 命令,都可以连接该端口。
$ telnet xxxx.com 25 # Widnows下测试 # 或者 $ nc xxxxx.com 25 # Linux下测试
服务器返回220状态码,就表示连接成功。
220 MAIL-SERVER Winmail Mail Server ESMTP ready
接下来,就可以使用 SMTP 协议的各种命令与邮件服务器交互了。
HELO 命令和 EHLO 命令
SMTP 协议规定,连接成功后,必须向邮件服务器提供连接的域名,也就是邮件将从哪台服务器发来。
HELO xxxx.com
邮件服务器返回状态码 250,表示响应成功。
250 MAIL-SERVER Winmail Mail Server
HELO
命令现在比较少用,一般都使用EHLO
命令。
邮件服务器收到EHLO
命令以后,不仅会返回 250
状态码,还会返回自己支持的各种扩展的列表。
bash
250-MAIL-SERVER Winmail Mail Server 250-AUTH LOGIN PLAIN 250-SIZE 20971520 250 8BITMIME
MAIL FROM 命令
连接者要使用 MAIL FROM 命令,向邮件服务器提供邮件的来源邮箱
bash
MAIL FROM:admin@xxxx.com # 伪造管理员身份来发邮件
上面代码表示,连接者将从admin@xxxxx.com
向邮件服务器发送邮件。邮件服务器返回250
状态码,表示响应成功。
bash
250 ok
RCPT TO 命令
使用 RCPT TO命令,验证邮件地址是否存在。如果查询的是一个真实的 Email 地址,邮件服务器就会返回250
状态码。验证邮箱存在的话,还可以给这个接受者邮箱发送邮件。
bash
RCPT TO:admin@xxxxx.com 250 ok
一般来说,状态码 250 和 251 都表示邮箱存在,状态码 5xx 表示不存在,神马影院其他状态码(主要是 4xx)则代表无法确认。
DATA 伪造邮箱数据
使用 DATA 命令来伪造邮箱内容,客户端告诉服务器自己准备发送邮件正文 ,服务器返回 354,表示自己已经作好接受邮件的准备:
bash
DATA 354 go ahead, end data with CRLF.CRLF
输入邮件伪造正文
用英文状态的双引号
来修饰正文,正文结束后,发送结束符.
表明正文的结束。
bash
"这是一个邮件伪造测试" . 250 ok message accepted for delivery
如果合理,服务端返回 250 表示成功
退出TCP连接
邮件发送结束,客户端请求断开连接后,使用QUIT
命令关闭 TCP 连接。服务器返回211
,提示断开申请被采纳,并主动断开连接,整个邮件发送过程结束。
bash
QUIT 221 MAIL-SERVER Winmail Mail Server Connection closed by foreign host.
完整的流程图
点评
这篇文章当初是 幸安哥当初带我复现的,他的网络基础真的强,目前关于 SMTP 邮件伪造网上也没有找到其他资料,这篇文只是当初复现记录的文章,是否真的具有通用性还有待实验考察,所以本文大家没有复现成功的话也不要打我,逃…..
本文可能实际上也没有啥技术含量,但是写起来还是比较浪费时间的,在这个喧嚣浮躁的时代,个人博客越来越没有人看了,写博客感觉一直是用爱发电的状态。如果你恰巧财力雄厚,感觉本文对你有所帮助的话,可以考虑打赏一下本文,用以维持高昂的服务器运营费用(域名费用、服务器费用、CDN费用等)