CuuMall最新版任意文件包含

admin 2015年6月27日04:14:25评论278 views字数 217阅读0分43秒阅读模式
摘要

2014-09-29: 细节已通知厂商并且等待厂商处理中
2014-10-04: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放(绿盟科技、唐朝安全巡航、无声信息)
2014-11-28: 细节向核心白帽子及相关领域专家公开
2014-12-08: 细节向普通白帽子公开
2014-12-18: 细节向实习白帽子公开
2014-12-25: 细节向公众公开

漏洞概要 关注数(5) 关注此漏洞

缺陷编号: WooYun-2014-77803

漏洞标题: CuuMall最新版任意文件包含 CuuMall最新版任意文件包含

相关厂商: cuumall.com

漏洞作者: 路人甲

提交时间: 2014-09-29 18:16

公开时间: 2014-12-25 18:18

漏洞类型: 文件包含

危害等级: 高

自评Rank: 20

漏洞状态: 漏洞已经通知厂商但是厂商忽略漏洞

漏洞来源:www.wooyun.org ,如有疑问或需要帮助请联系

Tags标签: php源码审核

3人收藏


漏洞详情

披露状态:

2014-09-29: 细节已通知厂商并且等待厂商处理中
2014-10-04: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2014-11-28: 细节向核心白帽子及相关领域专家公开
2014-12-08: 细节向普通白帽子公开
2014-12-18: 细节向实习白帽子公开
2014-12-25: 细节向公众公开

简要描述:

CuuMall免费网上商城系统基于企业级MVC技术架构,安全、稳定,可保证同时在线人数达10000人左右,能适应不同领域的公司企业,文件缓存机制、数据库缓存机制,保证系统稳定运行,多种功能以满足不同客户网上开店的需求。

详细说明:

code 区域
//执行应用程序
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);
code 区域
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('<br>'.$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是网站自带的)

漏洞证明:

CuuMall最新版任意文件包含

修复方案:

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2014-12-25 18:18

厂商回复:

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):

登陆后才能进行评分


评价

  1. 2014-09-30 09:25 | menmen519 ( 普通白帽子 | Rank:970 漏洞数:166 | http://menmen519.blog.sohu.com/)

    0

    这个东西 我老早之前看过 怎么zend 反编译不出来

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin