0x01 背景
iWebShop是一款基于PHP语言开发b2b2c开源多用户商城系统,支持平台自营和多商家入驻、微信商城系统、手机商城系统、移动端商城系统、APP商城系统等多功能性的购物平台系统。
0x02 审计
框架简介
iWebshop是单一入口系统,所有的处理都要通过入口文件
index.php
来运行。
系统框架对当前URL
路径进行分析,找到controller(控制器)
和action(动作)
,去调用控制器文件里面的动作方法。
在action
动作中可以读取数据,处理业务逻辑,然后把完成的数据渲染到视图,给终端客户呈现出来。
漏洞概况
漏洞功能:后台->系统->配送方式->删除
漏洞文件:/controllers/system.php
审计
/controllers/system.php
|
|
跟进$id = IReq::get('id');
/lib/core/util/req_class.php
|
|
此处获取$_GET
参数后是没有任何过滤直接返回值的。再回到delivery_operate
函数,$deliveryData = $delivery->query('id in ('.$id.')','name');
可以看到$id
被直接带入了SQL语句中,造成了SQL注入问题。
0x03 漏洞验证
由于此处是删除(逻辑删除)操作,没有回显,不过可以构造如下请求验证漏洞
http://localhost:8888/iwebshop4.4/index.php?controller=system&action=delivery_operate&id=2) and if(1=1, sleep(4), 0)#
请求效果如下
poc中只指定sleep 4s
可是这个请求一共消耗了8s
,这是由于delivery_operate
函数中在query/select
后又进行了一次update
操作,所以该poc代码执行了两次(共8s
),另外也可以通过mysql log也可以反馈8s
的由来。
0x04 总结
该漏洞产生的直接原因是$id
变量未经过任何过滤就拼接SQL语句,因此一定要确保所有带入数据库的参数都经过了严格的过滤。当然,如果是PHP应用,推荐采用PDO
方式操作数据库,使用参数绑定能有效的防止SQL Injection
问题。