Joomla!3.7.0 SQL注入攻击漏洞分析

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

作者 | Shun

Joomla实际有两个开源的东西:

1、Joomla内容管理系统即JoomlaCMS(Content Management System, CMS)。它是网站的一个基础管理平台,几乎适合从个人网站到百货销售类型的各类网站。

2、Joomla Platform(Joomla框架)。理论上来说它几乎无所不能,除了网站,还可以进行广泛的web开发、手机应用开发等等。

如果您的网站是基于流行的Joomla内容管理系统,请确保您已将您的平台更新到今天发布的最新版本。

漏洞描述

项目: Joomla!子项目: CMS 严重程度: 高 影响版本: 3.7.0 漏洞类型: SQL注入 CVE号码: CVE-2017-8917

你是否遭遇了威胁?

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

SQL注入发生的本质是对请求数据过滤不严,因此攻击者在此有很多文章可以做——例如,泄露用户的密码哈希值(Hash)、登陆后的用户的会话控制(在第二种情况下,如果是获取到登陆后管理员的session,那么整个网站的后台系统可能被控制)。

技术细节

com_fields组件从相同名称的管理端组件中继承一些视图,它允许重复使用为另一方编写的通用代码,而不需要从头来过。

从上面的代码片段可以看出,$config['base_path']变量的值是由JPATH_COMPONENT_ADMINISTRATOR常量传导过去的,该值代表管理员组件目录的本地路径。如此一来,Joomla可以根据这一路径获取视图参数和模块布局。

构建URL如下所示:

/index.php?option=com_fields&view=fields&layout=modal

view参数值:fields

layout参数值:modal

访问此URL可以显示站点上可用的所有自定义字段的列表。

唯一可以进入的管理员视图是fields-这么做会从一个admin-side模型中抓取数据(我们前面讲的 $ config ['base_path']变量)。

在这种情况下,基于MarchModelFields模型的

./administrator/components/com_fields/models/fields.php文件中包含了我们发现的那个漏洞。

这个罪魁祸首可以在getListQuery方法中找到。

对于那些不熟悉Joomla的人而言,“执行SQL语句查询, $ query-> order() ” 这种方法,能做的真的只有将输入内容接入一个查询的ORDER BY语句中。

用户进行输入后会启动list.fullordering状态,因为FieldsModelFields模型是从JModelList类继承而来的,它同样也包含上面的代码段。

你可能会注意到,它会对内容执行一些验证,然后相应地设置list.direction和list.ordering,但是list.fullordering的情况如何呢?

在switch语句之后,不管它是否生成了一个有效的list.direction或list.ordering,我们都可以控制这行命令达到我们想要的值。

所以为了利用这个漏洞,攻击者必须做的是为URL添加适当的参数,以便注入到SQL查询。

修复建议

升级最新版完整安装包或升级补丁包

https://downloads.joomla.org/cms/joomla3/3-7-1

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-05-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

MySQL权限开通的设计方案

MySQL中的权限管理和其他数据库还是有很大的不同,它能够实现几种很特别的权限场景:

1251
来自专栏程序员互动联盟

【线程池】线程池与工作队列

为什么要用线程池? 诸如 Web 服务器、数据库服务器、文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务。请求以某种方式...

3598
来自专栏pangguoming

ubuntu 64位android项目报错的解决方案,打开64位 Ubuntu 的32位支持功能

ubuntu的64位下的android环境,说实话,还真得费点精力了,解决一个问题,又出来一个新问题。 小编昨天刚好不容易将android的环境搭建好了,这不,...

2915
来自专栏信安之路

Google Calaboratory 的另一个 XSS 漏洞

三个月以前,我写了一篇文章来介绍我在 Google Colaboratory 上发现的一个 XSS 漏洞,这篇文章是对前文的一些扩展,并且展示了我在同一个 we...

1944
来自专栏学习有记

Python和SQL Server 2017的强大功能

2195
来自专栏数据和云

数据恢复-SQL被注入攻击程序的应对策略(ORA-16703)

前几天某客户紧急求助我们,其Oracle数据库由于重启之后无法正常启动。最后通过数据库全备进行了一天一夜的恢复,最后仍然无法正常打开数据库。 alter dat...

3746
来自专栏汪伟的专栏

性能优化的正确方向

性能优化并不是一个孤立的课题,除了响应时间的考虑,我们往往还需要综合功能完整性、安全性等等方面的问题。

9020
来自专栏Java工程师日常干货

分布式利器Zookeeper(三)前言Zookeeper分布式锁的代码实现zkclientCurator

本篇博客是分布式利器Zookeeper系列的最后一篇,涉及的话题是:Zookeeper分布式锁的代码实现、zkclient的使用、Curator框架介绍等。

1162
来自专栏耕耘实录

五方法破解Linux(CentOS7.4)系统的root密码

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

1822
来自专栏我是攻城师

关于SparkStreaming中的checkpoint

3034

扫码关注云+社区

领取腾讯云代金券