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

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

缺陷编号:wooyun-2014-075852

漏洞标题:芒果云KODExlporer设计缺陷导致随意登陆后台

相关厂商:千帆网络工作室

漏洞作者: 狗狗侠

提交时间:2014-09-15 13:57

修复时间:2014-12-14 13:58

公开时间:2014-12-14 13:58

漏洞类型:非授权访问/权限绕过

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-09-15: 细节已通知厂商并且等待厂商处理中
2014-09-15: 厂商已经确认,细节仅向厂商公开
2014-09-18: 细节向第三方安全合作伙伴开放
2014-11-09: 细节向核心白帽子及相关领域专家公开
2014-11-19: 细节向普通白帽子公开
2014-11-29: 细节向实习白帽子公开
2014-12-14: 细节向公众公开

简要描述:

详细说明:

前面兄弟当天提交当天都拿$ 了
WooYun: 芒果云KODExlporer设计缺陷任意代码执行(四)(官网演示已shell)
今晚我也下套代码研究起来。。。。
慢慢道来。。
在\controller\user.class.php中50行处

}else if(isset($_COOKIE['kod_name']) && isset($_COOKIE['kod_token'])){
$member = new fileCache($this->config['system_file']['member']);
$user = $member->get($_COOKIE['kod_name']);//echo md5($user['password'].get_client_ip());exit();
if(md5($user['password'].get_client_ip()) == $_COOKIE['kod_token']){ //验证出问题的地方
session_start();//re start
$_SESSION['kod_login'] = true;
$_SESSION['kod_user']= $user;
setcookie('kod_name', $_COOKIE['kod_name'], time()+3600*24*365);
setcookie('kod_token',$_COOKIE['kod_token'],time()+3600*24*365); //密码的MD5值再次md5
header('location:'.get_url());
exit;
}
}


其中可以分析下其中逻辑,
当存在以下2个cookie($_COOKIE['kod_name'] $_COOKIE['kod_token'])变量执行下面语句
第二部:
$user = $member->get($_COOKIE['kod_name']);这里的kod_name的cookie是我们能控制的,当我们kod_name构造好不存在的情况,例如$_COOKIE['kod_name']='DDDDSFADSFAS$#@!#$'这样不存在的情况,其中$user就false了。
看后面的语句
if(md5($user['password'].get_client_ip()) == $_COOKIE['kod_token'])
这里验证是不是弱爆了?
前面控制好kod_name导致$user不存在。则整个整个条件判断就是我们可以控制的了
我们只要将get_client_ip() md5就行了。
我们看看get_client_ip()

function get_client_ip($b_ip = true){
$arr_ip_header = array(
"HTTP_CLIENT_IP",
"HTTP_X_FORWARDED_FOR",
"REMOTE_ADDR",
"HTTP_CDN_SRC_IP",
"HTTP_PROXY_CLIENT_IP",
"HTTP_WL_PROXY_CLIENT_IP"
);
$client_ip = 'unknown';
foreach ($arr_ip_header as $key) {
if (!empty($_SERVER[$key]) && strtolower($_SERVER[$key]) != "unknown") {
$client_ip = $_SERVER[$key];
break;
}
}
if ($pos = strpos($client_ip,',')){
$client_ip = substr($client_ip,$pos+1);
}
return $client_ip;
}


这里也是可控的。。。顾思路就来了。直接登录后台
攻击步骤:
1、构造一个不存在的kod_name

1.jpg


2、第二部,自己查下自己的ip即可,或者伪造个client_ip即可。
例如我本地测试就是对127.0.0.1 MD5一次即可。。
修改kod_token的值

2.jpg


3、访问后台地址,即可登录后台了。随意上传文件,控制整个后台

3.jpg


4.jpg



漏洞证明:

攻击步骤:
1、构造一个不存在的kod_name

1.jpg


2、第二部,自己查下自己的ip即可,或者伪造个client_ip即可。
例如我本地测试就是对127.0.0.1 MD5一次即可。。
修改kod_token的值

2.jpg


3、访问后台地址,即可登录后台了。随意上传文件,控制整个后台

3.jpg


4.jpg

修复方案:

考虑下逻辑。。

版权声明:转载请注明来源 狗狗侠@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:4

确认时间:2014-09-15 18:05

厂商回复:

感谢洞主提出。
此处确有不严谨之处,但几乎没有危害;以上所说的模拟登陆后能操控后台完全不可能。
因为即便构造登录成功,也做不了任何操作,所在空权限组没有任何权限。
之前被apache坑了。
期待 通过kod 获得shell,在此悬赏先。
(真的shell的话,麻烦给个自己上传的**.php文件的链接,谢过!)

最新状态:

暂无