OpenCart前台某插件SQL注入漏洞【CVE-2018-11231】

2018-05-2208:45:02 发表评论

简介

OpenCart 是近年来国内外非常流行的 PHP 开源电子商务网站系统。该电商网站系统安装方便,功能强大,操作简单。支持多语言、多货币和多店铺。OpenCart 外围开发生态圈发达,更有上万款免费和收费的模块插件和模板主题可供选择。代码完全开源,功能持续更新,代码结构清晰易懂,二次开发容易上手,入门门槛低。基于这些特点使得 OpenCart 快速成为了世界上广泛应用的 电子商务建站系统。

漏洞详情

这里直接进入存在漏洞的代码,代码位置为catalog/controller/extension/payment/divido.php第79行开始

OpenCart前台某插件SQL注入漏洞【CVE-2018-11231】

这里出现问题的是84行的语句,这里file_get_contents('php://input')实际上就是获取POST传入的值,然后经过一次json解析传入到data参数中

86行判断data中的status参数是否为空,如果为空则返回,那么这里传入的status参数不为空就行

跟入91行,这里$data->metadata->order_id参数构造一下即可,也就是说这里的参数同样是可控的,下面我们跟进这这个getLookupByOrderId函数

OpenCart前台某插件SQL注入漏洞【CVE-2018-11231】

这里就出现了问题,这里传入的order_id参数进行直接拼接,那么这里我们传入POST值,然后经过json解析获取order_id参数,实现最终的拼接,因此判断此处存在sql注入漏洞

这里漏洞利用有个前提就是opencart网站需要安装divido这个付款插件,默认是不安装的

OpenCart前台某插件SQL注入漏洞【CVE-2018-11231】

这里安装即可,然后我们来到前台访问存在漏洞的页面

漏洞url为

  1. https://www.cesafe.com/upload/index.php?route=extension/payment/divido/update

POST参数为

  1. {"metadata":{"order_id":"1 and updatexml(1,concat(0x7e,user()),1)"},"status":2}

这里经过一次json解析即可获得metadata参数和status参数,然后获取metadata中的order_id参数,最终直接拼接到sql语句里 ,导致了注入漏洞的发生

OpenCart前台某插件SQL注入漏洞【CVE-2018-11231】

可以看到获取了数据库用户名为root,漏洞确实存在!

修补意见

对order_id参数进行检查,或者使用单引号包裹起来,然后加上转义函数。

CE安全网
CE安全网广告位招租

发表评论

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