### 伪造电子邮件的原理

1. SMTP 协议的漏洞

SMTP 协议在设计之初，主要关注邮件的投递，而不是发件人的身份验证。它的工作方式非常简单：

1. `HELO/EHLO`：发送方（邮件客户端或服务器）向接收方（邮件服务器）发出问候，告知自己的域名
2. `MAIL FROM`：发送方指定邮件的“信封发件人”，也就是邮件的实际投递地址
3. `RCPT TO`：发送方指定收件人地址
4. `DATA`：发送方发送邮件内容，包括邮件的“信头”（`From`、`To`、`Subject` 等）和邮件正文

漏洞所在：在 SMTP 协议中，`MAIL FROM` 和信头中的 `From` 地址是两个独立的字段，且 SMTP 服务器不会对这两者进行交叉验证

- `MAIL FROM`：用于邮件投递，类似于信封上的回邮地址
- `From`：用于显示给用户看，类似于信纸上的发件人

攻击者可以轻松地在 `MAIL FROM` 中使用自己的地址，而在 `From` 字段中填写任何伪造的地址，例如 `ceo@yourcompany.com`。接收方邮件服务器只会检查 `MAIL FROM` 的合法性，而收件人看到的则是被伪造的 `From` 地址

2. 伪造电子邮件的步骤

第一步：搭建邮件发送环境

攻击者可以使用自己的服务器或第三方服务来发送邮件。最简单的方式是使用一个 Linux 服务器，通过 Telnet 或 Netcat 直接连接到目标邮件服务器的 25 端口，模拟 SMTP 协议的发送过程

第二步：执行伪造命令

攻击者在命令行中，按照 SMTP 协议的规范，输入以下命令：

1. 连接邮件服务器：

       telnet mailserver.targetdomain.com 25

2. 问候：

       HELO attacker.com

3. 指定“信封发件人”：

       MAIL FROM:<me@attacker.com>

   这个地址通常是攻击者自己的，它只用于投递过程

4. 指定收件人：

       RCPT TO:<victim@targetdomain.com>

5. 发送邮件内容：

       DATA

   服务器会回复一个 `354` 码，表示可以开始输入邮件内容

6. 伪造“信头”：

       From: "CEO" <ceo@yourcompany.com>
       To: <victim@targetdomain.com>
       Subject: Urgent Notice

   这里，`From` 字段被伪造成了 CEO 的地址，而收件人看到的就是这个伪造的地址

7. 发送正文：

       <邮件正文内容>
       .

   输入一个单独的 `.`，然后回车，表示邮件结束。服务器会回复 `250` 码，表示邮件已发送成功