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

下载地址:

http://kindeditor.googlecode.com/files/kindeditor-4.1.10.zip

貌似是最新版本的。

测试语言:PHP

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

默认配置(第16行):

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

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

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

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

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

/**

* KindEditor PHP

*

* 本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 = empty($_GET['dir']) ? '' : trim($_GET['dir']);

if (!in_array($dir_name, array('', 'image', 'flash', 'media', 'file'))) {

echo "Invalid Directory name.";

exit;

}

if ($dir_name !== '') {

$root_path .= $dir_name . "/";

$root_url .= $dir_name . "/";

if (!file_exists($root_path)) {

mkdir($root_path);

}

}

//根据path参数,设置各路径和URL

if (empty($_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);

}

//echo realpath($root_path);

//排序形式,name or size or type

$order = empty($_GET['order']) ? 'name' : strtolower($_GET['order']);

//不允许使用..移动到上一级目录

if (preg_match('/\.\./', $current_path)) {

echo 'Access is not allowed.';

exit;

}

//最后一个字符不是/

if (!preg_match('/\/$/', $current_path)) {

echo 'Parameter is not valid.';

exit;

}

//目录不存在或不是目录

if (!file_exists($current_path) || !is_dir($current_path)) {

echo 'Directory does not exist.';

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-d H:i:s', filemtime($file)); //文件最后修改时间

$i++;

}

closedir($handle);

}

//排序

function cmp_func($a, $b) {

global $order;

if ($a['is_dir'] && !$b['is_dir']) {

return -1;

} else if (!$a['is_dir'] && $b['is_dir']) {

return 1;

} else {

if ($order == 'size') {

if ($a['filesize'] > $b['filesize']) {

return 1;

} else if ($a['filesize'] < $b['filesize']) {

return -1;

} else {

return 0;

}

} else if ($order == 'type') {

return strcmp($a['filetype'], $b['filetype']);

} else {

return strcmp($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 = new Services_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文件夹被我删了):

互联网找到的:

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

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

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

修复方案:

再验证下绝对路径?

kindeditor php 漏洞,Kindeditor特定情况可能会导致全盘浏览 - 网站安全相关推荐

  1. kindeditor php 漏洞,kindeditor=4.1.5 文件上传漏洞 | CN-SEC 中文网

    摘要 漏洞存在于 kindeditor 编辑器里,你能上传. txt 和. html 文件,支持 php/asp/jsp/asp.net 漏洞存在于 kindeditor 编辑器里,你能上传. txt ...

  2. [应用漏洞]KindEditor<=4.1.5 文件上传漏洞利用

    一.KindEditor KindEditor 是一套开源的在线HTML编辑器,主要用于让用户在网站上获得所见即所得编辑效果 二.漏洞介绍 影响版本:KindEditor 3.5.2~4.1 简介:K ...

  3. SQL SERVER中什么情况会导致索引查找变成索引扫描

    原文:SQL SERVER中什么情况会导致索引查找变成索引扫描 SQL Server 中什么情况会导致其执行计划从索引查找(Index Seek)变成索引扫描(Index Scan)呢? 下面从几个方 ...

  4. 会不会导致内存泄漏_可能会导致.NET内存泄露的8种行为

    原文连接:https://michaelscodingspot.com/ways-to-cause-memory-leaks-in-dotnet/ 作者 Michael Shpilt.授权翻译,转载请 ...

  5. 使用ThreadLocal不当可能会导致内存泄露

    使用ThreadLocal不当可能会导致内存泄露 基础篇已经讲解了ThreadLocal的原理,本节着重来讲解下使用ThreadLocal会导致内存泄露的原因,并讲解使用ThreadLocal导致内存 ...

  6. 所生成项目的处理器架构“MSIL”与引用“***”的处理器架构“x86”不匹配。这种不匹配可能会导致运行时失败。请考虑通过配置管理器......

    警告:所生成项目的处理器架构"MSIL"与引用"***"的处理器架构"x86"不匹配.这种不匹配可能会导致运行时失败.请考虑通过配置管理器更 ...

  7. 哪些情况会导致支付接口申请不通过

    在支付行业中,一个至关重要的名词就是:支付接口,它还有一个名称叫:支付通道.可以说,接口是一个公司的命脉.优质的接口对支付公司和有接口需求的商户来说,都是极为有利的.所以,掌握优质支付接口的公司,就可 ...

  8. 免疫力低会怎么样 什么情况会导致免疫降低

    都说免疫力是很重要的,它会我们健康的第一道防线,但是当免疫力降低的时候,会出现哪些情况?为什么免疫力会降低? 免疫力是人体的防御系统,就像是维持人体正常运转的军队.免疫力的高低,一定程度上觉得了我们的 ...

  9. 『叶问』#39,都有哪些情况可能导致MGR服务无法启动

    1. 都有哪些情况可能导致MGR服务无法启动 简单整理了下,大概有以下原因可能导致MGR服务无法启动: 网络原因,例如网络本来就不通,或被防火墙拦住.防火墙通常至少有两道,操作系统默认的firewal ...

最新文章

  1. flutter中的路由跳转
  2. ASP.Net中自定义Http处理及应用之HttpHandler篇
  3. 把一个人的特点写具体作文_把一个人的特点写具体500字作文
  4. Android系统截屏的实现(附代码)
  5. JAVA常用框架和插件
  6. java conf_JAVA 解析、编辑nginx.conf详解
  7. nfc卡模式与标准模式_渠道如何标准化管理,建立新的销售模式,提升业绩完成率...
  8. 小牛电动京东众筹活动中的违约行为记录
  9. 不使用软盘加载驱动安装系统的方法--使用nLite集成驱动
  10. UEditor DIY笔记
  11. 博文视点大讲堂第40期第一讲:美国TOP60名校逐一点评 圆满结束
  12. JVM 调优一个月,性能提升了 400 倍!
  13. servlet输出中文乱码
  14. 如何在word中的图片上画圈标注_word文字下怎么画圈标记
  15. spring AOP切面及日志记录实现
  16. js高级开发:气泡坦克(js对象,属性)
  17. mysql数据库之mmm
  18. 计算机软考职称属于哪个大类,计算机软考职称是什么
  19. 数据结构与算法:冒泡排序、插入排序、选择排序
  20. JMX学习笔记(四) JMX RMI

热门文章

  1. 电信系统服务器地址,电信服务器ip地址
  2. 【NLP】讯飞英文学术论文分类挑战赛Top10开源多方案--2 数据分析
  3. mysql和PG查看表数据大小
  4. 能源站控制(HVAC系统)
  5. 无线路由器QoS设置——连接数限制
  6. 知客CRM:客户关系管理2.0
  7. [Java]ResultSet的用法与实例
  8. Redis 交集并集差集
  9. QT5标准弹窗按钮翻译中文(按钮汉化)
  10. 怎么样才能克服对英语的恐惧?