0x00 cms简介
OpenCart 是近年来国内外非常流行的 PHP 开源电子商务网站系统。该电商网站系统安装方便,功能强大,操作简单。支持多语言、多货币和多店铺。OpenCart 外围开发生态圈发达,更有上万款免费和收费的模块插件和模板主题可供选择。代码完全开源,功能持续更新,代码结构清晰易懂,二次开发容易上手,入门门槛低。基于这些特点使得 OpenCart 快速成为了世界上广泛应用的 电子商务建站系统。
0x01 漏洞详情
这里直接进入存在漏洞的代码,代码位置为catalog/controller/extension/payment/divido.php第79行开始
这里出现问题的是84行的语句,这里file_get_contents(‘php://input’)实际上就是获取POST传入的值,然后经过一次json解析传入到data参数中
86行判断data中的status参数是否为空,如果为空则返回,那么这里传入的status参数不为空就行
跟入91行,这里$data->metadata->order_id参数构造一下即可,也就是说这里的参数同样是可控的,下面我们跟进这这个getLookupByOrderId函数
这里就出现了问题,这里传入的order_id参数进行直接拼接,那么这里我们传入POST值,然后经过json解析获取order_id参数,实现最终的拼接,因此判断此处存在sql注入漏洞
这里漏洞利用有个前提就是opencart网站需要安装divido这个付款插件,默认是不安装的
这里安装即可,然后我们来到前台访问存在漏洞的页面
漏洞url为http://127.0.0.1/upload/index.php?route=extension/payment/divido/update
POST参数为{“metadata”:{“order_id”:”1 and updatexml(1,concat(0x7e,user()),1)”},”status”:2}
这里经过一次json解析即可获得metadata参数和status参数,然后获取metadata中的order_id参数,最终直接拼接到sql语句里 ,导致了注入漏洞的发生
可以看到获取了数据库用户名为root,验证了漏洞的存在~
0x02 修补意见
对order_id参数进行检查,或者使用单引号包裹起来,然后加上转义函数~
一直想写一篇关于介绍比特币的博文,这个下午突然提起兴趣了,就写下去吧~ 比特币之所以现在会这么火,一方面是因为的它的升值之快,人们可以通过炒比特币来赚取差价,另一方面是由于比特币是黑客的勒索货币,在五月份横行的wannacry病毒变相的又让比特币又火了一把。 …
请登录后发表评论
注册