Joomla 3.4.6 RCE 分析
Joomla 3.4.6 RCE 漏洞分析,首发先知社区: https://xz.aliyun.com/t/6522
漏洞环境及利用
- Joomla 3.4.6 : https://downloads.joomla.org/it/cms/joomla3/3-4-6
- PHP 版本: 5.5.38
- Joomla 3.4 之前(包含3.4)不支持 PHP7.0
- 影响版本: 3.0.0 --- 3.4.6
- 漏洞利用: https://github.com/momika233/Joomla-3.4.6-RCE
漏洞成因
- 本次漏洞主要是由于对 session 处理不当,从而可以伪造 session 从而导致 session 反序列化
漏洞分析
session 逃逸
session 在 Joomla 中的处理有一些的问题,它会把没有通过验证的用户名和密码存储在
_session表中
在登陆过程中,会有一个 303 的跳转,这个 303 是先把用户的输入存在数据库中,再从数据库中读取、对比,即先执行
write函数在执行read函数
而且它的 csrf token 也在前端页面中

这两个函数位于
libraries/joomla/session/storage/database.php中,内容如下:
可以看到,它在写入的过程中将
\x00*\x00替换为\0\0\0,因为 MySQL 中不能存储NULL,而protected变量序列化后带有\x00*\x00在读取过程中会重新把
\0\0\0替换为\x00*\x00以便反序列化,但是这个替换将 3 字节的内容替换为 6 字节如果提交的
username为per\0\0\0i0d,那么在read时返回的数据就是s:8:s:"username";s:12:"perNNNi0d"N 代表 NULL,替换的大小为 9 字节,但是声明的是 12 字节,那么这将是一个无效的对象那么就可以利用这个溢出来构造"特殊"的代码
值得一提的是,在进行
replace后,反序列化时username会按照 54 的长度读取,读取到password字段处,以其结尾的;作为结尾,而password字段的内容就逃逸出来,直接进行反序列化了。思路
- 使用
\0\0\0溢出,来逃逸密码 value - 重新构建有效的对象
- 发送 exp
- 触发 exp
- 使用
在数据库中
s:8:s:"username";s:54:"\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";s:8:"password";s:6:"123456"
在读取置换之后
s:8:s:"username";s:54:"NNNNNNNNNNNNNNNNNNNNNNNNNNN";s:8:"password";s:6:"123456"
实现对象注入
s:8:s:"username";s:54:"NNNNNNNNNNNNNNNNNNNNNNNNNNN";s:8:"password";s:6:"1234";s:2:"HS":O:15:"ObjectInjection"
POP 链的构造
接下来就是 POP 链的构造
在
libraries/joomla/database/driver/mysqli.php中的__destruct()触发disconnect()函数,对disconnectHandlers数组中的每个值,都会执行call_user_func_array(),并将&$this作为参数引用,但是不能控制参数,利用条件是$this->connection为truepublic function __destruct()
{
$this->disconnect();
}
public function disconnect()
{
// Close the connection.
if ($this->connection)
{
foreach ($this->disconnectHandlers as $h)
{
call_user_func_array($h, array( &$this));
}
mysqli_close($this->connection);
}
$this->connection = null;
}
但是在
libraries/simplepie/simplepie.php中又有可以利用的,这里的函数和参数值都在我们的控制之下
这条语句执行的条件是
$this->cache必须为true,$parsed_feed_url['scheme']不为空根据这些信息就能够构造出反序列化链了,如下图,可以很清晰看出构造方式

如果
zopatkgieeqqmifstiih出现在返回页面就可以判断存在该漏洞
漏洞修复
- 对 session 信息进行 base64 或其他编码
参考链接
- https://blog.hacktivesecurity.com/index.php?controller=post&action=view&id_post=41
- https://github.com/momika233/Joomla-3.4.6-RCE/blob/master/Joomla-3.4.6-RCE.py
Joomla 3.4.6 RCE 分析的更多相关文章
- 通过Joomla的两次RCE漏洞看session反序列化
关于Session的前置知识: session 对数据的序列化方式一共有三种: 默认是 php 处理器:session.serialize_handler = php 效果如图: 通过|分割数据,|前 ...
- Joomla 3.4.6 RCE复现及分析
出品|MS08067实验室(www.ms08067.com) 本文作者:whojoe(MS08067安全实验室SRST TEAM成员) 前言 前几天看了下PHP 反序列化字符逃逸学习,有大佬简化了一下 ...
- Laravel 5.8 RCE 分析
原帖地址 : https://xz.aliyun.com/t/6059 Laravel 代码审计 环境搭建 composer create-project --prefer-dist laravel/ ...
- thinkphp 5.1框架利用及rce分析
前言 上个学期钻研web渗透的时候接触过几个tp的框架,但那时候还没有写blog的习惯,也没有记录下来,昨天在做ctf的时候正好碰到了一个tp的框架,想起来就复现一下 正文 进入网站,标准笑脸,老tp ...
- CVE-2022-30190 Follina Office RCE分析【附自定义word钓鱼模板POC】
昨天看了下'Follina' MS-MSDT n-day Microsoft Office RCE 这个漏洞,修改了下chvancooten的脚本,实现可以自定义word模板,便于实战中钓鱼使用,自己 ...
- CNTA-2019-0014 wls9-async 反序列化 rce 分析
在调试weblogic,以前导入jar包都是在weblogic目录搜索*.jar拷贝出来在导入IDEA.有时候会出现好多相同的jar包,调试的时候就会出问题,实际上导入以下俩个包就可以了.1.是mod ...
- Joomla3.4.6 RCE漏洞深度分析
笔者<Qftm>原文发布:https://www.freebuf.com/vuls/216512.html *严正声明:本文仅限于技术讨论与分享,严禁用于非法途径 0×00 背景 10月9 ...
- Nuxeo 认证绕过和RCE漏洞分析(CVE-2018-16341)
简介 Nuxeo Platform是一款跨平台开源的企业级内容管理系统(CMS).nuxeo-jsf-ui组件处理facelet模板不当,当访问的facelet模板不存在时,相关的文件名会输出到错误页 ...
- 【Python】CVE-2017-10271批量自查POC(Weblogic RCE)
1.说明 看到大家对weblogic漏洞这么热衷,于是也看看这个漏洞的测试方式. 找了几个安全研究员的博客分析,经过几天的摸索大体清楚漏洞由XMLDecoder的反序列化产生. 漏洞最早4月份被发现, ...
随机推荐
- HTTP 请求状态码
200 请求成功 304 从缓存中读取 302 + 响应头中定义location: 重定向 // 自定义重定向 @RequestMapping("/customRedirecti ...
- AttributeError: module 'tensorflow.python.keras.backend' has no attribute 'get_graph'处理办法
原因:安装的tensorflow版本和keras版本不匹配,只需卸载keras,重新安装自己tensorflow对应的版本. Keras与tensorflow版本匹配查询网站
- [HDU2546]饭卡<dp 01背包>
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546 #题目描述: 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前, ...
- JAVA常见面试题问题简述(持续更新中)
JAVA常见面试题问题简述 1. springcloud和dubbo的区别 ①相比之下springcloud 的社区会更加活跃,解决问题的速度也会越来越快,dubbo相对来说如果碰到没有解决的问题,就 ...
- Unity引擎入门——制作第一个2D游戏(2)角色移动与动画
在上一节的内容里,我们已经创建出了一个主角,也搭建了一个简单的场景. 传送门:https://www.cnblogs.com/zny0222/p/12653088.html 既然有了主角,要怎样才能让 ...
- Q - Marriage Match IV (非重复最短路 + Spfa + 网络最大流Isap)
Q - Marriage Match IV Do not sincere non-interference. Like that show, now starvae also take part in ...
- Java并发基础01. 传统线程技术中创建线程的两种方式
传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式 ...
- idea运行javadoc生成文档以及 报错编码gbk的不可映射字符坑
将项目类信息生成文档 idea整合了javadoc的操作,可以一键生成doc文档 方法: 选中你要生成文档的项目 点击上方tools->Generate JavaDoc 运行即可 注意这里有一个 ...
- STM32F103ZET6串口通信
1.电平标准 根据通讯使用的电平标准不同,串口通讯可分为TTL标准和RS-232标准,如下表: 从图中可以看到,TTL电平标准使用5V表示高电平,使用0V表示低电平.在R232电平标准中,为了增加串口 ...
- 使用Gitee搭建个人图床
使用Gitee搭建个人图床 一.前言 搭建个人的图床可以更加方便地管理个人图片,虽然Github也可以实现个人图床的搭建,但是,Github毕竟是外网,访问速度慢且不稳定.因此采用Gitee来搭建图床 ...