PHPMailer < 5.2.18 Remote Code Execution(CVE-2016-10033)【转】

2016-12-27 Mottoin Team MottoIN

漏洞描述

波兰研究人员 Dawid Golunski 发现了这个PHPMailer的远程代码执行漏洞。可实现远程任意代码在web服务器账户环境中执行,并使web应用陷入威胁中。攻击者主要在常见的web表单如意见反馈表单,注册表单,邮件密码重置表单等使用邮件发送的组件时利用此漏洞。PHPMailer广泛应用于开源项目中,包括WordPress、Drupal、1CRM、Joomla!等。且PHPMailer全球范围内的用户量大约有900万。所以这个漏洞影响范围还是比较广的。

漏洞编号

CVE-2016-10033

影响版本

PHPMailer < 5.2.18

漏洞级别

高危

漏洞细节

PHPMailer < 5.2.18版本中,发件人的电子邮件地址在传输时没有转义为shell命令。造成攻击者可以在发件电子邮件中增加shell命令以达到在目标上执行恶意代码的目的。

漏洞代码在class.phpmailer.php 第1446行没有进行过滤:

 $params = sprintf('-f%s', $this->Sender);

Version 5.2.17

if (!empty($this->Sender)) {
 $params = sprintf('-f%s', $this->Sender);}if ($this->Sender != '' and !ini_get('safe_mode')) {
 $old_from = ini_get('sendmail_from');
 ini_set('sendmail_from', $this->Sender);}

Version 5.2.18

if (!empty($this->Sender) and $this->validateAddress($this->Sender)) {
 $params = sprintf('-f%s', escapeshellarg($this->Sender));}if (!empty($this->Sender) and !ini_get('safe_mode') and $this->validateAddress($this->Sender)) {
 $old_from = ini_get('sendmail_from');
 ini_set('sendmail_from', $this->Sender);}

具体细节可以查看GitHub上的代码更新:

mail函数

 $result = @mail($to, $subject, $body, $header, $params);

不过利用此漏洞似乎需要能够控制发件人的电子邮件地址。

漏洞复现

PoC

针对WordPress内核暂无公开可行的漏洞利用代码,WordPress的PHPMailer核心代码在/wp-includes/class-smtp.ph

复现环境

目前有安全研究员在GitHub上共享了PHPMailer的复现环境Docker镜像

安装Docker之后直接运行如下命令:

docker run --rm -it -p 8080:80 vulnerables/cve-2016-10033

然后访问localhost:8080就可以打开漏洞测试环境了

利用

测试远程目标运行如下命令:

./exploit host:port

本地测试如下

./exploit localhost:8080

如果目标存在漏洞执行exploit之后你将获得一个名为”backdoor.php“的shell,并可通过此shell执行命令:

漏洞修复

  • 更新至5.2.18版本
  • 升级开源程序内核

官方参考

参考

此条目发表在攻击经验, 未分类, 漏洞攻击分类目录。将固定链接加入收藏夹。