Web应用安全之发送邮件

来源:互联网 发布:淘宝退款在哪里看 编辑:程序博客网 时间:2024/06/05 21:04

问题概要

1.邮件头注入

2.使用hidden参数保存收件人信息

3.邮件服务器的开放转发


邮件头注入

指通过邮件消息中的收件人或标题等字段中插入换行符,从而添加新的邮件头字段或篡改邮件正文的攻击手段。

影响如下:
1.标题,发件人,或正文被更改
2.被用来发送垃圾邮件
3.被用来发送病毒邮件

防范方法:
1.邮件头仲不允许包含外界传入的参数
2.通过校验不允许外界传入的参数包含换行符

一般采用mb_send_mail来发送邮件,各个参数为
mb_send_mail(“收件人地址”,“标题”,“正文”,. $body,“From:”.$from)
上述函数采用第四个函数(附加邮件头)指定发送人(From)地址。

关于第四个函数
additional_headers被插入在邮件头的末尾。常用于增加额外的头。通过换行符(“\n”)进行分隔,可以指定多个头。

攻击方式1
添加收件人
通过换行输入多个邮件地址,如图

发送后,两个邮箱都收到,但是第一个邮箱不知道该邮件也发给了第二个邮箱,因为添加第二个邮箱时,采用了Bcc(密送)的方式。

攻击方式2
篡改正文
在邮件地址后加入一行空格即可
trap@trap.example.com
Bcc:bob@example.com

Hack!!!!
实际攻击中会使用大量空行迷惑用户,或者使用MIME来隐藏后面的正文消息。

攻击方式3
添加附件
恶意利用MIME的multipart/mixed形式。

产生原因

邮件消息格式:
与HTTP类似
消息头:
To:wasbook@example.jp
Subject: =?ISO-2022-JP?B?GyRCTGQkJDlnJG8kOyQsJCIbKEI=?==?ISO-2022-JP?B?GyRCTGQkJDlnJG8kOyQsJCIbKEI=?=
From: alice@example.jp
Content-Type: text/plain; charset=ISO-2022-JP
空行
正文:dhaiuogdoiagd

To为收件人,Subject为标题,From为发件人地址。邮件头注入的主要原因与HTTP消息头注入漏洞类似。消息头中各字段以换行符分开,因此,如果能够在外界传入的参数插入换行符,那么就可以添加新的消息头

对策
1.使用专门的程序库来发送邮件

2.不将外界传入的参数包含在邮件头中

3.发送邮件时确保外界传入的参数不包含换行符
不直接调用mb_send_mail,编写专用用于发送邮件的包装函数,并在函数中校验换行符。
另外,在框架提供的发送邮件功能中嵌入校验换行符也有效。

4.输入校验

5.校验邮箱地址

6.校验标题校验控制字符,只与控制字符以外的字符相匹配。

0 0