Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

【漏洞分析】CVE-2016-10033:PHPMailer远程代码执行漏洞的分析

$
0
0
【漏洞分析】CVE-2016-10033:phpMailer远程代码执行漏洞的分析

2017-01-10 13:48:47
来源:blog.fortinet.com 作者:myswsun

阅读:525次
点赞(0)
收藏





【漏洞分析】CVE-2016-10033:PHPMailer远程代码执行漏洞的分析

翻译:myswsun

预估稿费:70RMB(不服你也来投稿啊!)

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


0x00前言

PHP是一种开源的脚本语言,被用来嵌入HTML做Web开发。它有9百万用户,并且被许多流行的工具使用,例如WordPress、Drupal、Joomla!等。这周一个高危安全更新用来解决PHPMailer的远程代码执行漏洞CVE-2016-10033。它是PHP网站发送邮件的一个库。

这个致命的漏洞是由class.phpmailer.php没有正确处理用户的请求导致的。结果远程攻击者能够在有弱点的服务器上远程执行代码。

这个漏洞影响了5.2.18版本之前的PHPMailer。


0x01分析

当用PHPMailer发送一个邮件时,正常的处理是:

1. PHPMailer获取用户请求

2. PHPMailer校验用户提交的数据

3. PHPMailer传递数据到PHP的mail()函数发送邮件。

在这个校验的步骤中,PHPMailer校验用户数据代码如下:


【漏洞分析】CVE-2016-10033:PHPMailer远程代码执行漏洞的分析

这个校验使用标准的校验方法,如PHP内置的FILTER_VALIDATE_EMAIL和html5默认的邮件类型模式匹配。


【漏洞分析】CVE-2016-10033:PHPMailer远程代码执行漏洞的分析

在这个例子中$address的值“attacker -InjectedParam @example.com”将被拒绝。但是这些方法遵循RFC3696协议,意味着邮件地址能够包含用引号括起来的空格,因此$address"attacker -InjectedParam"@example.com将绕过过滤。

校验完成之后,PHPMailer将传递邮件收件人地址,主题,正文,头和发件人地址都PHP的mail()函数继而发送邮件。代码如下。


【漏洞分析】CVE-2016-10033:PHPMailer远程代码执行漏洞的分析

问题就在这儿,PHPMailer不能在传递他们到mail()之前纠正这些邮件数据。它只是返回:


【漏洞分析】CVE-2016-10033:PHPMailer远程代码执行漏洞的分析

然后传递$result到mail()函数。这个问题导致攻击。

例如,当用面地址发送:


【漏洞分析】CVE-2016-10033:PHPMailer远程代码执行漏洞的分析

mail()函数将以4个参数执行/usr/bin/sendmail,“/usr/bin/sendmail”, “-t”, “-i” 和 “-fattacker -InjectedParam@example.com”。

然而,攻击者能够通过注入一个“\"”.比如用如下地址:


【漏洞分析】CVE-2016-10033:PHPMailer远程代码执行漏洞的分析

这个邮件地址这个发送邮件的函数将执行6个参数,“/usr/bin/sendmail”, “-t”, “-i”, “-fattacker”, “-InjectedParam1” 和 “-InjectedParam2"@example.com”。


0x02如何重现

为了重现攻击,我建了个网站服务器如下:


【漏洞分析】CVE-2016-10033:PHPMailer远程代码执行漏洞的分析

源码如下:


【漏洞分析】CVE-2016-10033:PHPMailer远程代码执行漏洞的分析

这个表单类似网站反馈功能。攻击者能够利用一个恶意的邮件地址发送邮件:


【漏洞分析】CVE-2016-10033:PHPMailer远程代码执行漏洞的分析

PHP代码填充到Name和Message如下:


【漏洞分析】CVE-2016-10033:PHPMailer远程代码执行漏洞的分析

【漏洞分析】CVE-2016-10033:PHPMailer远程代码执行漏洞的分析

在发送邮件之前,web服务根目录文件如下图。这个index.php是网页代码“vulnerable”包含PHPMailer文件。


【漏洞分析】CVE-2016-10033:PHPMailer远程代码执行漏洞的分析

Payload被发送如下图:


【漏洞分析】CVE-2016-10033:PHPMailer远程代码执行漏洞的分析

在发送攻击邮件后,一个新的文件“test.php”被创建了。它包含发送的邮件的原始数据,并包含我们的PHP代码段:


【漏洞分析】CVE-2016-10033:PHPMailer远程代码执行漏洞的分析

【漏洞分析】CVE-2016-10033:PHPMailer远程代码执行漏洞的分析

然后我们能访问我们的test.php文件并执行命令。如下图我们执行了“cat /etc/passwd”:


【漏洞分析】CVE-2016-10033:PHPMailer远程代码执行漏洞的分析

真实的攻击可能是上传一个攻击代码的文件。这意味着攻击者能够通过邮件发送恶意代码到服务器上,然后远程执行。


0x05解决方案

所有PHPMailer的用户应该立刻升级到最新版本。


【漏洞分析】CVE-2016-10033:PHPMailer远程代码执行漏洞的分析
【漏洞分析】CVE-2016-10033:PHPMailer远程代码执行漏洞的分析
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://blog.fortinet.com/2017/01/05/analysis-of-phpmailer-remote-code-execution-vulnerability-cve-2016-10033

Viewing all articles
Browse latest Browse all 12749

Trending Articles