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