…(略)//检查和注册外部提交的变量,语句①,代码见前文 } //系统配置参数,语句② require_once(DEDEDATA."/config.cache.inc.php"); //数据库配置文件,语句③ require_once(DEDEDATA.'/common.inc.php'); …(略) //模板的存放目录,语句④ $cfg_templets_dir = $cfg_cmspath.'/templets'; $cfg_templeturl = $cfg_mainsite.$cfg_templets_dir; …(略) 首先语句①检查和注册外部提交的变量,然后语句②、③初始化全局变量(系统配置参数、数据库配置参数),最后语句④初始化网站的其他全局变量。所以即使语句①成功提交了以 “cfg_”开头的网站全局变量,比如提交“cfg_mb_open”(是否开启会员功能)值为“Y”, 随后还是会被初始化为网站设置值,目前还无法修改全局变量。此方法适合:GET 方式提交 _POST 和_COOKIE,POST 方式提交_COOKIE。 修改全局变量。DeDeCMS 同时还通过 include/filter.inc.php 包含文件过滤不相关内 容,比如禁止提交$cfg_notallowstr 变量定义的字符,过滤$cfg_replacestr 变量定义的字 符为“***”等,代码如下: //过滤不相关内容 function _FilterAll($fk, &$svar) { global $cfg_notallowstr,$cfg_replacestr; if( is_array($svar) ) { foreach($svar as $_k => $_v) { } } else { $svar[$_k] = _FilterAll($fk,$_v);
…(略) //禁止提交$cfg_notallowstr变量定义的字符 } return $svar; } /* 对_GET,_POST,_COOKIE进行过滤 */ foreach(Array('_GET','_POST','_COOKIE') as $_request) { foreach($$_request as $_k => $_v) { ${$_k} = _FilterAll($_k,$_v); //注册变量并过滤变量值 } } 过滤不相关内容的同时注册变量!搜索“filter.inc.php”文件包含情况如图 12,如 member/config.php 文件,首先包含 common.inc.php 文件,然后再包含 filter.inc.php 文 件,因此可以修改以“cfg_”开头的全局变量。图中这几个页面文件以及包含这几个文件的 页面均可以提交和修改全局变量,几乎 member 目录中所有的页面文件均受此影响。 ![]()
利用一:绕过注册限制注册新会员。变量 cfg_mb_open 决定是否开启会员功能,变量 cfg_mb_allowreg 决定是否开启新会员注册功能,“N”为关闭,否则开启功能,所以即使网 站关闭会员功能,只要提交 cfg_mb_allowreg 变量不为“N”,便可以成功注册新会员,提交 cfg_mb_open 变量不为“N”,则可以使用曾经注册的会员继续登陆!绕过的方法有: 方 法 一 : 修 改 注 册 提 交 页 面 源 码 , 将 form 的 action 值 改 为 “http://127.1/member/reg_new.php?_POST[cfg_mb_allowreg]=Y”,其中“127.1”根据实 际修改。 方法二:修改注册提交页面源码,在 form 中增加“input ”元素,name 属性为 “ COOKIE[cfg mb allowreg]”,值为“Y”(非 “N”)。 利用二:注册已审核新会员。DeDeCMS 系统默认设置时,新注册会员后需要邮件验证, 全局变量 cfg_mb_spacesta 值为会员使用权限开通状态,默认 “-10”为需要邮件验证,“-1” 为手工审核, “0”为没限制,注册页面 reg_new.php 的代码如下: $spaceSta = ($cfg_mb_spacesta < 0 ? $cfg_mb_spacesta : 0); $inQuery = "INSERT INTO `#@ member` (`mtype` ,`userid` ,`pwd` ,`uname` ,`sex` ,`rank` ,`money` ,`email` ,`scores` , `matt`, `spacesta` ,`face`,`safequestion`,`safeanswer` ,`jointime` ,`joinip` ,`logintime` ,`loginip` ) VALUES ('$mtype','$userid','$pwd','$uname','$sex','10','$dfmoney','$email','$dfscores', |