ecshop include_libcommon.php SQL注射漏洞
- 发表于
- Vulndb
发布时间:2010-08-21
影响版本:ECSHOP All Version
漏洞描述:在Ecshop中缺乏对参数的有效过滤,导致一个SQL注射漏洞,成功利用该漏洞的攻击者可以获得数据库及站点的完全权限
在include_libcommon.php中存在如下函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
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中存在一个该函数的调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
function add_package_to_cart($package_id, $num = 1) { $GLOBALS['err']->clean(); /* 取得礼包信息 */ $package = get_package_info($package_id); if (empty($package)) { $GLOBALS['err']->add($GLOBALS['_LANG']['goods_not_exists'], ERR_NOT_EXISTS); return false; } 在flow.php中存在可控的输入源 $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
原文连接:ecshop include_libcommon.php SQL注射漏洞
所有媒体,可在保留署名、
原文连接
的情况下转载,若非则不得使用我方内容。