邮件注入攻击

MIME 及 MIME 邮件了解

MIME

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

MIME 邮件

根据MIME规范编码而成的电子邮件。

MIME 邮件格式

邮件结构包括信封(MAIL FROM、RCPT TO)、邮件头(From,To,Subject、CC、BCC等)、邮件体(message,可无),邮件体实际上是一行行的ASCII字符构成的简单序列,它和邮件头是靠一个空行(该行只有一个回车换行符CRLF)来区分开的。

  • 邮件头
    邮件头包含了发件人、收件人、主题、时间、MIME版本、邮件内容的类型等重要信息,每条信息称为一个

  • 邮件体
    邮件体包含邮件的内容,它的类型由邮件头的“Content-Type”域指出。常见的简单类型有 text/plain (纯文本)和 text/html (超文本)。

    1. 域格式
      {域名}:{内容}
      如下邮件所示,其中行1-5行8都是单行的域行6-7则是一个多行的域,并带有一个名为charset的属性,属性值为us-ascii

      行1 From: ”suntao” suntao@fimmu.com
      行2 To: yxj@fimmu.com
      行3 Subject: hello world
      行4 Date: Mon, 9 Oct 2006 16:51:34 +0800
      行5 MIME-Version: 1.0
      行6 Content-Type: text/plain;
      行7 charset=”us-ascii”
      行8 Date: Mon, 9 Oct 2006 16:48:25 +0800
      行9
      行10 Hello world
      行11

    2. 常见域

域名 含义 添加者
Received 传输路径 各级邮件服务器
Return-Path 回复地址 目标邮件服务器
Delivered-To 发送地址 目标邮件服务器
Reply-To 回复地址 邮件的创建者
From 发件人地址 邮件的创建者
To 收件人地址 邮件的创建者
Cc 抄送地址 邮件的创建者
Bcc 暗送地址 邮件的创建者
Date 日期和时间 邮件的创建者
Subject 主题 邮件的创建者
Message-ID 消息ID 邮件的创建者
MIME-Version MIME版本 邮件的创建者
Content-Type 内容的类型 邮件的创建者

Content-Transfer-Encoding | 内容的传输编码方式 | 邮件的创建者

邮件注入了解

邮件注入和 HTTP 头部注入相似,这种漏洞发生在一个编程语言嵌入另一个,比如 mysql 嵌入php

电子邮件注入是针对PHP内置邮件功能的一种攻击类型。它允许恶意攻击者注入任何邮件头字段,BCC、CC、主题等,它允许黑客通过注入手段从受害者的邮件服务器发送垃圾邮件。这个漏洞是不限于PHP。它可能会影响任何从用户UI接收消息并发送电子邮件消息的应用程序。这种攻击的主要原因是不适当的用户输入验证或应用程序根本没有验证和过滤机制。

注入分类

  • 发件人修改
    本来发件人就可控,或者在别的字段里重复添加,但是要看邮件服务器针对多个from是如何实现的,是取第一个,还是取最后一个,还是如何操作。

    from:sender@domain.com%0Afrom:attacker@domain.com

  • 收件人、抄送人注入(Cc/Bcc注入)
    在发送者字段(sender)后注入Cc和Bcc参数

    From:sender@domain.com%0ACc:recipient@domain.com%0ABcc:recipient1@domain.com

所以现在,消息将被发送到recipient和recipient1账户。

  • 主题注入

    From:sender@domain.com%0ASubject:This’s%20Fake%20Subject

攻击者注入的假的主题subject将被添加到原来的主题中并且在某些情况下将取代原本的主题subject。这取决于邮件服务行为。即代码编写的容错性,当参数中出现两个subject的时候代码是选择丢弃还是后者覆盖。

  • 消息体注入
    要注意SMTP的Mail格式,消息主题和头部Header之间有两个换行符(和HTTP是一样的)。

    From:sender@domain.com%0A%0AMy%20New%20%0Fake%20Message.

假消息将被添加到原始消息中。

修复方案

  1. 永远不要信任用户的输入字段。所有用户输入应该被认为是不可信的和潜在的恶意。应用程序不受信任的输入过程可能会变得容易受到诸如缓冲区溢出攻击、SQL注入,OS指令注入、拒绝服务和电子邮件注入。
  2. 使用正则表达式来过滤用用户提交的数据。例如,我们可以在输入字符串中搜索(r 或 n)。
  3. 使用外部组件和库,提供防范这个问题像 ZEND mail、PEAR mail和swift mailer。
  4. ModSecurity可以阻止服务器级别的电子邮件注入。利用ModSecurity,我们可以检测通过POST或GET提交的CC, BCC或目的地址,并且拒绝任何包含这些字母请求。

参考链接:
https://blog.csdn.net/xjbclz/article/details/51912725
https://www.cnblogs.com/robinhood/articles/540464.html
https://www.cnblogs.com/KevinGeorge/p/10236663.html