芒果云KODExlporer设计缺陷导致随意登陆后台
这个最新版已经失效了 思路不错 转过来学习一下。
狗狗侠
前面兄弟当天提交当天都拿$ 了
今晚我也下套代码研究起来。。。。
慢慢道来。。
在/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
2、第二部,自己查下自己的ip即可,或者伪造个client_ip即可。
例如我本地测试就是对127.0.0.1 MD5一次即可。。
修改kod_token的值
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论