前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【WEB安全】SMTP注入

【WEB安全】SMTP注入

原创
作者头像
用户1709153
发布于 2023-06-06 13:24:33
发布于 2023-06-06 13:24:33
62200
代码可运行
举报
文章被收录于专栏:杂学杂学
运行总次数:0
代码可运行

blocks|key|de7d7|type|unstyled|text|## 漏洞介绍

SMTP是用于发送和传递电子邮件的协议,定义了邮件的传输方式和交流规则。

SMTP注入是指可通过添加/控制**邮件头**的方式,篡改邮件的发送者、抄送、密送等字段,从而达到**欺骗、窃取邮件信息或劫持邮件传递**的目的。

既然归属到注入类,说明也是对用户输入未严格过滤,从而达到非预期的结果。

邮件头介绍

常见邮件头代表的含义如下:

%7C 邮件头字段 %7C 含义 %7C

%7C ------------------- %7C ---------------------------- %7C

%7C From %7C 邮件的发送者 %7C

%7C To %7C 邮件的主要接收者 %7C

%7C Cc %7C 邮件的抄送接收者 %7C

%7C Bcc %7C 邮件的密送接收者 %7C

%7C Subject %7C 邮件的主题或标题 %7C

%7C Body %7C 邮件的正文内容 %7C

%7C Date %7C 邮件的发送时间 %7C

%7C Reply-To %7C 回复邮件时使用的地址 %7C

%7C Importance %7C 邮件的重要性级别 %7C

%7C MIME-Version %7C 邮件的MIME版本 %7C

%7C Content-Type %7C 邮件正文内容的类型及编码方式 %7C

%7C Content-Disposition %7C 邮件附件的处理方式 %7C

%7C Message-ID %7C 邮件的唯一标识符 %7C

%7C In-Reply-To %7C 针对哪封邮件进行回复的标识符 %7C

%7C References %7C 相关邮件的标识符列表 %7C

%7C Return-Path %7C 邮件的退回地址 %7C

%7C X-Priority %7C 邮件的优先级 %7C

为了尽可能的获取实用的邮件头,使用抄送+密送的方式发一封邮件,查看原文,就可以看到发送的实际内容。

header
header

漏洞复现

漏洞环境

假设存在一个注册功能点,我们输入邮箱后,网站给我们发送激活链接进行注册。

其中,发送邮件使用的代码为:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import base64
import smtplib
from urllib.parse import unquote
from email.header import Header
from email.message import Message

def send\_email(from\_addr, to\_addr, subject, mail\_text, smtp\_host, smtp\_port, smtp\_username, smtp\_password):
    email\_string = f"""MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
From: {from\_addr}
To: {to\_addr}
Subject: =?utf-8?b?{base64.b64encode(subject.encode()).decode()}?=

{base64.b64encode(mail\_text.encode()).decode()}
    """
    print(f"\n{email\_string}\n")
    try:
        smtp\_obj = smtplib.SMTP\_SSL(smtp\_host, smtp\_port)
        smtp\_obj.login(smtp\_username, smtp\_password)
        smtp\_obj.sendmail(from\_addr, to\_addr, email\_string)
        smtp\_obj.quit()
        print('邮件发送成功')
    except smtplib.SMTPException as e:
        print('邮件发送失败:', str(e))

if \_\_name\_\_ == '\_\_main\_\_':
    # to\_addr = 'ntoouuzovrlfy@baybabes.com'
    to\_addr = input("收件箱地址: ")
    to\_addr = unquote(to\_addr)
    # 使用示例
    from\_addr = 'xxx@163.com'
    subject = '注册邀请'
    mail\_text = '您的注册地址为:xxxxx'
    smtp\_host = 'smtp.163.com'
    smtp\_port = 465
    smtp\_username = 'username'
    smtp\_password = 'password'

    send\_email(from\_addr, to\_addr, subject, mail\_text, smtp\_host, smtp\_port, smtp\_username, smtp\_password)

正常发送结果如下:

normal
normal

复现过程

上方代码可见to\_addr为收件人可控,我们将其输入为ntoouuzovrlfy@baybabes.com%0aCc: rocaced977@soremap.com并发送

insecure
insecure

可见成功注入了SMTP邮件头Cc(抄送),此时注入的恶意邮箱rocaced977@soremap.com也将收到和ntoouuzovrlfy@baybabes.com一样的邮件。

漏洞常见点

所有和发送邮件有关的功能点都可以进行尝试,如邮箱注册、邮箱找回密码等...

**常见payload:**

就是通过各种方式注入SMTP header头中。

代码语言:txt
AI代码解释
复制
rec@domain.com%0ACc:recipient@domain.com%0ABcc:recipient1@domain.com
admin@domain.com%0AFrom:eval@domain.com
From:sender@domain.com%0ATo:attacker@domain.com
From:sender@domain.com%0ASubject:This’s%20Fake%20Subject

修复建议

  1. 输入过滤,可以使用正则表达式^[\w\.-]+@[\w\.-]+\.\w+$来过滤用用户提交的邮箱。
  2. 使用安全的组件和库,如PythonsmtplibJavajavax.mail、PHP的PHPMailer等,尽可能的通过模块内置的一些函数来设定SMTP header头。|depth|inlineStyleRanges|entityRanges|entityMap|data|mutability^0^^$0|@$1|2|3|4|5|6|7|D|8|@]|9|@]]]|A|$B|-4|C|-4|3|-4]]

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux代理配置
系统代理只能设置HTTP代理,但是使用privoxy将socks5转换为http代理
码客说
2022/09/23
3.7K0
linux代理设置
有些局域网环境上网需要使用代理上网,图形界面的很好解决就设置一下浏览器的代理就好了,但是Linux纯命令行的界面就需要手动配置了。
孙杰
2019/10/29
9.5K0
在Linux系统中设置动态地址进行网络访问
在 Linux 系统中,配置动态地址可以帮助我们实现更安全、匿名或绕过某些限制的网络访问。本文将介绍几种常用的方法来配置和使用代理服务器,在 Linux 环境下轻松实现高效且可靠地通过HTTP进行网络访问。
华科云商小徐
2023/08/30
4820
CentOS7下代理配置
对于提供服务的服务器来说,一般都配置在内网环境中,而在内网下公司处于安全的考虑,一般不开放外网的访问权限。这时如果想要访问外网,一般需要配置公司提供的代理服务器再进行使用。下面介绍几种配置代理的方法:
院长技术
2020/11/05
1.9K0
Mac 终端代理
今天切回 mac 工作几天,反正装一堆东西,brew 少不了,通过国内的镜像顺利的安装了brew 。
chuchur
2022/10/25
1.3K0
Windows 终端代理
Mac 有终端代理,那 windows 也应该有才对,但是windows 要个毛的代理呀,小猫一配置,全局模式就可以了。
chuchur
2022/11/14
9570
Windows 终端代理
命令终端设置全局代理的两种方法
我们在日常测试中经常要用到git克隆项目、pip安装依赖库等,如果不走代理可能连接不上,或者下载速度极慢,这是我没法忍受的,所以要走代理才能高速下载。
潇湘信安
2023/08/11
3.7K1
命令终端设置全局代理的两种方法
容器开发运维人员的Linux操作机配置优化建议
"工欲善其事必先利其器", 作为一个PAAS平台架构师, 容器相关技术(docker, k8s等)是必不可少的. 本文简单介绍下我自己的Linux操作机配置. 提升工作效率, 提高使用体验. ❤️❤️❤️
东风微鸣
2022/04/21
5270
容器开发运维人员的Linux操作机配置优化建议
connect A with B_anyconnect怎么用
不知道是不是翻墙导致的错误,昨天同事说服务器出现了这个错误,然后说服务器坏啦什么哒,因为是我重启啦,所以就感觉好像在一顿帅锅,哎!!! 然后我上去搞了一下一会搞定啦!无能者只剩下了愤怒!!!
全栈程序员站长
2022/10/04
3960
connect A with B_anyconnect怎么用
ubuntu 代理配置
本文由来源 jackaroo2020,由 javajgs_com 整理编辑,其版权均为 jackaroo2020 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。
Java架构师必看
2021/03/22
9930
解决SSH登录用户执行的命令部分环境变量参数不生效的问题
然后 SSH 目标机器,并通过pm2 start app.js 启动应用程序,但是应用程序的请求走不到http代理程序。
旺财的城堡
2018/11/20
2.1K0
局域内网的服务器利用跳板机访问互联网
特别提醒:本文介绍内容只分享交流技术解决方案,风险自行承担哈 本文也不算啥干货了,可能用上的童鞋不多!毕竟这个事情确实浪费了我半天时间研究,这里就分享给大家!
鹏程
2023/06/26
2.4K0
局域内网的服务器利用跳板机访问互联网
Linux终端快速切换代理设置方法
在Linux系统中,我们经常需要根据不同的网络环境或需求切换代理设置以实现灵活上网。为了帮助您高效地切换代理设置,本文将介绍一些在Linux终端中快速切换代理的方法,让您能够轻松应对各种网络需求。
华科云商小彭
2023/09/06
1.1K0
Linux终端快速切换代理设置方法
git设置代理,win命令行设置代理
git设置代理,参考文章:https://blog.csdn.net/tanningzhong/article/details/52817399
大菊观
2020/01/02
1.9K0
基于CentOS 7配置Nginx正向代理
Nginx是一款以轻量级、低内存开销、支持缓存、支持反向代理,负载均衡,电子邮件服务而著称。对于鲜为人知的是,它还可以作为一个简单易用的正向代理服务器。本文简要描述这个正向代理功能并给出演示,供大家参考。
Leshami
2018/08/06
2.3K0
Linux主机通过代理服务器进行网络连接
我们都知道在Windows下通过代理服务器怎么去设置连接代理服务器,浏览器---->工具------>internet选项----->连接--->局域网设置------->勾选“为lan使用代理服务器”,配置代理服务器的IP和端口号。OK。到这里Windows系统下通过代理服务器进行浏览网页就可以了。
星哥玩云
2022/07/03
1.5K0
代理服务,让私有云服务器更自由
做过运维服务工作的朋友一定有亲身经历:给政府和大型企业、事业单位做运维支持时,发现他们的服务器往往有着严格的安全管理机制,特别是有限制的访问 Internet。这给运维工作带来了诸多不便。
用户7426861
2021/08/18
7.3K0
【Go】go get 自动代理
最近发现技术交流群里很多人在询问 go get 墙外包失败的问题,大家给了很多解决方案:
thinkeridea
2019/11/04
1.9K0
CentOS设置代理
/etc/yum.conf 最后添加一行Proxy=http://192.168.58.100:8080 (注意:在/etc/yum.repos.d下建立文件并没有什么作用,不知道是不是哪里出错了)
十毛
2019/03/27
2.1K0
Linux使用lftp文件自动认证上传下载
为了结合sftp做自动上传(http://www.linuxidc.com/Linux/2014-03/97978.htm),引用了lftp工具。
星哥玩云
2022/06/30
1.4K0
相关推荐
Linux代理配置
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验