您的位置 首页 php

PHPMailer远程命令执行漏洞分析

摘要:PHPMailer是一个强大的PHP编写的邮件发送类,但近日被爆出远程命令执行漏洞,该漏洞实际上是什么,有何种影响,本文对该漏洞进行了分析及验证方法,并给出防护方案。

0x00 漏洞概要

PHPMailer是一个用于发送电子邮件的函数包,虽然php本身提供了邮件发送函数mail,可以在程序中直接发送电子邮件,不过该函数要求服务器支持sendmail或者必须设置一台不需要中继器的邮件发送服务器,使用起来及其繁琐。

0x01 漏洞分析

我们来看一下phpmailer在程序中是如何处理的:

首先,需要有一个接收输入的参数,这里可以是订阅、回复等:

这里接收了一个邮箱订阅的参数,我们来跟踪下看phpmailer在后端是如何处理的:

接下来phpmailer会调用html2text来进行处理,相关代码如下:

我们可以看到在发送前交给了html2text来处理,然后phpmailer进行发送,我们再去跟踪html2text这里,看看他是如何处理的:


可以看出来preg_replace使用了e参数,通过正则处理完的内容再发送出去。

通过以上代码我们从新再理一遍,email在拼接用户输入的字符串,尽管使用了mysql_real_escape_string,但是并不能证明这是安全的。然后进入了html2text的preg_replace,然后正则刚好带有/e的表现,从而导致了代码执行。

我们再去看官网提供最新版本看一下,通过github上,我们通过看changelog看到:

phpmailer因为兼容问题不再提供了html2text,需要用户自己写。事实上很多开发者仍然还在使用之前官网提供的html2text,我们搜索下相关CMS:

发现有很多仍然在使用。当然,实质上不仅仅影响phpmailer了,凡是使用了html2text都将会存在远程命令执行漏洞的可能性。

0x02 相关案例

邮箱订阅处,使用Burp Suite的中继器,修改email参数的内容:

成功执行了命令,尽管过滤了敏感的字符,但是通过ASCII码仍然可以进行绕过,比如反弹shell。

由于漏洞利用简单,攻击成本低,影响范围广,青藤云安全建议广大站长及厂商立即修复此漏洞。

0x03 修复方案

1.使用青藤云安全产品可以全面检测该漏洞。

2.修改html2text中的正则表达式,取消/e参数。

更多信息请关注微信公众号:qingtengyun

文章来源:智云一二三科技

文章标题:PHPMailer远程命令执行漏洞分析

文章地址:https://www.zhihuclub.com/149914.shtml

关于作者: 智云科技

热门文章

网站地图