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

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

缺陷编号: WooYun-2014-69266

漏洞标题: Ecmall某处SQL注入第五弹&一处能引入单引号的地方

相关厂商: ShopEx

漏洞作者: ′雨。认证白帽子

提交时间: 2014-07-22 11:10

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

漏洞类型: SQL注射漏洞

危害等级: 低

自评Rank: 1

漏洞状态: 厂商已经确认

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

Tags标签: 无

1人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-07-22: 细节已通知厂商并且等待厂商处理中
2014-07-22: 厂商已经确认,细节仅向厂商公开
2014-07-25: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2014-09-15: 细节向核心白帽子及相关领域专家公开
2014-09-25: 细节向普通白帽子公开
2014-10-05: 细节向实习白帽子公开
2014-10-20: 细节向公众公开

简要描述:

做完作业再看看0618补丁。
非二次注入, 连载了这么多弹 有感情了。
应该是最后一弹了, 看在是最后一弹了 也别再3rank了把。给高点把。
一枚注入 & 另外一处能引入单引号或者转义符 不过也就只能引入这个而已这里不太好利用。

详细说明:

首先还是把我之前发的ecmall的那两个先确认了来下撒?



刚在bbs下的20140618的补丁

0x01 能引入单引号或者转义符的地方

首先来看看my_goods.app.php中的 这函数

code 区域
function _get_post_data($id = 0)
{
$goods = array(
'goods_name' => $_POST['goods_name'],
'description' => html_script($_POST['description']),
'cate_id' => $_POST['cate_id'],
'cate_name' => $_POST['cate_name'],
'brand' => $_POST['brand'],
'if_show' => $_POST['if_show'],
'last_update' => gmtime(),
'recommended' => $_POST['recommended'],
'tags' => html_script(trim($_POST['tags'])),
);
$spec_name_1 = !empty($_POST['spec_name_1']) ? $_POST['spec_name_1'] : '';
$spec_name_2 = !empty($_POST['spec_name_2']) ? $_POST['spec_name_2'] : '';



省略一点

code 区域
case 2: // 二个规格
$goods['spec_name_1'] = $spec_name_1;
$goods['spec_name_2'] = $spec_name_2;
foreach ($_POST['spec_1'] as $key => $spec_1)
{
$spec_1 = trim($spec_1);
$spec_2 = trim($_POST['spec_2'][$key]);
if ($spec_1 && $spec_2)
{
if (($spec_id = intval($_POST['spec_id'][$key]))) // 已有规格ID的
{
$specs[$key] = array(
'spec_id' => $spec_id,
'spec_1' => $spec_1,
'spec_2' => $spec_2,
'price' => $this->_filter_price($_POST['price'][$key]),
'stock' => intval($_POST['stock'][$key]),
'sku' => html_script(trim($_POST['sku'][$key])),
);
}





主要来看这里的

$spec_2 = trim($_POST['spec_2'][$key]);

'sku' => html_script(trim($_POST['sku'][$key])),

这里$key带入到了后面 而且$key是post来的 所以是可控的。

如果这时候我们提交的是字符串 就成了截取字符的了。

因为' 会被ecmall的全局addslashes转义成\'

如果这时候截取第一个字符就成了\

截取第二个字符就是'



引入了转义符 如果 有两个连着的可控的话可以这样

'\','user()#' 之类的就能注入了 可惜这里只有一个可控。

code 区域
$specs[$key] = array(
'spec_id' => $spec_id,
'spec_1' => $spec_1,
'spec_2' => $spec_2,
'price' => $this->_filter_price($_POST['price'][$key]),
'stock' => intval($_POST['stock'][$key]),
'sku' => html_script(trim($_POST['sku'][$key])),
);



这里spec_2 可以截取 无奈price被过滤了。

stock也可以截取 可是被intval了 sku 也可以截取可是已经是最后一个了。。

然后在edit中调用了这函数。



10.jpg





这里截取第2个字符 成功引入单引号。



11.jpg



截取第一个字符 成功引入转义符。







0x02 能成功的注入。。



首先来看一下ecmall的全局文件



code 区域
}
/* 数据过滤 */
if (!get_magic_quotes_gpc())
{
$_GET = addslashes_deep($_GET);
$_POST = addslashes_deep($_POST);
$_COOKIE= addslashes_deep($_COOKIE);
}



判断gpc是否开启 如果关闭 就调用addslashes_deep来对get post cookie进行转义



code 区域
function addslashes_deep($value)
{
if (empty($value))
{
return $value;
}
else
{
return is_array($value) ? array_map('addslashes_deep', $value) : addslashes($value);
}
}





这里可以看到对数组中的value进行了addslashes 没有对key进行addslashes。



在my_goods.app.php中



看这函数

code 区域
function _edit_image($goods_id)
{
if (isset($_POST['old_order']))
{
foreach ($_POST['old_order'] as $image_id => $sort_order)
{
$data = array('sort_order' => $sort_order);
if (isset($_POST['old_url'][$image_id]))
{
$data['image_url'] = $_POST['old_url'][$image_id];
}
$this->_image_mod->edit("image_id = '$image_id' AND goods_id = '$goods_id'", $data);
}
}

return true;
}





对post的foreach 出来后 直接把post里的key 带入到了查询当中。



结合刚才说的数组中的key是不会被addslashes的 所以造成了注入。



调用这函数的地方随便找一处把。



12.jpg



漏洞证明:

见上面 。

修复方案:

过滤 转义

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2014-07-22 13:27

厂商回复:

谢谢您的支持 ′ 雨。 点个赞
非常感谢您为shopex信息安全做的贡献
我们将尽快修复完善
非常感谢

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2014-07-22 11:38 | 泳少 ( 普通白帽子 | Rank:248 漏洞数:82 | ★ 梦想这条路踏上了,跪着也要...)
    4

    你关注的白帽子 ′ 雨。 发表了漏洞 Ecmall Sql 注入 第五弹 & 一处能引入单引号的地方。

  2. 2014-07-22 13:37 | ′ 雨。 认证白帽子 ( 普通白帽子 | Rank:1332 漏洞数:198 | Only Code Never Lie To Me.)
    1

    @ShopEx 哥们 别走啊 还有两个呢。

  3. 2014-07-22 15:26 | 泳少 ( 普通白帽子 | Rank:248 漏洞数:82 | ★ 梦想这条路踏上了,跪着也要...)
    1

    @′ 雨。 话说你高三了。。还不赶紧努力学习。。还在挖掘漏洞

  4. 2014-07-22 17:34 | 乌帽子 ( 路人 | Rank:29 漏洞数:3 | 学习黑客哪家强 | 中国山东找蓝翔 | sql...)
    1

    为何这么叼。。

登录后才能发表评论,请先 登录