1. 云栖社区>
  2. PHP教程>
  3. 正文

PHP邮件注入实战演练

作者:用户 来源:互联网 时间:2017-12-01 19:11:08

邮件

PHP邮件注入实战演练 - 摘要: 本文讲的是PHP邮件注入实战演练, 一、简介 如今,互联网的使用急剧上升,但绝大多数互联网用户没有安全知识背景。大多数的人都会使用互联网通过邮件Email的方式和他人进行通信。出于这个原因,大多数网站允许他们的用户联系他们,向网站提供建议,报告一个问题,或者要求反馈,用户

一、简介

如今,互联网的使用急剧上升,但绝大多数互联网用户没有安全知识背景。大多数的人都会使用互联网通过邮件Email的方式和他人进行通信。出于这个原因,大多数网站允许他们的用户联系他们,向网站提供建议,报告一个问题,或者要求反馈,用户将会发送反馈给网站管理员的电子邮件。

不幸的是,大多数web开发人员对安全编码Code-Security没有足够的认识,其中的一些程序猿使用现成的库或框架,这些库受到许多已知的漏洞。这些漏洞是已经公布,厂商并已经对其进行了修补,并且相应的攻击源代码poc都在互联网上可下载的,但大多数开发人员都懒得升级到最新版本。

今天我们要谈论电子邮件注射,攻击者可以使用你的邮件服务器来发送垃圾邮件。

二、邮件注入

电子邮件注入是一个安全漏洞,这种漏洞广泛存在于在互联网电子邮件收发应用中。这是电子邮件注射和HTTP头注射类似。和SQL注入攻击类似,这种漏洞是一类常见的的漏洞,发生在当一个编程语言是嵌入到另一个,例如MYSQL嵌入到PHP中。

当一个可以提交数据到一个Web应用程序表单被添加到一个Web页面,恶意用户可能会利用MIME格式添加额外的信息到要发送的消息中(POST/GET),比如一个新的收件人列表或一个完全不同的消息体。因为MIME格式使用回车分隔在数据包中信息(HTTP数据包中的每一行之间都有一个换行符,在POST和HTTP HEADER之间有两个换行符),通过添加回车提交表单数据(使用FB的一些插件可以很容易的做到),可以允许一个简单的留言板是用来发送成千上万的消息。同样,一个垃圾邮件发送者可以使用这种战术的恶意发送大量的匿名消息。

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

三、邮件注入的攻击原理

中国古话说得好: 知其然才能知其所以然。

为了解释邮件注入的工作原理,我们必须先了解PHP Email函数的工作原理。下面是从PHP Manual中找到API解释

mail():

http://www.php.net/manual/en/function.mail.php

bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )

你可以注意到,这需要三个必填参数(”目的地、主题和消息”)和其他一些可选参数和函数返回一个布尔值。

那么让我们来看看一个带漏洞的代码来演示这个漏洞:

PHP邮件注入实战演练

<?php

$to=" [email protected] ";

if (!isset($_POST["send"]))

{

?>

<form method="POST" action="<?php echo $_SERVER['PHP_SELF'];?>">

From: <input type="text" name="sender">

Subject : <input type="text" name="subject">

Message :

<textarea name="message" rows="10" cols="60" lines="20"></textarea>

<input type="submit" name="send" value="Send">

</form>

<?php

}

else

{

// the form has been submitted

$from=$_POST['sender'];

// send mail :

if (mail($to,$_POST['subject'],$_POST['message'],"From: $fromn"))

{

echo "Your mail has been sent successfully";

}

else

{

echo "An error has been occured !";

}

}

?>

前面的代码将用于演示目的和解释我们的攻击原理。我们将前面的代码分成三个部分:

第一部分

<?php

$to=" [email protected] ";

if (!isset($_POST["send"])){

?>

这段代码将检查表单提交或不是。用户点击提交按钮和普通访问这个页面脚本的响应将是不同的,如果这段代码返回True(if语句中的判断最终结果为true)这意味着表单没有提交。表单将出现,等待用户输入。另一方面,如果它返回"False",这意味着表单已经提交,所以电子邮件将被发送。

第二部分

<form method="POST" action="<?echo $_SERVER['PHP_SELF'];?>">

From: <input type="text" name="sender">

Subject : <input type="text" name="subject">

Message :

<textarea name="message" rows="10" cols="60" lines="20"></textarea>

[1] [2] [3] 下一页

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索邮件 , ,以便于您获取更多的相关知识。

弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

现在注册,免费体验40+云产品,及域名优惠!

云服务器9.9元/月,大学必备