### 简要描述: CuuMall免费网上商城系统基于企业级MVC技术架构,安全、稳定,可保证同时在线人数达10000人左右,能适应不同领域的公司企业,文件缓存机制、数据库缓存机制,保证系统稳定运行,多种功能以满足不同客户网上开店的需求。 ### 详细说明: ``` //执行应用程序 static public function exec() { // 是否开启标签扩展 $tagOn = C('APP_PLUGIN_ON'); // 项目运行标签 if($tagOn) tag('app_run'); //创建Action控制器实例 $group = defined('GROUP_NAME') ? GROUP_NAME.C('APP_GROUP_DEPR') : ''; $module = A($group.MODULE_NAME); ... } //这里 MODULE_NAME这个是当前的module,可以用post参数m传入,并且没有做任何过滤。 function A($name,$app='@') { static $_action = array(); if(isset($_action[$app.$name])) return $_action[$app.$name]; $OriClassName = $name; if(strpos($name,C('APP_GROUP_DEPR'))) { $array = explode(C('APP_GROUP_DEPR'),$name); $name = array_pop($array); $className = $name.'Action'; import($app.'.Action.'.implode('.',$array).'.'.$className); }else{ $className = $name.'Action'; import($app.'.Action.'.$className); } if(class_exists($className)) { $action = new $className(); $_action[$app.$OriClassName] = $action; return $action; }else { return false; } }...
### 简要描述: CuuMall免费网上商城系统基于企业级MVC技术架构,安全、稳定,可保证同时在线人数达10000人左右,能适应不同领域的公司企业,文件缓存机制、数据库缓存机制,保证系统稳定运行,多种功能以满足不同客户网上开店的需求。 ### 详细说明: ``` //执行应用程序 static public function exec() { // 是否开启标签扩展 $tagOn = C('APP_PLUGIN_ON'); // 项目运行标签 if($tagOn) tag('app_run'); //创建Action控制器实例 $group = defined('GROUP_NAME') ? GROUP_NAME.C('APP_GROUP_DEPR') : ''; $module = A($group.MODULE_NAME); ... } //这里 MODULE_NAME这个是当前的module,可以用post参数m传入,并且没有做任何过滤。 function A($name,$app='@') { static $_action = array(); if(isset($_action[$app.$name])) return $_action[$app.$name]; $OriClassName = $name; if(strpos($name,C('APP_GROUP_DEPR'))) { $array = explode(C('APP_GROUP_DEPR'),$name); $name = array_pop($array); $className = $name.'Action'; import($app.'.Action.'.implode('.',$array).'.'.$className); }else{ $className = $name.'Action'; import($app.'.Action.'.$className); } if(class_exists($className)) { $action = new $className(); $_action[$app.$OriClassName] = $action; return $action; }else { return false; } } //这里执行加载模块功能:import($app.'.Action.'.implode('.',$array).'.'.$className); ``` ``` function import($class,$baseUrl = '',$ext='.class.php') { static $_file = array(); static $_class = array(); $class = str_replace(array('.','#'), array('/','.'), $class); if('' === $baseUrl && false === strpos($class,'/')) { // 检查别名导入 return alias_import($class); } //echo(' '.$class.$baseUrl); if(isset($_file[$class.$baseUrl])) return true; else $_file[$class.$baseUrl] = true; $class_strut = explode("/",$class); if(empty($baseUrl)) { if('@'==$class_strut[0] || APP_NAME == $class_strut[0] ) { //加载当前项目应用类库 $baseUrl = dirname(LIB_PATH); $class = str_replace(array(APP_NAME.'/','@/'),LIB_DIR.'/',$class); }elseif(in_array(strtolower($class_strut[0]),array('think','org','com'))) { //加载ThinkPHP基类库或者公共类库 // think 官方基类库 org 第三方公共类库 com 企业公共类库 $baseUrl = THINK_PATH.'/Lib/'; }else { // 加载其他项目应用类库 $class = substr_replace($class, '', 0,strlen($class_strut[0])+1); $baseUrl = APP_PATH.'/../'.$class_strut[0].'/'.LIB_DIR.'/'; } } if(substr($baseUrl, -1) != "/") $baseUrl .= "/"; $classfile = $baseUrl . $class . $ext; if($ext == '.class.php' && is_file($classfile)) { // 冲突检测 $class = basename($classfile,$ext); if(isset($_class[$class])) throw_exception(L('_CLASS_CONFLICT_').':'.$_class[$class].' '.$classfile); $_class[$class] = $classfile; } //导入目录下的指定类库文件 return require_cache($classfile); } ``` 这里先将$class 的.替换成/,#替换成.号。这样我们可以传入的时候用##/就可以达到目录切换。 后面又做了一次$class = str_replace(array(APP_NAME.'/','@/'),LIB_DIR.'/',$class);其中APP_NAME的值是点号, 这样./会被替换掉。但是在windows下可以利用\代替/以达到绕过。 最后return require_cache($classfile);直接包含文件。 POC: m=%23%23\%23%23\%23%23\info%23php%00 (info.php是网站自带的) ### 漏洞证明: [<img src="https://images.seebug.org/upload/201409/291658429b14f0a0d9dc1ffbe20fb59db832c2bd.png" alt="BaiduHi_2014-9-29_16-58-12.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201409/291658429b14f0a0d9dc1ffbe20fb59db832c2bd.png)