Ecmall最新SQL注射漏洞分析

你的域名/index.php 土淘网
用的Ecmall的建站模板,用过这个模板的应该都通杀了吧
存在搜索框注入,注入点为:
你的域名/index.php?app=store&act=search&id=45&keyword=aaa&min_price=100&max_price=10000
首先将获取get传来的参数,然后组合到一个sql查询语句condition中:
1.search.app.php中的这段代码就是构建查询min和max价格的sql代码,没有过滤:

 代码如下 复制代码

/**

 * 取得查询条件语句

 *

 * @param   array   $param  查询参数(参加函数_get_query_param的返回值说明)

 * @return  string  where语句

 */

function _get_goods_conditions($param)

{

/* 组成查询条件 */

$conditions = " g.if_show = 1 AND g.closed = 0 AND s.state = 1"; // 上架且没有被禁售,店铺是开启状态,

if (isset($param['keyword']))

{

$conditions .= $this->_get_conditions_by_keyword($param['keyword'], ENABLE_SEARCH_CACHE);

}

if (isset($param['cate_id']))

{

$conditions .= " AND g.cate_id_{$param['layer']} = '" . $param['cate_id'] . "'";

}

if (isset($param['brand']))

{

$conditions .= " AND g.brand = '" . $param['brand'] . "'";

}

if (isset($param['region_id']))

{

$conditions .= " AND s.region_id = '" . $param['region_id'] . "'";

}

if (isset($param['price']))

{

$min = $param['price']['min'];

$max = $param['price']['max'];

$min > 0 && $conditions .= " AND g.price >= '$min'";

$max > 0 && $conditions .= " AND g.price <= '$max'";

}

return $conditions;

}
2.下面这部分代码是query执行部分,直接将上面的参数带入查询了:
/* 按价格统计 */

if ($total_count > NUM_PER_PAGE)

{

$sql = "SELECT MIN(g.price) AS min, MAX(g.price) AS max FROM {$table} WHERE" . $conditions;

$row = $goods_mod->getRow($sql);

$min = $row['min'];

$max = min($row['max'], MAX_STAT_PRICE);

$step = max(ceil(($max - $min) / PRICE_INTERVAL_NUM), MIN_STAT_STEP);

$sql = "SELECT FLOOR((g.price - '$min') / '$step') AS i, count(*) AS count FROM {$table} WHERE " . $conditions . " GROUP BY i ORDER BY i";

$res = $goods_mod->db->query($sql);

while ($row = $goods_mod->db->fetchRow($res))

{

$data['by_price'][] = array(

'count' => $row['count'],

'min'   => $min + $row['i'] * $step,

'max'   => $min + ($row['i'] + 1) * $step,

);

}

}

}

利用另一个文件来注入

缺陷文件:/app/coupon.app.php

 代码如下 复制代码

function extend()

{

    $coupon_id = isset($_GET['id']) ? trim($_GET['id']) : '';

    if (empty($coupon_id))

    {

        echo Lang::get('no_coupon');

        exit;

    }

    if (!IS_POST)

    {

        header("Content-Type:text/html;charset=" . CHARSET);

        $this->assign('id', $coupon_id);

        $this->assign('send_model', Lang::get('send_model'));

        $this->display("coupon_extend.html");

    }

    else

    {

        if (empty($_POST['user_name']))

        {

            $this->pop_warning("involid_data");

            exit;

        }

        $user_name = str_replace(array("r","rn"), "n", trim($_POST['user_name']));

        $user_name = explode("n", $user_name);

        $user_mod =&m ('member');

        $users = $user_mod->find(db_create_in($user_name, 'user_name'));

        if (empty($users))

        {

            $this->pop_warning('involid_data');

            exit;

        }

        if (count($users) > 30)

        {

            $this->pop_warning("amount_gt");

            exit;

        }

        else

        {

            $users = $this->assign_user($coupon_id, $users);

            $store = $this->_store_mod->get_info($this->_store_id);

            $coupon = $this->_coupon_mod->get_info($coupon_id);

            $coupon['store_name'] = $store['store_name'];

            $coupon['store_id'] = $this->_store_id;

            $this->_message_to_user($users, $coupon);

            $this->_mail_to_user($users, $coupon);

            $this->pop_warning("ok","coupon_extend");

        }

    }

}
首先是coupon_id只过滤了空格,随后在else语句里进入了get_info函数:
function get_info($id)

{

    $goods = $this->get(array(

        'conditions' => "goods_id = '$id'",

        'join'       => 'belongs_to_store',

        'fields'     => 'this.*, store.state'

    ));

... 省略
读过代码的就知道了,其实上面的conditions之类的都是拼接成SQL语句最终要进入数据库的。
所以注射产生
POST index.php?app=coupon&act=extend&id=1[exp]

data:user_name=test(当前已经登录的用户名)

注意:文章只告诉各位有什么bug,让各位站长及时补上哦,并且本文章只供学习使用,一切后果与本站无关。

时间: 2024-10-30 12:02:37

Ecmall最新SQL注射漏洞分析的相关文章

dvbbs 8.2 SQL Injection注射漏洞分析_安全教程

password=123123&codestr=71&CookieDate=2&userhidden=2&comeurl=index.asp&submit=%u7ACB%u5373%u767B%u5F55&ajaxPost=1&username=where%2527%2520and%25201%253D%2528select%2520count%2528*%2529%2520from%2520dv_admin%2520where%2520left%2

Wordpress4.2.3提权与SQL注入漏洞分析

这是这几天一直关注的漏洞了,wordpress上个礼拜发布的4.2.4版本,其中提到修补了可能存在的SQL漏洞和多个XSS. Check point也很快发出了分析,我也来分析与复现一下最新的这个漏洞.   0x01 GP混用造成的越权漏洞 首先,说明一下背景.wordpress中用户权限分为订阅者.投稿者.作者.编辑和管理员. 权限最低的是订阅者,订阅者只有订阅文章的权限,wordpress开启注册后默认注册的用户就是订阅者.国内很多知名网站,如Freebuf,用户注册后身份即为“订阅者”.

Joomla 3.4.3版本 SQL注入漏洞分析

0x00 漏洞分析 漏洞触发的代码位于:/administrator/components/com_contenthistory/models/history.php,getListQuery()函数内: 通过SQL及报错信息,可以知道我们的注入payload被插入到了红色框部分内.跟进getState()函数,位于libraries/legacy/model/legacy.php文件内,代码如下: 从函数参数和官方注释,可以知道,getState()函数功能是获取一个model的属性及属性对应

Java安全之SQL注入漏洞分析

漏洞简介 SQL 注入漏洞在以下情况下出现: 1. 数据从一个不可信赖的数据源进入程序. 2. 数据用于动态地构造一个 SQL 查询.    代码如下 复制代码 String userName = ctx.getAuthenticatedUserName(); String itemName = request.getParameter("itemName"); String query = "SELECT * FROM items WHERE owner+  = '&quo

Oracle Advanced Support系统SQL注入漏洞挖掘经验分享

Oracle Advanced Support系统SQL注入漏洞分析 一年多前我在客户的一个外部环境中执行渗透测试,任何外部环境渗透测试的重要步骤之一就是挖掘出可访问的WEB服务.nmap和EveWitness的结合会令这步骤变得更快,因为我们可以进行端口扫描 并且把这些结果以屏幕截图的形式导入到 EyeWitness中.当梳理完 EyeWitness提供的屏幕截图页面后,我发现了一个Oracle 高级支持服务. 虽然我之前从没听过Oracle Advanced Support,但是当我很快的g

Dvbbs7.1 sp1 SQL版savepost.asp注入漏洞分析、利用及防范_漏洞研究

一.概述    漏洞介绍: http://coolersky.com/leak/programme/bbs/2006/0515/515.html     前几天就听Hak_Ban说有人把dvbbs7的一个注入漏洞给发布出去了,一直也没时间看看,下午跟Edward要了个链接看了看: http://www.eviloctal.com/forum/read.php?tid=22074     本站转贴为: http://coolersky.com/articles/hack/analysis/prog

php防止sql注入漏洞代码和分析

 这篇文章主要介绍了php防止sql注入漏洞代码和分析,最近提供了几种常见攻击的正则表达式,大家参考使用吧 注入漏洞代码和分析 代码如下: <?php  function customError($errno, $errstr, $errfile, $errline)  {      echo "<b>Error number:</b> [$errno],error on line $errline in $errfile<br />";   

针对OpenSSL 922乌龙事件的回应 绿盟科技给出OpenSSL最新漏洞分析及防护方案

近日,OpenSSL针对22日爆出的 CVE-2016-6304漏洞 发布了补丁,补丁又带来了 新的漏洞CVE-2016-6309 和CVE-2016-7052 ,官方 随即再次发布公告 给出更新补丁,1.1.0a版本升级到1.1.0b,正在使用1.0.2i版本升级到1.0.2j,绿盟科技也再次给出新漏洞的分析及防护方案-- OpenSSL最新漏洞信息 CVE-2016-6309 提交时间:2016年9月23日 漏洞描述:当系统收到超过大约16K大小的消息时,准备接受该消息的缓冲区会在其他地方重

最新dotCMS SQL注入漏洞 攻击者可获得敏感数据 绿盟科技发布安全威胁通告

dotCMS 3.6.2以下版本可能存在SQL注入漏洞 ,绿盟科技发布<dotCMS SQL注入漏洞安全威胁通告>,通告全文如下 2017年2月15日,seclists.org网站发布了关于dotCMS存在SQL注入漏洞的消息.文章称,dotCMS 3.6.1及其之前的部分版本,在"/categoriesServlet"的q和inode参数上存在SQL注入,未经身份认证的攻击者可以利用该漏洞获取敏感数据. 当dotCMS的版本<=3.3.2时,与之配套使用的MySQL