如何发送伪造的电子邮件
最近我在阅读关于协议分析的相关资料,在这其中提到了邮件传输协议(SMTP)的基本工作原理感到深受启发。接着在网络上查找了一些相关的资料,并且大致整理了一遍,希望能够对大家有所帮助,并期待大家的反馈和建议。
通过该方法可以检查您的邮件服务器是否存在相关安全漏洞。对于采用该方法可能导致的结果负有责任(如需引用,请注明出处)。
一、SMTP 邮件的传输
共分为三个阶段:1、建立连接2、数据传输3、连接关闭
首先在建立连接阶段我不用再罗嗦,主要就是TCP的三次握手。而问题就出现在第二个阶段(数据传输)在此过程中可以人为控制。邮件在传输的时候,我个人认为是通过五条命令来实现(有的资料上说的是其中三条命令)的分别是:
Helo
mail from:
rcpt to:
data
这些预设指令均为程序内部执行的操作序列,并非用户直接干预的内容(例如OUTLOOK、foxmail等)。以下详细解释各指令的功能:
- Helo:启动与服务器间的通信流程
- mail from:指定发送邮件的信息来源地址
- rcpt to:设置接收邮件的目标地址
- data:包含邮件正文的具体内容
quit 退出邮件
二、SMTP 数据包分析 下述内容基于FOXMAIL程序对邮件发送过程及数据包捕获进行了优化分析:其中,邮件服务器IP地址为172.17.1.1,对应的域名配置为abc.cn
192.168.0.1是客户端地址;请留意粗体字部分
| Source | Destiination | Protocol | Info |
|---|---|---|---|
| 172.17.1.1 | 192.168.0.1 | SMTP | RESPONSE:220 abc.cn ESMTP sendmail 7.14.2/7.14.2; Thu, 22 may 2010 23:30:60 +0800 (CST) |
| 192.168.0.1 | 172.17.1.1 | SMTP | **Command: HELO abc.cn ** |
| 172.17.1.1 | 192.168.0.1 | SMTP | Response: 250 abc.cn Hello [172.17.1.1],pleased to meet you |
| 192.168.0.1 | 172.17.1.1 | SMTP | **Command: MAIL FROM: admin@abc.cn ** |
| 172.17.1.1 | 192.168.0.1 | SMTP | Response: 250 2.1.0 admin@abc.cn …. Sender ok |
| 192.168.0.1 | 172.17.0.1 | SMTP | **Command: RCPT TO: abc@abc.cn ** |
| 172.17.0.1 | 192.168.0.1 | SMTP | Response: 250 2.1.0 admin@abc.cn …. Recipient ok |
| 192.168.0.1 | 172.17.0.1 | SMTP | **Command:DATA ** |
| 172.17.0.1 | 192.168.0.1 | SMTP | **Response: 354 Enter mail,end with “.”on a line by itself ** |
| 192.168.0.1 | 172.17.0.1 | SMTP | Message Body |
| 172.17.0.1 | 192.168.0.1 | SMTP | Response: 221 2.0.0 ab.cn closing connection |
请关注此信息:此信息指出,在输入邮件内容后换行显示,并在发送邮件正文时需在行尾处放置句点符号(.)。后续将详细阐述相关内容。
下面是对数据包解析后的信息并注说明:
220 abc.cn SMTP sendmail 7.14.2/7.14.2; Thu, 22 may 2010 23:30:60 +0800 (CST)
(邮件服务器反馈给你的信息,可以了解该邮件服务器的大致情况)
嗨 abc@cn
250 abc.cn Hello [172.17.1.1], pleased to meet you (邮件服务器反馈给你的信息)
MAIL FROM: admin@abc.cn(邮件源地址,也就是伪造的地址)
250 2.1.0 admin@abc.cn... Sender ok(表示邮件服务器认可伪造的地址)
RCPT TO: abc@abc.cn (邮件接收者的地址)
250 2.1.5 <[email protected]>... 接收方确认(经服务器验证该地址有效,请确保邮件服务器具备该账户信息)。
DATA (邮件的具体内容)
354 Enter mail, end with "." on a line by itself(上面已经说明)
Date: (邮件的日期)Thu, 22 May 2010 11:30:40 +0900
From: (邮件的来源地址) "admin" < admin@abc.cn >
To: (邮件接收者的地址) "abc" < abc@abc.cn >
Subject: (邮件的主题) mail test
邮件的具体内容,此处略…….
250 1.0.0 m4M3Ulgx010724 Message accepted for delivery(邮件成功投递)
QUIT (发送成功,执行退出命令)
221 2.0.0 abc.cn closing connection (成功关闭与abc.cn的连接)
题外话:
为了验证邮件内容的真实有效性,请特别关注文中提到的部分。具体要求包括以下几点:第一部分涉及数据中的关键字段设置,请确保包含以下信息:发送方地址(即伪造的邮件地址)、接收方地址(即邮件接收者的地址)、主题(即邮件的主题)以及日期(即邮件的时间信息)。这些要素共同构成了完整的一封电子邮件头部分。以下是具体的案例展示:
从:"admin" admin@abc.cn (您所使用的伪造地址)
至:abc@abc.cn (收件人的地址)
主题:测试邮件 (主题内容)
日期:Fri, 16 May 2010 12:45:39 +0800 (时间戳)
三、具体实现过程
第二步 启动Telnet应用程序:打开Windows自带的命令行工具,在路径C:\目录中运行 telnet命令。请注意,默认使用第25号端口进行登录操作。当连接成功后,请等待邮件服务器返回响应信息:RESPONSE:220 abc.cn ESMTP sendmail 8.14.2/8.14.2; 发布日期为星期四, 24 May 2010, 时间是下午6点整(+8小时标准时区)。
请记住,在当前字符界面中没有提供任何提示信息的情况下,请直接输入以下内容:HELO abc.cn(注:此为模拟账户名称与域名组合,请参考SINA邮箱格式进行设置:如设置为sina.com.cn))。随后提交后,系统将返回响应'Response: 250 abc.cn Hello [IP Address], please be greeted with a warm welcome'以表明邮件系统的接受与认可。
From :admin@abc.cn (必须包含冒号符号,在下面的内容中也是如此)
系统向用户返回响应信息‘Response: 250 2.1.0 admin@abc.cn … Senders ok’
第五步 输入:
RCPT TO : abc@abc.cn (邮件接收者的地址)
系统反馈信息显示:“Response: 250 2.1.0 admin@abc.cn …. Recipient ok”
点击【
Exit (邮件内容输入完成并退出)
系统返回消息'Response: 221 2.0.0 ab.cn close connection'
到此为止邮件发送完成
特别说明:通过此方法发送邮件时,在接收方的邮件中都会显示真实IP地址。
