lxghost'hell

简单邮件传输协议

SMTP用于传播电子邮件消息,是最被滥用的协议之一了..因为年代久远 设计时并没考虑安全问题。

很多人用来 fake email

SMTP服务器(MTAs)负责处理发送的邮件 默认监听端口25/TCP

POP3服务器或IMAP服务器负责处理收到的邮件

使用telnet 连接SMTP服务器就可以发送电子邮件

使用ASCII文本进行通信 由客户端发送命令 服务端返回响应消息

常用命令有

HELO - 介绍自己 EHLO - 介绍自己并要求扩展模式 MAIL FROM - 指明发件人 RCPT TO - 指明收件人 DATA - 确认邮件内容(前三行应为To、From和邮件主题) RSET - 重置 QUIT - 退出进程 HELP - 命令帮助 VRFY - 验证地址 EXPN - 扩展地址 比如 telnet smtp.qq.com 25

1.ehlo lxghost - 申明 需要身份验证

如果是不需要身份验证的SMTP服务器 可以用helo申明 不过网上提供的都需要验证 除非自己搭建

2.auth login - 开始验证

3.输入邮箱名和密码 需要base64编码

4.mai from - 这里可以输入任意的地址

从上图可以看出服务端进行了验证 确保定义的发件地址和认证登录的地址一样

但是 小型的SMTP都没有采取安全措施 像学校公司之类的都可以伪造发件人

5.rcpt to - 输入接收地址

6.data - 开始编辑

可以定义标题 发送地址 接受地址 内容 都是显示在邮件主体里

换行后一个点表示编辑结束

等待发送完成 quit

用python的smtplib实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#coding:utf-8  
import smtplib  
from email.mime.text import MIMEText  
mail_host = "smtp地址"  
mail_user = "登陆邮箱名"  
mail_pwd = "登陆密码"  
send_from = "想伪造的发件人  
send_to = "收件人"  
msg = MIMEText("内容")  
msg['From'] = send_from  
msg['To'] = send_to  
msg['Subject'] = "title"  
s = smtplib.SMTP()  
s.connect(mail_host)  
s.login(mail_user ,mail_pwd)  
s.sendmail(send_from, send_to, msg.as_string())  
s.close()

Comments