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

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

黑客专题访客2021-10-12 9:20:004553A+A-

作者:知道创宇404安全实验室

漏洞简介

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中:

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

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

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

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

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

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

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

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

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的代码如下:

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

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

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

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

补丁分析

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

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

参考文献

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

点击这里复制本文地址 以上内容由黑资讯整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
  • 3条评论
  • 痴妓听弧2022-05-28 08:07:56
  • 漏洞复现Joomla 在 3.7.0 中新增了一个 com_field组件,其控制器的构造函数如下,在components/com_fields/controller.php中:可以看到当访问的view是fields,layout是modal的时候,程序会从JPATH_ADMINISTR
  • 拥嬉离祭2022-05-28 11:38:49
  • blacklisted if (!in_array($name, $this->listBlacklist)) { ... $this->setState('list.' . $name, $value);
  • 青迟僚兮2022-05-28 13:50:03
  • SQL注入漏洞(https://developer.joomla.org/security-centre/692-20170501-core-sql-injection.html),成功利用该漏洞后攻击者可以在未授权的情况下进行SQL注入。漏洞影响未授权状态下SQL注入影响

支持Ctrl+Enter提交

黑资讯 © All Rights Reserved.  
Copyright Copyright 2015-2020 黑资讯
滇ICP备19002590号-1
Powered by 黑客资讯 Themes by 如有不合适之处联系我们
网站地图| 发展历程| 留言建议| 网站管理