摘要: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
本文暂时没有评论,来添加一个吧(●'◡'●)