当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-069146

漏洞标题:Ecmall的Sql注入第四弹

相关厂商:ShopEx

漏洞作者: ′雨。

提交时间:2014-07-21 11:18

修复时间:2014-10-16 11:20

公开时间:2014-10-16 11:20

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-07-21: 细节已通知厂商并且等待厂商处理中
2014-07-26: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2014-09-19: 细节向核心白帽子及相关领域专家公开
2014-09-29: 细节向普通白帽子公开
2014-10-09: 细节向实习白帽子公开
2014-10-16: 细节向公众公开

简要描述:

又把20140618的补丁看了一看。

详细说明:

顺便把之前发的任意文件删除的确认了一下? 之前图片贴错了 现在更新过来了。
这个绝对是从官网上刚下的20140618的补丁, 这次真的别再说618的补丁已经修复了。
my_goods.app.php中

function _upload_image($goods_id)
{
import('image.func');
import('uploader.lib');
$uploader = new Uploader();
$uploader->allowed_type(IMAGE_FILE_TYPE);
$uploader->allowed_size(SIZE_GOODS_IMAGE); // 400KB
/* 取得剩余空间(单位:字节),false表示不限制 */
$store_mod =& m('store');
$settings = $store_mod->get_settings($this->_store_id);
$upload_mod =& m('uploadedfile');
$remain = $settings['space_limit'] > 0 ? $settings['space_limit'] * 1024 * 1024 - $upload_mod->get_file_size($this->_store_id) : false;
$files = $_FILES['new_file'];
foreach ($files['error'] as $key => $error)
{
if ($error == UPLOAD_ERR_OK)
{
/* 处理文件上传 */
$file = array(
'name' => $files['name'][$key],
'type' => $files['type'][$key],
'tmp_name' => $files['tmp_name'][$key],
'size' => $files['size'][$key],
'error' => $files['error'][$key]
);
$uploader->addFile($file);
if (!$uploader->file_info())
{
$this->_error($uploader->get_error());
return false;
}
/* 判断能否上传 */
if ($remain !== false)
{
if ($remain < $file['size'])
{
$this->_error('space_limit_arrived');
return false;
}
else
{
$remain -= $file['size'];
}
}
$uploader->root_dir(ROOT_PATH);
$dirname = 'data/files/store_' . $this->_store_id . '/goods_' . (time() % 200);
$filename = $uploader->random_filename();
$file_path = $uploader->save($dirname, $filename);
$thumbnail = dirname($file_path) . '/small_' . basename($file_path);
make_thumb(ROOT_PATH . '/' . $file_path, ROOT_PATH . '/' . $thumbnail, THUMB_WIDTH, THUMB_HEIGHT, THUMB_QUALITY);
/* 处理文件入库 */
$data = array(
'store_id' => $this->_store_id,
'file_type' => $file['type'],
'file_size' => $file['size'],
'file_name' => $file['name'],
'file_path' => $file_path,
'add_time' => gmtime(),
);
$uf_mod =& m('uploadedfile');
$file_id = $uf_mod->add($data);


重点看这里

$data = array(
'store_id' => $this->_store_id,
'file_type' => $file['type'],
'file_size' => $file['size'],
'file_name' => $file['name'],
'file_path' => $file_path,
'add_time' => gmtime(),
);


$file_id = $uf_mod->add($data)
然后就直接带入到了add函数中

foreach ($files['error'] as $key => $error)
{
if ($error == UPLOAD_ERR_OK)
{
/* 处理文件上传 */
$file = array(
'name' => $files['name'][$key],


这里 $file['name'] 就是上传来的文件名。而且没做任何过滤就带入到了add函数中。
files 变量无视gpc。
来看看哪里调用了这函数 依旧在my_goods.app.php中

function _save_post_data($data, $id = 0)
{
/* 保存商品 */
if ($id > 0)
{
// edit
if (!$this->_goods_mod->edit($id, $data['goods']))
{
$this->_error($this->_goods_mod->get_error());
return false;
}
$goods_id = $id;
}
else
{


省略点

/* 保存商品图片 */
if (!$this->_upload_image($goods_id))
{
return false;
}


再看看哪里调用了。
还是这文件

function edit()
{
$id = empty($_GET['id']) ? 0 : intval($_GET['id']);
if (!IS_POST)
{
$this->assign('goods', $this->_get_goods_info($id));


省略点

else
{
/* 取得数据 */
$data = $this->_get_post_data($id);
/* 检查数据 */
if (!$this->_check_post_data($data, $id))
{
$this->show_warning($this->get_error());
return;
}
/* 保存商品 */
if (!$this->_save_post_data($data, $id))//欧克这里终于调用了
{
$this->show_warning($this->get_error());
return;
}
$this->show_message('edit_ok',


找到了调用这函数的地方 就来注入把。

漏洞证明:

POST /web/ecmall/index.php?app=my_goods&act=edit&id=1 HTTP/1.1
Host: web.com


e1.jpg


成功了。

修复方案:

转义了再入库把。

版权声明:转载请注明来源 ′雨。@乌云


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2014-10-16 11:20

厂商回复:

最新状态:

暂无