0x01 漏洞介绍
DBShop 电子网店系统,是一套使用 PHP 购物网店系统。目前最新版本为 DBShop 在最新版本中,存在一枚 SQL 注入漏洞。
0x02 影响版本
DBShop <= V 1.3均受到影响
0x03 漏洞分析
查看这个文件:dbshop.com\module\Orders\src\Orders\Controller\OrdersController.php 中的
OrdersController 类

在这里使用了 getQuery 获取了外部参数,获取到的数据赋值给了$searchArray 变量。

往下执行,把获取到的数据传送了 listOrde 函数的第二个参数中。

查找 listOrder 函数,找到了 dbshop.com\module\Orders\src\Orders\Model\OrderTable.php 为定义 listOrder 函数的地方。

把接收到的 where 数据又传给了 whereOrderData 函数。whereOrderData 函数是用来过滤一些特殊字符的,防止出现一些注入问题。

继续查找 whereOrderData 函数,在 dbshop.com\module\Orders\src\Orders\Model\Order.php文件中发现了 whereOrderData 函数的定义

这个函数又使用了 HtmlEntities->filter 方法,来过滤请求中的各种数据,防止发现出现安全问题。但是,在这,发现第 126 行中,pay_code 可控参数,并没有调用到 HtmlEntities->filter 方法来过滤,就直接赋值给了 searchArray 数组中了,把未过滤的数据 return 给了上级函数 listOrder 中的 where 变量了。

继续返回到 dbshop.com\module\Orders\src\Orders\Model\OrderTable.php 文件中。把未过滤的数据,传入了 SQL 查询中。直接造成了 SQL 注入漏洞

0x04 注入攻击
问题点出现在 pay_code 参数。
随便构造一个 payload:
http://192.168.31.162:81/order_sn=1234&buyer_name=1234&delivery_name=1234&order_stat
e=40&pay_code=w' RLIKE (SELECT (CASE WHEN (5063=5063) THEN 0x77 ELSE 0x28 END)) AND
'cvqa'='cvqa&order_start_price=1234&order_end_price=1234&search_start_time=1234&search
_end_time=1234
成功获取到数据库数据。

网友评论