网站地图    收藏   

主页 > 入门引导 > 黑客攻防 >

Ecmall Sql 注入 第二弹 - 网站安全 - 自学php

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

[导读] 已打上20140618补丁。再来试试。在app my_goods app php中function spec_edit(){ $id = isset($_GET[ 39;id 39;])? intval($_GET[ 39;id 39;]):0;if(!IS_POST){...

已打上20140618补丁。再来试试。

在app/my_goods.app.php中

 

function spec_edit()
{
         $id = isset($_GET['id'])? intval($_GET['id']):0;
if(!IS_POST)
{
             $goods_spec = $this->_goods_mod->findAll(array(
'fields'=>"this.goods_name,this.goods_id,this.spec_name_1,this.spec_name_2",
'conditions'=>"goods_id = $id",
'include'=> array('has_goodsspec'=> array('order'=>'spec_id')),
));
             header('Content-Type:text/html;charset='. CHARSET);
             $this->assign('goods', current($goods_spec));
             $this->display("spec_edit.html");
}
else
{
             $data = $this->save_spec($_POST);
if(empty($data))
{
                 $this->pop_warning('not_data');
}
             $default_spec = array();// 更新商品中默认规格的信息
foreach($data as $key => $val)
{
if(empty($default_spec))
{
                     $default_spec = array('price'=> $val['price']);
}
                 $this->_spec_mod->edit($key, $val);
}
             $this->_goods_mod->edit($id, $default_spec);
             $this->pop_warning('ok','my_goods_spec_edit');
}
}

 



来看看这个 $data = $this->save_spec($_POST);

 

function save_spec($spec)
{
         $data = array();
if(empty($spec['price'])|| empty($spec['stock']))
{
return $data;
}
foreach($spec['price']as $key => $val)
{
             $data[$key]['price']= $this->_filter_price($val);
}
foreach($spec['stock']as $key => $val)
{
             $data[$key]['stock']= intval($val);
}
return $data;
}

 



这里return的是data。 在这里 $spec['stock'] 被intval了。
$data[$key]['price'] = $this->_filter_price($val);

 

function _filter_price($price)
{
return abs(floatval($price));
}
}



返回非浮点 。 所以这里data的value 是不可控的 但是 key是可控的 继续看。
 

foreach($data as $key => $val)
{
if(empty($default_spec))
{
                     $default_spec = array('price'=> $val['price']);
}
                 $this->_spec_mod->edit($key, $val);
}

 



key 带入到了edit中 继续看

 

function edit($conditions, $edit_data)
{
if(empty($edit_data))
{
returnfalse;
}
         $edit_data = $this->_valid($edit_data);
if(!$edit_data)
{
returnfalse;
}
         $edit_fields = $this->_getSetFields($edit_data);
         $conditions  = $this->_getConditions($conditions,false);
         $this->db->query("UPDATE {$this->table} SET {$edit_fields}{$conditions}");
return $this->db->affected_rows();

 



拼语句。 直接注入。 

在618补丁中还加入放注入的了。

但是还是勉强能过。 

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

\

修复方案:

限制一下key把。 

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

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

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

添加评论