简介
SMTP 为邮件协议,默认端口号为 25,经常被用来邮箱伪造,钓鱼攻击。除此之外还有经典的 SMTP 账号信息泄露,如 Github,oschina 上的源码托管商的代码里面经常也可以看到相关的信息泄露。
建立 TCP 连接
知道了邮件服务器的地址,就可以与它建立 TCP 连接了。SMTP 协议的默认端口是 25。使用 Telnet 或 Netcat 命令,都可以连接该端口。
BASH$ telnet xxxx.com 25 # Widnows下测试# 或者$ nc xxxxx.com 25 # Linux下测试
服务器返回 220 状态码,就表示连接成功。
BASH220 MAIL-SERVER Winmail Mail Server ESMTP ready
接下来,就可以使用 SMTP 协议的各种命令与邮件服务器交互了。
HELO 命令和 EHLO 命令
SMTP 协议规定,连接成功后,必须向邮件服务器提供连接的域名,也就是邮件将从哪台服务器发来。
BASHHELO xxxx.com
邮件服务器返回状态码 250,表示响应成功。
BASH250 MAIL-SERVER Winmail Mail Server
HELO
命令现在比较少用,一般都使用 EHLO
命令。
邮件服务器收到 EHLO
命令以后,不仅会返回 250
状态码,还会返回自己支持的各种扩展的列表。
BASH250-MAIL-SERVER Winmail Mail Server250-AUTH LOGIN PLAIN250-SIZE 20971520250 8BITMIME
MAIL FROM 命令
连接者要使用 MAIL FROM 命令,向邮件服务器提供邮件的来源邮箱
BASHMAIL FROM:admin@xxxx.com # 伪造管理员身份来发邮件
上面代码表示,连接者将从 admin@xxxxx.com
向邮件服务器发送邮件。邮件服务器返回 250
状态码,表示响应成功。
BASH250 ok
RCPT TO 命令
使用 RCPT TO 命令,验证邮件地址是否存在。如果查询的是一个真实的 Email 地址,邮件服务器就会返回 250
状态码。验证邮箱存在的话,还可以给这个接受者邮箱发送邮件。
BASHRCPT TO:admin@xxxxx.com250 ok
一般来说,状态码 250 和 251 都表示邮箱存在,状态码 5xx 表示不存在,神马影院其他状态码(主要是 4xx)则代表无法确认。
DATA 伪造邮箱数据
使用 DATA 命令来伪造邮箱内容,客户端告诉服务器自己准备发送邮件正文 ,服务器返回 354,表示自己已经作好接受邮件的准备:
BASHDATA354 go ahead, end data with CRLF.CRLF
输入邮件伪造正文
用英文状态的双引号
来修饰正文,正文结束后,发送结束符.
表明正文的结束。
BASH"这是一个邮件伪造测试".250 ok message accepted for delivery
如果合理,服务端返回 250 表示成功
退出 TCP 连接
邮件发送结束,客户端请求断开连接后,使用 QUIT
命令关闭 TCP 连接。服务器返回 211
,提示断开申请被采纳,并主动断开连接,整个邮件发送过程结束。
BASHQUIT221 MAIL-SERVER Winmail Mail ServerConnection closed by foreign host.
完整的流程图

版权声明:本文内容来自个人博客:国光,遵循CC 4.0 BY-SA版权协议上原文出接本声明。本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行可。原文链接:https://www.sqlsec.com/2017/08/smtp.html如有涉及到侵权,请联系,将立即予以删除处理。在此特别鸣谢原作者:国光的创作,Powered by Butterfly/By 国光。本文发布已获原作者国光授权转载。此篇文章的所有版权归原作者所有,与本公众号无关,商业转载建议请联系原作权,商业转载请注明出处。




