当前位置:安全客 >> 知识详情

【漏洞预警】Joomla!3.7.0 Core SQL注入漏洞(更新漏洞环境)

2017-05-18 10:21:51 阅读:28416次 收藏 来源: sucuri.net 作者:安全客

http://p8.qhimg.com/t012ba62d38f40c6b8d.jpg

前言


Joomla!是世界上最受欢迎的内容管理系统(CMS)解决方案之一。它可以让用户自定义构建网站实现强大的在线应用程序。据不完全统计互联网上超过3%的网站运行Joomla!,同时它占有全球9%以上的CMS市场份额。

截止至2016年11月,Joomla!的总下载量超过7800万次。目前Joomla!官方还提供了超过7800个扩展插件(含免费、收费插件)及其他的可用资源可供下载。


漏洞描述


漏洞等级严重

漏洞类型:sql 注入

利用难度:简单

利用方式:远程

影响版本:Joomla! 3.7.0 Core

漏洞简述:这个漏洞出现在3.7.0新引入的一个组件“com_fields”,这个组件任何人都可以访问,无需登陆验证。由于对请求数据过滤不严导致sql 注入,sql注入对导致数据库中的敏感信息泄漏,例如用户的密码hash以及登陆后的用户的session(如果是获取到登陆后管理员的session,那么整个网站的后台系统可能被控制)。


漏洞细节


“com_fields ”组件从相同名称的管理端组件继承了一些视图,这样可以缩减大量相同功能的代码,提高代码的复用性。

http://p4.qhimg.com/t01083fc4845fd40c2c.png

从上面的代码片段可以看到,$config['base_path']变量的值是JPATH_COMPONENT_ADMINISTRATOR常量传过去的,这个常量值代表管理员组件目录的本地路径,这样做会造成 Joomla! 从这个路径获取视图views和模块models,要成功的操作需要构造相关参数和值,view 参数的值是fields ,layout 参数的值是modal。那么构造的URL如下:

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

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

需要注意的是这是唯一的一个管理员视图的组件字段(我们前面说到的$config['base_path']变量这块)。这种情况下,我们可以直接从管理员模型获取数据。具体的漏洞位于:

.MarchModelFields  模型下的  ./administrator/components/com_fields/models/fields.php文件中。

最终我们定位到出问题的方法getListQuery

http://p1.qhimg.com/t01c9f63efe1bcb8afd.png

如果不熟悉Joomla!执行SQL查询,$query-> order()真的只是一个方法,其输入将被连接到一个查询的ORDER BY语句,这里就是我们要做的最后一件事,将未经检查的用户输入带入到这里,看看会不会有惊喜

http://p0.qhimg.com/t0132ef473afd87aa0e.png

用户输入传入到list.fullordering,因为FieldsModelFields模型从继承JModelList类,它同样也包含上面的代码段。你可能会注意到它对内容做了一些验证,然后相应地设置list.direction和list.ordering,但是list.fullordering呢?

http://p8.qhimg.com/t01a4c0617197296f57.png

在switch语句之后,不管它是否生成了一个有效的list.direction或者list.ordering,我们可以利用这行指令通过我们输入的内容来设置我们想要的值。

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


验证截图


http://p4.qhimg.com/t01f1880998aa2ac5e9.jpg

PoC


暂不公开


修复建议


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

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


漏洞环境


感谢开源社区力量

漏洞靶场环境 由phithon维护

Vulhub是一个面向大众的开源漏洞靶场,无需docker知识,简单执行两条命令即可编译、运行一个完整的漏洞靶场镜像。

https://github.com/phith0n/vulhub/tree/master/joomla/CVE-2017-8917


参考


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

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

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



本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://blog.sucuri.net/2017/05/sql-injection-vulnerability-joomla-3-7.html

参与讨论,请先 | 注册 | 匿名评论
发布
用户评论
MantisShrimp 2017-05-21 22:12:06
回复 |  点赞

明天有空的话放出来

Helen 2017-05-19 15:25:50
回复 |  点赞

伸手党跪求

为了联盟 2017-05-19 12:20:56
回复 |  点赞

写了个自动化脚本,可以获取用户名,密码hash,session,且轮询所有管理员登录日期,发现存活的session就维持住。看到这么多分析文章贴出来了,想问我这能投稿么?

杰哥大大 2017-05-20 17:28:05
回复 |  点赞

帮助很大。

聪明的狗子 2017-05-19 16:41:42
回复 |  点赞

欢迎投稿!

为了联盟 2017-05-19 12:20:56
回复 |  点赞

写了个自动化脚本,可以获取用户名,密码hash,session,且轮询所有管理员登录日期,发现存活的session就维持住。看到这么多分析文章贴出来了,想问我这能投稿么?

Helen 2017-05-19 15:25:50
回复 |  点赞

伸手党跪求

为了联盟 2017-05-19 12:20:56
回复 |  点赞

写了个自动化脚本,可以获取用户名,密码hash,session,且轮询所有管理员登录日期,发现存活的session就维持住。看到这么多分析文章贴出来了,想问我这能投稿么?

为了联盟 2017-05-19 12:20:56
回复 |  点赞

写了个自动化脚本,可以获取用户名,密码hash,session,且轮询所有管理员登录日期,发现存活的session就维持住。看到这么多分析文章贴出来了,想问我这能投稿么?

查看更多