• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    ECSHOP php商城系统过滤不严导致SQL注入漏洞

    发布者: 火山休眠期 | 发布时间: 2025-6-27 16:54| 查看数: 108| 评论数: 0|帖子模式

    影响版本:
    ECSHOP 2.7.2 Release 0604
    程序介绍:
    ECSHOP是一款开源免费的网上商店系统。由专业的开发团队升级维护,为您提供及时高效的技术支持,您还可以根据自己的商务特征对ECSHOP进行定制,增加自己商城的特色功能。
    漏洞分析:
    在include_libcommon.php中存在如下函数
    PHP Code复制内容到剪贴板
         
    • function get_package_info($id)         
    • {         
    •     global $ecs, $db,$_CFG;         
    •          
    •     $now = gmtime();         
    •          
    •     $sql = "SELECT act_id AS id,  act_name AS package_name, goods_id , goods_name, start_time, end_time, act_desc, ext_info".         
    •            " FROM " . $GLOBALS['ecs']->table('goods_activity') .         
    •            " WHERE act_id='$id' AND act_type = " . GAT_PACKAGE;         
    •          
    •     $package = $db->GetRow($sql);         
    •          
    •     /* 将时间转成可阅读格式 */         
    •     if ($package['start_time'] <= $now && $package['end_time'] >= $now)         
    •     {         
    •         $package['is_on_sale'] = "1";         
    •     }         
    •     else         
    •     {         
    •         $package['is_on_sale'] = "0";         
    •     }         
    •     $package['start_time'] = local_date('Y-m-d H:i', $package['start_time']);         
    •     $package['end_time']   = local_date('Y-m-d H:i', $package['end_time']);         
    •     $row = unserialize($package['ext_info']);         
    •     unset($package['ext_info']);         
    •     if ($row)         
    •     {         
    •         foreach ($row as $key=>$val)         
    •         {         
    •             $package[$key] = $val;         
    •         }         
    •     }         
    •          
    •     $sql = "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 * '$_SESSION[discount]') AS rank_price " .         
    •            " FROM " . $GLOBALS['ecs']->table('package_goods') . " AS pg ".         
    •            "   LEFT JOIN ". $GLOBALS['ecs']->table('goods') . " AS g ".         
    •            "   ON g.goods_id = pg.goods_id ".         
    •            " LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp ".         
    •                 "ON mp.goods_id = g.goods_id AND mp.user_rank = '$_SESSION[user_rank]' ".         
    •            " WHERE pg.package_id = " . $id. " ".         
    •            " ORDER BY pg.package_id, pg.goods_id";         
    •          
    •     $goods_res = $GLOBALS['db']->getAll($sql);         
    •          
    •     $market_price        = 0;   

    其中$id没有经过严格过滤就直接进入了SQL查询,导致一个SQL注射漏洞。
    在系统的lib_order.php中存在一个该函数的调用
    PHP Code复制内容到剪贴板
         
    • function add_package_to_cart($package_id, $num = 1)         
    • {         
    •     $GLOBALS['err']->clean();         
    •     /* 取得礼包信息 */         
    •     $package = get_package_info($package_id);         
    •     if (emptyempty($package))         
    •     {         
    •         $GLOBALS['err']->add($GLOBALS['_LANG']['goods_not_exists'], ERR_NOT_EXISTS);         
    •         return false;         
    •     }  
    在flow.php中存在可控的输入源
    PHP Code复制内容到剪贴板
         
    • $package = $json->decode($_POST['package_info']);         
    •     /* 如果是一步购物,先清空购物车 */         
    •     if ($_CFG['one_step_buy'] == '1')         
    •     {         
    •         clear_cart();         
    •     }         
    •     /* 商品数量是否合法 */         
    •     if (!is_numeric($package->number) || intval($package->number) <= 0)         
    •     {         
    •         $result['error']   = 1;         
    •         $result['message'] = $_LANG['invalid_number'];         
    •     }         
    •     else         
    •     {         
    •         /* 添加到购物车 */         
    •         if (add_package_to_cart($package->package_id, $package->number))         
    •         {         
    •             if ($_CFG['cart_confirm'] > 2)   

    $package->package_id来源于输入
    解决方案:
    厂商补丁
    ECSHOP
    ----------
    目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
    http://www.ecshop.com
    信息来源:
    来源: WooYun
    来源:https://www.jb51.net/hack/39332.html
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表