Ecshop V3.0.0 flow.php SQL注射漏洞

admin 2021年7月20日06:03:43评论219 views字数 2609阅读8分41秒阅读模式

0x01 背景

Ecshop在flow.php文件上出现过很多次的注入漏洞,没想到在3.0.0版本再次出现这个问题,真是遗憾啊~

Ecshop V3.0.0 flow.php SQL注射漏洞


0x02 漏洞分析

缺陷文件flow.php:


<?phpelseif ($_REQUEST['step'] == 'repurchase') {    include_once('includes/cls_json.php');    $order_id = strip_tags($_POST['order_id']);    $order_id = json_str_iconv($order_id);    $user_id = $_SESSION['user_id'];    $json  = new JSON;    $order = $db->getOne('SELECT count(*) FROM ' . $ecs->table('order_info') . ' WHERE order_id = ' . $order_id . ' and user_id = ' . $user_id);    if (!$order) {        $result = array('error' => 1, 'message' => $_LANG['repurchase_fail']);        die($json->encode($result));    }    $db->query('DELETE FROM ' .$ecs->table('cart') . " WHERE rec_type = " . CART_REPURCHASE);    $order_goods = $db->getAll("SELECT goods_id, goods_number, goods_attr_id, parent_id FROM " . $ecs->table('order_goods') . " WHERE order_id = " . $order_id);    $result = array('error' => 0, 'message' => '');    foreach ($order_goods as $goods) {        $spec = empty($goods['goods_attr_id']) ? array() : explode(',', $goods['goods_attr_id']);        if (!addto_cart($goods['goods_id'], $goods['goods_number'], $spec, $goods['parent_id'], CART_REPURCHASE)) {            $result = false;            $result = array('error' => 1, 'message' => $_LANG['repurchase_fail']);        }    }    die($json->encode($result));}



$order_id参数存在注入漏洞,首先strip_tags函数是去除html标签,我们跟进json_str_iconv函数,


<?php/** * 将JSON传递的参数转码 * * @param string $str * @return string */function json_str_iconv($str){    if (EC_CHARSET != 'utf-8')    {        if (is_string($str))        {            return addslashes(stripslashes(ecs_iconv('utf-8', EC_CHARSET, $str)));        }        elseif (is_array($str))        {            foreach ($str as $key => $value)            {                $str[$key] = json_str_iconv($value);            }            return $str;        }        elseif (is_object($str))        {            foreach ($str as $key => $value)            {                $str->$key = json_str_iconv($value);            }            return $str;        }        else        {            return $str;        }    }    return $str;}



我们看到这句return addslashes(stripslashes(ecs_iconv(‘utf-8’, EC_CHARSET, $str)))是对传入的order_id做了addslashes转义操作,但是flow.php中$order_id在被带入数据库查询时没有单引号保护从而造成注入漏洞。

$order = $db->getOne(‘SELECT count(*) FROM ‘ . $ecs->table(‘order_info’) . ‘ WHERE order_id = ‘ . $order_id . ‘ and user_id = ‘ . $user_id);//无单引号保护


0x03 漏洞证明

利用xpath注入语句构造获取当前数据库用户的POC,结果如下:

Ecshop V3.0.0 flow.php SQL注射漏洞

0x04 漏洞修复

目前Ecshop已修补该注入漏洞,修复方法是对$order_id进行整形转换处理,如下:

$order_id = intval($_POST['order_id']);

原文链接:http://www.cnbraid.com/categories/WEB安全/ecshop3.html


本文始发于微信公众号(飓风网络安全):Ecshop V3.0.0 flow.php SQL注射漏洞

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年7月20日06:03:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Ecshop V3.0.0 flow.php SQL注射漏洞https://cn-sec.com/archives/359453.html

发表评论

匿名网友 填写信息