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 中: 可以看到当访问的 view 是 fields, layout 是 modal 的时候,程序会从 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 是一个 state, state 会在视图的 display 函数中进行设置: ...

2017年5月18日 · 1 分钟 · lucien116