网站首页 > PHP教程> 文章内容

在PHP应用程序开发中不正当使用mail()函数引发的血案

※发布时间:2017-5-25 0:48:00   ※发布作者:habao   ※出自何处: 

  未正确校验mail()函数的参数内容可能会产生一些安全问题,严重的话会引发远程命令执行漏洞导致服务器被接管。本篇文章就可能产生的安全问题做了简要的分析,同时对如何安全的使用mail()函数提出了一些未正确校验mail()函数的参数内容可能会产生一些安全问题,严重的话会引发远程命令执行漏洞导致服务器被接管。本篇文章就可能产生的安全问题做了简要的分析,同时对如何安全的使用mail()函数提出了一些

  在我们挖掘PHP应用程序漏洞的过程中,我们向著名的Webmail服务提供商Roundcube提交了一个远程命令执行漏洞(CVE-2016-9920)。该漏洞允许者通过利用Roundcube接口发送一个精心构造的电子邮件从而在目标系统上执行任意命令。在我们向厂商提交漏洞,发布了相关的漏洞分析文章后,由于PHP内联函数mail()导致的类似安全问题在其他的PHP应用程序中陆续曝出。在这篇文章中,我们将分析一下这些漏洞的共同点,那些安全补丁仍然存在问题,以及如何安全的使用mail()函数。

  PHP自带了一个内联函数mail()用于在PHP应用程序中发送电子邮件。开发者可以通过使用以下五个参数来配置邮件发送。

  在这篇文章中我们重点分析后两个参数。第四个参数$additional_headers的主要功能是额外电子邮件报头。比如From、Reply-To、Cc以及Bcc。由于邮件报头由CRLF换行符\r\n分隔。当用户输入可以控制第四个参数,者可以使用这些字符(\r\n)来增加其他的邮件报头。这种方式称为电子邮件头注入(或短电子邮件注入)。这种可以通过向邮件头注入CC:或BCC:字段造成发送多封垃圾邮件。值得注意的是,某些邮件程序会自动将\n替换为\r\n。

  为了在PHP中使用mail()函数,必须配置一个电子邮件程序或服务器。在i配置文件中可以使用以下两个选项:

  当PHP配置了第二个选项时,调用mail()函数的将导致执行配置的MTA(邮件传输代理)程序。尽管PHP内部可以调用escapeshellcmd()函数防止恶意用户注入其他的shell命令,mail()函数的第5个参数$additional_parameters允许向MTA(邮件传输代理)中添加新的程序参数。因此,者可以在一些MTA中附加程序标志,启用创建一个用户可控内容的文件。

  mail(,subject,message,,-f.$_GET[from]);

  在上述代码中存在一个远程命令执行漏洞,这个问题容易被没有安全意识的开发人员忽略。GET参数完全由用户控制,者可以利用该处输入向邮件程序传递其他额外的参数。举例来说,在发送邮件的过程中可以使用-O参数来配置发送邮件的选项,使用-X参数可以指定日志文件的。

  在许多现实世界的应用程序中,有很多由于mail()函数的第五个参数使用不当引发的安全问题。最近发现以下广受关注的PHP应用程序受到此类漏洞的影响(多数漏洞由Dawid Golunski发现)。

  由于一些广泛使用的Web应用程序(如)部分模块基于以上库开发,所以也会受到该类漏洞的影响。由于一些广泛使用的Web应用程序(如)部分模块基于以上库开发,所以也会受到该类漏洞的影响。

  PHP提供了函数用来过滤用户的输入,防止恶意者执行其他的系统命令或参数。直观来讲,下面的PHP语句看起来很安全,并且防止了-param1参数的中断:

  从最终系统执行的命令可以看出,两个嵌套的转义函数混淆了引用并允许附加另一个参数param2。

  PHP的mail()函数在内部使用escapeshellcmd()函数过滤传入的参数,以防止命令注入。这正是为什么escapeshellarg()函数不会mail()函数的第5个参数的。的开发人员率先发布了针对该漏洞的补丁。

  另一种直接的方法是使用PHP的电子邮件过滤器(email filter),以确保在mail()函数的第5个参数中只使用有效的电子邮件地址。

  对于上文给出的url编码输入,filter_var()函数返回true,将该payload识别为有效的邮件格式。

  当开发人员使用该函数验证电子邮件格式作为唯一的安全验证措施,此时仍然是可以被者利用的:与我们之前的方式类似,在PHP程序发送邮件时,我们精心构造的恶意“电子邮件地址”会将将PHP webshell生成在Web服务根目录下。

  仔细分析应用程序中传入mail()函数的参数,满足以下条件:1. $to 除非可以预期用户的输入内容,否则不直接使用用户输入

  事实上,当把用户的输入作为shell指令执行时,没有什么办法可以系统的安全性,千万不要去你的运气。

  如果在开发您的应用程序过程中第5个参数一定要由用户控制,你可以使用电子邮件过滤器(email filter)将用户输入的数据为最小字符集,即使它违反了RFC合规性。我们不要信任任何转义或引用程序,因为据历史资料表示这些功能是存在安全问题的,特别是在不同中使用时,可能还会出其他安全隐患。Paul Buonopane研究出了另一种方法去解决这个问题,可以在这里找到。

  许多PHP应用程序都有向其用户发送电子邮件的功能,例如提醒和通知。虽然电子邮件头注入是众所周知的安全问题,但是当开发人员使用mail()函数时,往往会忽视不正当的使用有可能导致远程命令执行漏洞。在这篇文章中,我们主要分析了mail()函数的第5个参数使用不当可能存在的安全风险,以及如何防范这种问题,防止服务器受到。【编辑推荐】

推荐:

相关阅读
  • 没有资料
重庆学习网zslpsh,0755深圳房产人才招聘网,拾年网90后,anedc股票,最新电影下载淘娱淘乐,重庆中学生网高考,重庆中学生网高考,学习重庆方言网,重庆中学生学习方法,重庆俗语网,中学生网zslpsh,0755深圳交友网,重庆初中生,贵州重庆方言网,025新闻网,西南重庆方言歌曲,025南京交友网,重庆农家乐美女,观赏蟹种类zadull,云南重庆方言网,重庆中学学习网,028成都交友网,推广taoyutaol,西南四川方言网,观赏龟论坛zadull,四川重庆方言网,022天津交友网,重庆中学生网家长,鹦鹉鱼zadull,重庆俗语,电影淘娱淘乐,taoyutaole娱乐,华夏视讯网,0755深圳旅游招聘,昆明重庆方言网,淘娱淘乐影视,www.00game.net,观赏鱼zadul,重庆高考zslpsh,重庆中学生网高考,027房产招聘网,坝坝舞wagcw,西南重庆方言网,贵州重庆方言网,重庆言子儿网,热带鱼zadull,重庆高考zslpsh,0755深圳旅游招聘网,淘娱淘乐影视网,0571.361.cm,重庆方言学习网,028成都新闻,异形观赏鱼种类,影视网淘娱淘乐,最新电影下载淘娱淘乐,0773桂林论坛,拾年网80后动画片,观赏蟹论坛zadull,观赏龟繁殖教程,重庆一中zslpsh,重庆俗语网,广场舞wagcw,观赏虾的种类zadull,观赏鱼观赏虾观赏龟,西南方言网,观赏鱼之家论坛zadull,战争前线辅助00game,西南重庆方言小说,重庆中小学zslpsh,推广taoyutaol,战争前线论坛00game,0871交友网,025南京新闻网,重庆言子儿网站,娱乐taoyutaole,022天津交友网,025新闻网,重庆中学生网学习,022天津交友网,重庆方言歌网,www.120.cm健康网,anedc股票,重庆初中生