问题概要
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
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.校验标题校验控制字符,只与控制字符以外的字符相匹配。