Joomla注入漏洞(CVE-2018-6605)复现分析

2018-04-1908:55:09 发表评论
0x00 漏洞概述

  • 漏洞简介

Joomla是一套全球知名的网站内容管理系统,使用PHP语言和MySQL数据库开发。在Joomla的百度地图组件中存在SQL注入。由于在以下函数

getPlacemarkDetails,getPlacemarkHoverText, getPathHoverText,getPathDetails中请求的参数:id,在拼接SQL语句中缺少安全措施,导致了此次攻击。

  • 受影响版本

根据官方描述,此漏洞存在于3.0.0.*。

Joomla注入漏洞(CVE-2018-6605)复现分析

  • 漏洞触发条件

1. 站点接入了zhBaidumap插件,且该插件版本为3.0.0.*

2. 攻击者知道存在注入点的url和post参数。

  • CVE-ID

CVE-2018-6605

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-6605

  • EXPLOIT-DB

EXPLOIT-DB:43974

https://www.exploit-db.com/exploits/43974/

0x01 漏洞详情

  • 复现环境

PHP 7.0.10

Joomla 3.8.6

此插件需要填入百度地图的AK。

Joomla注入漏洞(CVE-2018-6605)复现分析

  • 漏洞复现

由于出现的注入点都相同,着重分析此URL:http://localhost/joomla/index.php?option=com_zhbaidumap&no_html=1&format=raw&task=getPlacemarkDetails 在对问题URL进行POST请求的参数id处存在漏洞。

先观察一下此问题URL对应的功能。

Joomla注入漏洞(CVE-2018-6605)复现分析

未能找到功能点。根据CVE复现,抓包分析。

可以试着根据请求的URL找到拼接的SQL语句。定位到URL对应的代码文件在

joomla\components\com_zhbaidumap\assets\js\objectmanager-min.js文件中出现。

Joomla注入漏洞(CVE-2018-6605)复现分析

未发现相关漏洞代码,转去跟踪getPlacemarkDetails函数。出现在joomla\components\com_zhbaidumap\controller.php中。

Joomla注入漏洞(CVE-2018-6605)复现分析

从上面的代码我们可以看到$addWhereClause .= ' and h.id = '. $id;  $id未做强制类型,之后变量$addWhereClause直接与SQL语句进行拼接,导致了SQL注入。

找到了出现漏洞的代码,想分析一下此处对问题URL进行POST请求参数的作用。从返回包入手,如下图所示:

Joomla注入漏洞(CVE-2018-6605)复现分析

通过定位actionbylick字段找到了此处代码。

Joomla注入漏洞(CVE-2018-6605)复现分析

此处的loadObject函数会将从数据库中取到的第一行作为php对象。

Joomla注入漏洞(CVE-2018-6605)复现分析

由此可知,此处URL会携带参数对数据库中的内容进行查询,如果从数据库查询到值,则返回一个php对象,查询到的数据被插入到actionbyclick字段的参数处。

  • 利用验证

Joomla注入漏洞(CVE-2018-6605)复现分析

0x02 漏洞修复

升级到最新版本。

建议在代码中对数字类型的参数先进行数字类型变换,然后再代入到SQL查询语句中,这样任何注入行为都不能成功。

对于PHP语言编写的网站,大都是和mysql数据库结合的,可以通过如下几种方法结合起来防范SQL注入漏洞:

1. 在GET提交的数据中进行过滤select 、update、delete、insert等其他语句。

2. 在POST提交的数据中,使用函数addslashes()

3. 对于MySQL用户,可以使用函数mysql_real_escape_string( )

4. 使用支持参数化查询语句和占位符的数据库操作类(如PEAR::DB, PDO等)

0x03 参考地址

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-6605

CE安全网

发表评论

您必须登录才能发表评论!