Joomla! 3.7 Core SQL 注入 (CVE-2017-8917)漏洞分析

栏目: 数据库 · 发布时间: 7年前

内容简介:Joomla! 3.7 Core SQL 注入 (CVE-2017-8917)漏洞分析

Author: p0wd3r (知道创宇404安全实验室)

Date: 2017-05-18

0x00 漏洞概述

漏洞简介

Joomla于5月17日发布了新版本3.7.1,( https://www.joomla.org/announcements/release-news/5705-joomla-3-7-1-release.html ),本次更新中修复一个高危 SQL 注入漏洞( https://developer.joomla.org/security-centre/692-20170501-core-sql-injection.html ),成功利用该漏洞后攻击者可以在未授权的情况下进行SQL注入。

漏洞影响

未授权状态下SQL注入

影响版本: 3.7.0

0x01 漏洞复现

Joomla 在 3.7.0 中新增了一个 com_field 组件,其控制器的构造函数如下,在 components/com_fields/controller.php 中:

Joomla! 3.7 Core SQL 注入 (CVE-2017-8917)漏洞分析

可以看到当访问的 viewfieldslayoutmodal 的时候,程序会从 JPATH_ADMINISTRATOR 中加载 com_fields ,这就意味着普通用户可以通过这样的请求来使用管理员的 com_fields

接下来我们看管理员的 com_fields 组件,我们来到 administrator/components/com_fields/models/fields.php ,其中的 getListQuery 的部分代码如下:

Joomla! 3.7 Core SQL 注入 (CVE-2017-8917)漏洞分析

程序通过 $this->getState 取到 list.fullordering ,然后使用 $db->escape 处理后传入 $query->order 函数,mysqli的 escape 函数代码如下:

Joomla! 3.7 Core SQL 注入 (CVE-2017-8917)漏洞分析

这里调用 mysqli_real_escape_string 来转义字符,该函数具体作用如下:

Joomla! 3.7 Core SQL 注入 (CVE-2017-8917)漏洞分析

仅对单双引号等字符进行转义,并未做更多过滤。另外 $query->order 函数的作用仅仅是将数据拼接到 ORDER BY 语句后,也并未进行过滤,所以如果 list.fullordering 可控,那么就可以进行注入。

我们可以看到 list.fullordering 是一个 statestate 会在视图的 display 函数中进行设置:

Joomla! 3.7 Core SQL 注入 (CVE-2017-8917)漏洞分析

跟进这个设置过程,程序会走到 libraries/legacy/model/list.php 中的 populateState 函数中,具体的调用栈如下:

Joomla! 3.7 Core SQL 注入 (CVE-2017-8917)漏洞分析

该函数中有如下一段代码:

if ($list = $app->getUserStateFromRequest($this->context . '.list', 'list', array(), 'array'))  
{
    foreach ($list as $name => $value)
    {
        // Exclude if blacklisted
        if (!in_array($name, $this->listBlacklist))
        {

            ...

            $this->setState('list.' . $name, $value);
        }
    }
}

程序通过 $app->getUserStateFromRequest 取到一个 $list 数组 ,如果数组的key不在黑名单中,则遍历该数组对相应 state 进行注册, getUserStateFromRequest 的代码如下:

Joomla! 3.7 Core SQL 注入 (CVE-2017-8917)漏洞分析

结合前面的调用来看,我们可以通过请求中的参数 list 来设置 $list 变量,因此我们访问 http://ip/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml(2,concat(0x7e,(version())),0) 并开启动态调试动态调试,结果如下:

Joomla! 3.7 Core SQL 注入 (CVE-2017-8917)漏洞分析

可以看到 list.fullordering 已经被我们控制。

回到 getListQuery ,该函数会在视图加载时被自动调用,具体函数调用栈如下:

Joomla! 3.7 Core SQL 注入 (CVE-2017-8917)漏洞分析

所以我们的payload也就通过 getState 传入了这个函数,最终导致SQL注入:

Joomla! 3.7 Core SQL 注入 (CVE-2017-8917)漏洞分析

Joomla! 3.7 Core SQL 注入 (CVE-2017-8917)漏洞分析

0x02 补丁分析

Joomla! 3.7 Core SQL 注入 (CVE-2017-8917)漏洞分析

改为取 list.orderinglist.direction 作为查询的参数,这两个参数在 populateState 函数中做了如下处理:

Joomla! 3.7 Core SQL 注入 (CVE-2017-8917)漏洞分析

如果值不在指定范围内则将其更改为默认值,因此无法再将payload带入。

0x03 参考

https://www.seebug.org/vuldb/ssvid-93113

https://blog.sucuri.net/2017/05/sql-injection-vulnerability-joomla-3-7.html

https://developer.joomla.org/security-centre/692-20170501-core-sql-injection.html

https://www.joomla.org/announcements/release-news/5705-joomla-3-7-1-release.html


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Elements of Programming

Elements of Programming

Alexander A. Stepanov、Paul McJones / Addison-Wesley Professional / 2009-6-19 / USD 39.99

Elements of Programming provides a different understanding of programming than is presented elsewhere. Its major premise is that practical programming, like other areas of science and engineering, mus......一起来看看 《Elements of Programming》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具