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

https://mp.weixin.qq.com/s?__biz=MzAxODg1MDMwOQ==&mid=2247489109&idx=1&sn=0c9a3388e4ac1389897b4449fb3af110&chksm=9bcea13facb928293ac06fede04f15d564b60a5e8ad26208f28ebe175017aa3d2144617f2b60&mpshare=1&scene=23&srcid=0418r0yqNrZ1hyGCdDHl8EK1#rd


0x00 漏洞概述


  • 漏洞简介


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

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


  • 受影响版本


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

  

  • 漏洞触发条件


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。


  • 漏洞复现


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


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


未能找到功能点。根据CVE复现,抓包分析。如下图所示:


上面复现时抓包,可以试着根据请求的URL找到拼接的SQL语句。定位到URL对应的代码文件在

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


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


定位到漏洞代码:


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


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


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


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

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


  • 利用验证


0x02 漏洞修复


升级到最新版本。


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


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


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

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

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

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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值