DreamArticle 3.0 后台验证逻辑漏洞和注入漏洞漏洞预警 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

   

    在admin/global.php有这样一段代码,用来实现”记住密码”登录后台功能的,

DreamArticle 3.0 后台验证逻辑漏洞和注入漏洞漏洞预警

    $administrator   = get_cookie("administrator"); $adminpassword   = get_cookie("adminpassword"); if ($administrator && $adminpassword) {     islogin($administrator,$adminpassword); } else {     unset($_SESSION['admincode']);     set_cookie("admincode",'',time() - 31536000);     set_cookie("adminid",'',time() - 31536000);     set_cookie("administrator", '',time() - 31536000);     set_cookie("adminpassword", '',time() - 31536000);     da_admin_login(); } $admin=get_admin_info($administrator,$adminpassword);  get_cookie() 在/include/common.php  function get_cookie($name){     global $_COOKIE,$cookieprename;     if (isset($_COOKIE[$cookieprename.$name])) {         return urldecode($_COOKIE[$cookieprename.$name]);     }     return FALSE; }

    可以看到用了urldecode()函数,可以用%2527引入一个单引号绕过gpc

    Islogin() 在admin/function.php

    function islogin($username, $password) {     global $DreamCMS;     $_password_=$DreamCMS->db->get_var("SELECT `password` FROM `#DC@__members` WHERE `username`='{$username}'"); //查询$username的密码     if($password!=$_password_){ //数据库里的密码和提交的密码相比较,不一样就$ISDreamCMSADMIN=FALSE         $ISDreamCMSADMIN=FALSE;         if(md5(base64_encode('__DreamCMS__'.$username.'~!(*%)$!$~'.$password.'%#@)'))==DreamCMSAdmin){             $ISDreamCMSADMIN=TRUE; //这里是实现一个超级管理员的功能的,DreamCMSAdmin定义在配置文件里,

电脑资料

DreamArticle 3.0 后台验证逻辑漏洞和注入漏洞漏洞预警》(https://www.unjs.com)。         }     }     if (emptyempty($username)emptyempty($password)$ISDreamCMSADMIN){ //逻辑错误出现了,程序员本意是,如果$username为空,或者$password为空,或者$ISDreamCMSADMIN为false就执行登出处理,可以却忘记了在$ISDreamCMSADMIN前面加上!,这样就刚好和程序员本意相反了.也就是说这里就算我们的密码不对都可以通过这个函数。         unset($_SESSION['admincode']);         set_cookie("admincode",'',time() - 31536000);         set_cookie("adminid",'',time() - 31536000);         set_cookie("administrator", '',time() - 31536000);         set_cookie("adminpassword", '',time() - 31536000);         da_admin_login();     } } 看下面的$admin=get_admin_info($administrator,$adminpassword);

    function get_admin_info($username, $password) {     global $DreamCMS;     $admin=$DreamCMS->db->get_row("SELECT * FROM `#DC@__members` WHERE `username`='{$username}' AND password='{$password}'");     if(emptyempty($admin)){         if(md5(base64_encode('__DreamCMS__'.$username.'~!(*%)$!$~'.$password.'%#@)'))==DreamCMSAdmin){             $admin->uid="1";         }     }     $admin->info && $admin->info=unserialize($admin->info);     return $admin; } 这里就麻烦了,帐号或者密码不对就没有任何权限。别忘了,前面还有个可以绕过gpc的get_cookie() 。详细的利用方法和exp我就不贴出来了,自己摸索。本地测试是可以直接进后台的。

    发布作者:q1ur3n

最新文章