【WEB安全】SMTP注入

简介: 漏洞介绍 SMTP是用于发送和传递电子邮件的协议,定义了邮件的传输方式和交流规则。 SMTP注入是指可通过添加/控制 邮件头 的方式,篡改邮件的发送者、抄送、密送等字段,从而达到 欺骗、窃取邮件信息或劫持邮件传递 的目的。 既然归属到注入类,说明也是对用户输入未严格过滤,从而达到非预期的结果。 邮件头介绍 常见邮件头代表的含义如下: 邮件头字段

漏洞介绍

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

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

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

邮件头介绍

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

邮件头字段 含义
From 邮件的发送者
To 邮件的主要接收者
Cc 邮件的抄送接收者
Bcc 邮件的密送接收者
Subject 邮件的主题或标题
Body 邮件的正文内容
Date 邮件的发送时间
Reply-To 回复邮件时使用的地址
Importance 邮件的重要性级别
MIME-Version 邮件的MIME版本
Content-Type 邮件正文内容的类型及编码方式
Content-Disposition 邮件附件的处理方式
Message-ID 邮件的唯一标识符
In-Reply-To 针对哪封邮件进行回复的标识符
References 相关邮件的标识符列表
Return-Path 邮件的退回地址
X-Priority 邮件的优先级

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

header

漏洞复现

漏洞环境

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

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

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

复现过程

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

insecure

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

漏洞常见点

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

常见payload:

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

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. 使用安全的组件和库,如Python的smtplib、Java的javax.mail、PHP的PHPMailer等,尽可能的通过模块内置的一些函数来设定SMTP header头。
目录
相关文章
|
1月前
|
缓存 移动开发 安全
Web安全-HTTP响应拆分(CRLF注入)漏洞
Web安全-HTTP响应拆分(CRLF注入)漏洞
78 1
|
5天前
|
SQL 负载均衡 安全
安全至上:Web应用防火墙技术深度剖析与实战
【10月更文挑战第29天】在数字化时代,Web应用防火墙(WAF)成为保护Web应用免受攻击的关键技术。本文深入解析WAF的工作原理和核心组件,如Envoy和Coraza,并提供实战指南,涵盖动态加载规则、集成威胁情报、高可用性配置等内容,帮助开发者和安全专家构建更安全的Web环境。
16 1
|
7天前
|
安全 前端开发 Java
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第26天】Web安全是现代软件开发的重要领域,本文深入探讨了XSS和CSRF两种常见攻击的原理及防御策略。针对XSS,介绍了输入验证与转义、使用CSP、WAF、HTTP-only Cookie和代码审查等方法。对于CSRF,提出了启用CSRF保护、设置CSRF Token、使用HTTPS、二次验证和用户教育等措施。通过这些策略,开发者可以构建更安全的Web应用。
35 4
|
6天前
|
安全 Go PHP
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第27天】本文深入解析了Web安全中的XSS和CSRF攻击防御策略。针对XSS,介绍了输入验证与净化、内容安全策略(CSP)和HTTP头部安全配置;针对CSRF,提出了使用CSRF令牌、验证HTTP请求头、限制同源策略和双重提交Cookie等方法,帮助开发者有效保护网站和用户数据安全。
29 2
|
9天前
|
存储 安全 Go
Web安全基础:防范XSS与CSRF攻击的方法
【10月更文挑战第25天】Web安全是互联网应用开发中的重要环节。本文通过具体案例分析了跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的原理及防范方法,包括服务器端数据过滤、使用Content Security Policy (CSP)、添加CSRF令牌等措施,帮助开发者构建更安全的Web应用。
42 3
|
11天前
|
SQL 安全 Go
PHP在Web开发中的安全实践与防范措施###
【10月更文挑战第22天】 本文深入探讨了PHP在Web开发中面临的主要安全挑战,包括SQL注入、XSS攻击、CSRF攻击及文件包含漏洞等,并详细阐述了针对这些风险的有效防范策略。通过具体案例分析,揭示了安全编码的重要性,以及如何结合PHP特性与最佳实践来加固Web应用的安全性。全文旨在为开发者提供实用的安全指南,帮助构建更加安全可靠的PHP Web应用。 ###
26 1
|
14天前
|
Kubernetes 安全 应用服务中间件
动态威胁场景下赋能企业安全,F5推出BIG-IP Next Web应用防火墙
动态威胁场景下赋能企业安全,F5推出BIG-IP Next Web应用防火墙
33 3
|
1月前
|
缓存 安全 JavaScript
掌握JAMstack:构建更快、更安全的Web应用
JAMstack 是一种现代 Web 开发架构,结合 JavaScript、APIs 和 Markup,创建更快、更安全的 Web 应用。其核心优势包括高性能、安全性、可扩展性和易维护性。JAMstack 通过预构建静态页面和 API 实现高效渲染,利用静态站点生成器如 Gatsby 和 Next.js,并借助 CDN 和缓存策略提升全球访问速度。尽管面临复杂交互、SEO 和数据更新等挑战,但通过 Serverless Functions、预渲染和实时 API 更新等方案,这些挑战正逐步得到解决。
|
2月前
|
缓存 移动开发 安全
Web安全-HTTP响应拆分(CRLF注入)漏洞
Web安全-HTTP响应拆分(CRLF注入)漏洞
130 8
|
1月前
|
监控 安全 Apache
构建安全的URL重定向策略:确保从Web到App平滑过渡的最佳实践
【10月更文挑战第2天】URL重定向是Web开发中常见的操作,它允许服务器根据请求的URL将用户重定向到另一个URL。然而,如果重定向过程没有得到妥善处理,可能会导致安全漏洞,如开放重定向攻击。因此,确保重定向过程的安全性至关重要。
51 0