无聊之中想出来的0DAY (反正最后能拿下WEBSHELL都叫0DAY把)但前提要求条件比较苛刻 看完就明白经典对白 看代码
member\index_do.php
else if($fmdo==’login’)
// [url]http://127.0.0.1/member/index_do.php?fmdo=login&dopost=login[/url]就来到这步了{ //用户登录 if($dopost=="login") { if(!isset($vdcode)) { $vdcode = ”; } $svali = GetCkVdValue(); if(preg_match("/2/",$safe_gdopen)){ if(strtolower($vdcode)!=$svali || $svali==”) { ResetVdValue(); ShowMsg(‘验证码错误!’, ‘-1′); exit(); } } if(CheckUserID($userid,”,false)!=’ok’) { ShowMsg("你输入的用户名 {$userid} 不合法!","-1"); exit(); } if($pwd==”) { ShowMsg("密码不能为空!","-1",0,2000); exit(); } //检查帐号 $rs = $cfg_ml->CheckUser($userid,$pwd); //检测用户名密码 这里不会出现提示错误 因为还要运行下面代码 #api{{ if(defined(‘UC_API’) && @include_once DEDEROOT.’/uc_client/client.php’) { //苛刻条件之一 已经整合DZ 并安装了UCCLIENT这个插件 //检查帐号 list($uid, $username, $password, $email) = uc_user_login($userid, $pwd);//登录DEDECMS的同时也登录DZ if($uid > 0) { $password = md5($password); //当UC存在用户,而CMS不存在时,就注册一个 if(!$rs) { //如果DEDECMS登录不成功 //会员的默认金币 $row = $dsql->GetOne("SELECT `money`,`scores` FROM `dede_arcrank` WHERE `rank`=’10’ "); $scores = is_array($row) ? $row[‘scores’] : 0; $money = is_array($row) ? $row[‘money’] : 0; $logintime = $jointime = time(); $loginip = $joinip = GetIP(); $res = $dsql->ExecuteNoneQuery("INSERT INTO dede_member SET `mtype`=’个人’,`userid`=’$username’,`pwd`=’$password’,`uname`=’$username’,`sex`=’男’ ,`rank`=’10’,`money`=’$money’, `email`=’$email’, `scores`=’$scores’, `matt`=’0′, `face`=”,`safequestion`=’0′,`safeanswer`=”, `jointime`=’$jointime’,`joinip`=’$joinip’,`logintime`=’$logintime’,`loginip`=’$loginip’;");//漏洞就这样形成了当DZ的用户全在的话 就会建立到DEDECMS里经测试 只有密码替换!简单来说 登录DEDECMS验证就是如果DEDE账号登录成功 就同时登录DZ 如果DZ登录不成功 就在DZ建立一个一样账号密码的反之 登录DEDECMS不成功 就在DZ里提取账号 登录成功了就把账号密码写入DEDECMS利用前提条件第一 整合DZ第二 管理员账号不能是ADMIN 因为DZ管理员默认也是ADMIN第三 DEDE那边管理员没从前台登录。。和知道管理员账号这样在DZ里注册一个和DEDE一样的管理员账号 然后从DEDE那里登录 就覆盖了DEDE的管理员密码然后修改基本资料 改一次密码 就覆盖了后台密码 然后就可以登录后台直接拿WEBSHELL总的来说条件苛刻!但也是有可能拿下WEBSHELL的方法之一 放下一处烦恼,收获一个惊喜;放下一种偏见,收获一种幸福;