当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2013-026421

漏洞标题:ecshop最新版本前台二次注入系列(1)

相关厂商:ShopEx

漏洞作者: blue

提交时间:2013-06-20 16:42

修复时间:2013-09-18 17:33

公开时间:2013-09-18 17:33

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-06-20: 细节已通知厂商并且等待厂商处理中
2013-06-20: 厂商已经确认,细节仅向厂商公开
2013-06-23: 细节向第三方安全合作伙伴开放
2013-08-14: 细节向核心白帽子及相关领域专家公开
2013-08-24: 细节向普通白帽子公开
2013-09-03: 细节向实习白帽子公开
2013-09-18: 细节向公众公开

简要描述:

二次注入第一枚,通读ecshop代码的结果,我是今天早上从ecshop新下的程序包,你懂的~

详细说明:

先上结果图:

QQ20130620-6.png


注入利用过程:
1.添加商品到购物车时,写入注入代码到商品属性id
http://localhost/test/ecshop/flow.php?step=add_to_cart
POST: goods={"quick":1,"spec":["163","158'"],"goods_id":32,"number":"1","parent":0}
注意,需要spec有两个或以上id
2.在查看购物车页面,点击更新购物车,执行注入代码(二次注入嘛,单引号可用了)
代码分析:
1./includes/lib_goods.php 942行

function spec_price($spec)
{
if (!empty($spec))
{
$where = db_create_in($spec, 'goods_attr_id'); //这里是注入位置,能控制$spec就可以了
$sql = 'SELECT SUM(attr_price) AS attr_price FROM ' . $GLOBALS['ecs']->table('goods_attr') . " WHERE $where";
$price = floatval($GLOBALS['db']->getOne($sql));
}
else
{
$price = 0;
}
return $price;
}


2./includes/lib_common.php 2266行get_final_price有spec_price的调用
3.再看get_final_price方法的调用 在ecshop/flow.php flow_update_cart方法,2272行

/* 处理普通商品或非优惠的配件 */
else
{
$attr_id = empty($goods['goods_attr_id']) ? array() : explode(',', $goods['goods_attr_id']); //看,$attr_id是读取的购物车商品的goods_attr_id字段,所以只要在添加商品到购物车时写入注入代码就可以了
$goods_price = get_final_price($goods['goods_id'], $val, true, $attr_id);
//更新购物车中的商品数量
$sql = "UPDATE " .$GLOBALS['ecs']->table('cart').
" SET goods_number = '$val', goods_price = '$goods_price' WHERE rec_id='$key' AND session_id='" . SESS_ID . "'";
}

漏洞证明:

QQ20130620-6.png

修复方案:

在flow_update_cart中对goods_attr_id进行addslashes

版权声明:转载请注明来源 blue@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:16

确认时间:2013-06-20 16:52

厂商回复:

非常感谢您为shopex信息安全做的贡献
我们将尽快修复
非常感谢

最新状态:

暂无


漏洞评价:

评论

  1. 2013-06-20 16:44 | 瞌睡龙 ( 实习白帽子 | Rank:59 漏洞数:5 | fighting……)

    吊炸天啊,要连载的节奏~

  2. 2013-06-20 16:46 | 疯狗 认证白帽子 ( 实习白帽子 | Rank:44 漏洞数:2 | 阅尽天下漏洞,心中自然无码。)

    雷劈了!ecshop的漏洞一定是看了很久代码吧,应该很经典,mark。

  3. 2013-06-20 16:50 | ppt ( 路人 | Rank:11 漏洞数:2 | ) | ( 我猜出了用户名,可我没猜出密码。)

    1w的节奏啊

  4. 2013-06-20 17:08 | blue 认证白帽子 ( 普通白帽子 | Rank:779 漏洞数:70 | 我心中有猛虎,细嗅蔷薇。)

    @瞌睡龙 明天第二发,照样是二次注入~

  5. 2013-06-20 17:11 | p0di ( 普通白帽子 | Rank:121 漏洞数:17 | 1+1 = 2 ?)

    这个需要围观下。

  6. 2013-06-20 17:39 | 齐迹 ( 核心白帽子 | Rank:784 漏洞数:100 | 一名普通的phper开发者,关注web安全。)

    @blue 早点发免得夜长梦多啊!

  7. 2013-06-20 17:57 | blue 认证白帽子 ( 普通白帽子 | Rank:779 漏洞数:70 | 我心中有猛虎,细嗅蔷薇。)

    @齐迹 不急,那个点很猥琐很猥琐~

  8. 2013-06-20 18:00 | 齐迹 ( 核心白帽子 | Rank:784 漏洞数:100 | 一名普通的phper开发者,关注web安全。)

    @blue 端个板凳坐等

  9. 2013-06-20 18:04 | 疯狗 认证白帽子 ( 实习白帽子 | Rank:44 漏洞数:2 | 阅尽天下漏洞,心中自然无码。)

    @blue 白盒大牛啊

  10. 2013-06-20 18:07 | p0di ( 普通白帽子 | Rank:121 漏洞数:17 | 1+1 = 2 ?)

    @blue 求大牛连载,做教程。

  11. 2013-07-11 14:30 | akast ( 普通白帽子 | Rank:244 漏洞数:39 | NEURON & LEUKOCYTE)

    细节向普通白帽子公开, 怎么看不到?

  12. 2013-07-20 16:35 | VIP ( 普通白帽子 | Rank:759 漏洞数:100 )

    好激动,还有7分钟就能看到了

  13. 2013-07-20 16:36 | VIP ( 普通白帽子 | Rank:759 漏洞数:100 )

    算错鸟,应该是30号

  14. 2013-07-20 16:54 | 齐迹 ( 核心白帽子 | Rank:784 漏洞数:100 | 一名普通的phper开发者,关注web安全。)

    提醒:为保证通用型安全漏洞的信息保密性,该漏洞无法使用乌云币提前查看,请踏实的杀洞升级吧 @VIP 自己去对比最新补丁。好像是一个单引号被捣腾了几次后产生了注入。

  15. 2013-07-20 16:56 | VIP ( 普通白帽子 | Rank:759 漏洞数:100 )

    @齐迹 好像用普通白帽子帐号也看不到

  16. 2013-07-20 17:18 | VIP ( 普通白帽子 | Rank:759 漏洞数:100 )

    @齐迹 看到了一个点,不知道是不是

  17. 2013-07-27 21:45 | 齐迹 ( 核心白帽子 | Rank:784 漏洞数:100 | 一名普通的phper开发者,关注web安全。)

    涨见识了。。。

  18. 2013-10-20 22:36 | y35u ( 普通白帽子 | Rank:364 漏洞数:38 | yesu)

    @blue 请问这个怎么写注入语句,逗号会被转成,'

  19. 2013-10-21 10:37 | blue 认证白帽子 ( 普通白帽子 | Rank:779 漏洞数:70 | 我心中有猛虎,细嗅蔷薇。)

    @y35u 看下db_create_in这个方法

  20. 2014-05-07 11:15 | bitcoin ( 普通白帽子 | Rank:715 漏洞数:218 | 学习是最好的投资!)

    大牛,威武!