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

时间:2021-05-25

影响版本:
ECSHOP 2.7.2 Release 0604
程序介绍:
ECSHOP是一款开源免费的网上商店系统。由专业的开发团队升级维护,为您提供及时高效的技术支持,您还可以根据自己的商务特征对ECSHOP进行定制,增加自己商城的特色功能。
漏洞分析:
在include_libcommon.php中存在如下函数
PHP Code复制内容到剪贴板

  • functionget_package_info($id)
  • {
  • global$ecs,$db,$_CFG;
  • $now=gmtime();
  • $sql="SELECTact_idASid,act_nameASpackage_name,goods_id,goods_name,start_time,end_time,act_desc,ext_info".
  • "FROM".$GLOBALS['ecs']->table('goods_activity').
  • "WHEREact_id='$id'ANDact_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-dH:i',$package['start_time']);
  • $package['end_time']=local_date('Y-m-dH:i',$package['end_time']);
  • $row=unserialize($package['ext_info']);
  • unset($package['ext_info']);
  • if($row)
  • {
  • foreach($rowas$key=>$val)
  • {
  • $package[$key]=$val;
  • }
  • }
  • $sql="SELECTpg.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]')ASrank_price".
  • "FROM".$GLOBALS['ecs']->table('package_goods')."ASpg".
  • "LEFTJOIN".$GLOBALS['ecs']->table('goods')."ASg".
  • "ONg.goods_id=pg.goods_id".
  • "LEFTJOIN".$GLOBALS['ecs']->table('member_price')."ASmp".
  • "ONmp.goods_id=g.goods_idANDmp.user_rank='$_SESSION[user_rank]'".
  • "WHEREpg.package_id=".$id."".
  • "ORDERBYpg.package_id,pg.goods_id";
  • $goods_res=$GLOBALS['db']->getAll($sql);
  • $market_price=0;

  • 其中$id没有经过严格过滤就直接进入了SQL查询,导致一个SQL注射漏洞。
    在系统的lib_order.php中存在一个该函数的调用
    PHP Code复制内容到剪贴板
  • functionadd_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);
  • returnfalse;
  • }
  • 在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://
    信息来源:
    来源: WooYun

    声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

    相关文章