Joomla 3.4.6 RCE 漏洞分析,首发先知社区: https://xz.aliyun.com/t/6522

漏洞环境及利用

漏洞成因

  • 本次漏洞主要是由于对 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 字节

  • 如果提交的 usernameper\0\0\0i0d ,那么在 read 时返回的数据就是 s:8:s:"username";s:12:"perNNNi0d" N 代表 NULL,替换的大小为 9 字节,但是声明的是 12 字节,那么这将是一个无效的对象

  • 那么就可以利用这个溢出来构造"特殊"的代码

  • 值得一提的是,在进行 replace 后,反序列化时 username 会按照 54 的长度读取,读取到 password 字段处,以其结尾的 ; 作为结尾,而 password 字段的内容就逃逸出来,直接进行反序列化了。

  • 思路

    1. 使用 \0\0\0 溢出,来逃逸密码 value
    2. 重新构建有效的对象
    3. 发送 exp
    4. 触发 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->connectiontrue

    public 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 或其他编码

参考链接

Joomla 3.4.6 RCE 分析的更多相关文章

  1. 通过Joomla的两次RCE漏洞看session反序列化

    关于Session的前置知识: session 对数据的序列化方式一共有三种: 默认是 php 处理器:session.serialize_handler = php 效果如图: 通过|分割数据,|前 ...

  2. Joomla 3.4.6 RCE复现及分析

    出品|MS08067实验室(www.ms08067.com) 本文作者:whojoe(MS08067安全实验室SRST TEAM成员) 前言 前几天看了下PHP 反序列化字符逃逸学习,有大佬简化了一下 ...

  3. Laravel 5.8 RCE 分析

    原帖地址 : https://xz.aliyun.com/t/6059 Laravel 代码审计 环境搭建 composer create-project --prefer-dist laravel/ ...

  4. thinkphp 5.1框架利用及rce分析

    前言 上个学期钻研web渗透的时候接触过几个tp的框架,但那时候还没有写blog的习惯,也没有记录下来,昨天在做ctf的时候正好碰到了一个tp的框架,想起来就复现一下 正文 进入网站,标准笑脸,老tp ...

  5. CVE-2022-30190 Follina Office RCE分析【附自定义word钓鱼模板POC】

    昨天看了下'Follina' MS-MSDT n-day Microsoft Office RCE 这个漏洞,修改了下chvancooten的脚本,实现可以自定义word模板,便于实战中钓鱼使用,自己 ...

  6. CNTA-2019-0014 wls9-async 反序列化 rce 分析

    在调试weblogic,以前导入jar包都是在weblogic目录搜索*.jar拷贝出来在导入IDEA.有时候会出现好多相同的jar包,调试的时候就会出问题,实际上导入以下俩个包就可以了.1.是mod ...

  7. Joomla3.4.6 RCE漏洞深度分析

    笔者<Qftm>原文发布:https://www.freebuf.com/vuls/216512.html *严正声明:本文仅限于技术讨论与分享,严禁用于非法途径 0×00 背景 10月9 ...

  8. Nuxeo 认证绕过和RCE漏洞分析(CVE-2018-16341)

    简介 Nuxeo Platform是一款跨平台开源的企业级内容管理系统(CMS).nuxeo-jsf-ui组件处理facelet模板不当,当访问的facelet模板不存在时,相关的文件名会输出到错误页 ...

  9. 【Python】CVE-2017-10271批量自查POC(Weblogic RCE)

    1.说明 看到大家对weblogic漏洞这么热衷,于是也看看这个漏洞的测试方式. 找了几个安全研究员的博客分析,经过几天的摸索大体清楚漏洞由XMLDecoder的反序列化产生. 漏洞最早4月份被发现, ...

随机推荐

  1. JSP+Servlet+C3P0+Mysql实现的简单新闻系统

    项目简介 项目来源于:https://gitee.com/glotion/servlet-jsp_news 本系统基于JSP+Servlet+C3P0+Mysql.涉及技术少,易于理解,适合JavaW ...

  2. 本地缓存Ehcache

    1,什么是Ehcache    Ehcache是纯java的开源缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider.它主要面向通用缓存.Java EE和轻量级容器, ...

  3. iOS UITableView优化

    一.Cell 复用 在可见的页面会重复绘制页面,每次刷新显示都会去创建新的 Cell,非常耗费性能.  解决方案:创建一个静态变量 reuseID,防止重复创建(提高性能),使用系统的缓存池功能. s ...

  4. Markdown语法快速学习

    Markdown 简洁语法说明 0.前言 一直以来都是以word文档做笔记,存在很多问题,比如代码格式.高亮等.这次公司要求使用markdown,感觉眼前一亮,以前word的问题都得到了解决,而且可以 ...

  5. Mybatis多表关联查询字段值覆盖问题

    一.错误展示 1.首先向大家展示多表关联查询的返回结果集 <resultMap id="specialdayAndWorktimeMap type="com.hierway. ...

  6. 2020非常全的软件测试linux常用命令全集,linux面试题及参考答案

    一.前言: 作为一名软件测试工程师,我相信大部分的人都和Linux打过交道,因为我们的服务器一般都是装的Linux操作系统,包括各种云服务器也都是用的Linux,目前主流是CentOS7,那么对于一个 ...

  7. C 旅店

    时间限制 : - MS   空间限制 : - KB  评测说明 : 1s,256m 问题描述 一条笔直的公路旁有N家旅店,从左往右编号1到N,其中第i家旅店的位置坐标为Xi.旅人何老板总在赶路.他白天 ...

  8. HDU 2147kiki's game(巴什博弈变形)

    题目链接 思路如下 P : 必胜点,那个人先走到 含P的点,那个这个人一定会输, N:必败点,谁走到这个点谁输! 在这一个题中: 某个点是P还是 N,之与 ⬅️左边第一个点.⬇️下边第一个点.↙️左下 ...

  9. MySQL手工注入进阶篇——突破过滤危险字符问题

    当我们在进行手工注入时,有时候会发现咱们构造的危险字符被过滤了,接下来,我就教大家如何解决这个问题.下面是我的实战过程.这里使用的是墨者学院的在线靶场.咱们直接开始. 第一步,判断注入点. 通过测试发 ...

  10. 六、【Docker笔记】Docker数据管理

    前几节我们介绍了Docker的基本使用和三大核心概念,那么我们在使用Docker的过程中,Docker中必然产生了大量的数据,对于这些数据我们需要查看或者对这些数据进行一个备份,也有可能容器之间的数据 ...