kindeditor php 漏洞,Kindeditor特定情况可能会导致全盘浏览 - 网站安全
因为例子很少,开始想了下不是他们的漏洞,后面想了下,后面没有检查好用户的正常配置内容导致,还是提下吧。
下载地址:
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特定情况可能会导致全盘浏览 - 网站安全相关推荐
- kindeditor php 漏洞,kindeditor=4.1.5 文件上传漏洞 | CN-SEC 中文网
摘要 漏洞存在于 kindeditor 编辑器里,你能上传. txt 和. html 文件,支持 php/asp/jsp/asp.net 漏洞存在于 kindeditor 编辑器里,你能上传. txt ...
- [应用漏洞]KindEditor<=4.1.5 文件上传漏洞利用
一.KindEditor KindEditor 是一套开源的在线HTML编辑器,主要用于让用户在网站上获得所见即所得编辑效果 二.漏洞介绍 影响版本:KindEditor 3.5.2~4.1 简介:K ...
- SQL SERVER中什么情况会导致索引查找变成索引扫描
原文:SQL SERVER中什么情况会导致索引查找变成索引扫描 SQL Server 中什么情况会导致其执行计划从索引查找(Index Seek)变成索引扫描(Index Scan)呢? 下面从几个方 ...
- 会不会导致内存泄漏_可能会导致.NET内存泄露的8种行为
原文连接:https://michaelscodingspot.com/ways-to-cause-memory-leaks-in-dotnet/ 作者 Michael Shpilt.授权翻译,转载请 ...
- 使用ThreadLocal不当可能会导致内存泄露
使用ThreadLocal不当可能会导致内存泄露 基础篇已经讲解了ThreadLocal的原理,本节着重来讲解下使用ThreadLocal会导致内存泄露的原因,并讲解使用ThreadLocal导致内存 ...
- 所生成项目的处理器架构“MSIL”与引用“***”的处理器架构“x86”不匹配。这种不匹配可能会导致运行时失败。请考虑通过配置管理器......
警告:所生成项目的处理器架构"MSIL"与引用"***"的处理器架构"x86"不匹配.这种不匹配可能会导致运行时失败.请考虑通过配置管理器更 ...
- 哪些情况会导致支付接口申请不通过
在支付行业中,一个至关重要的名词就是:支付接口,它还有一个名称叫:支付通道.可以说,接口是一个公司的命脉.优质的接口对支付公司和有接口需求的商户来说,都是极为有利的.所以,掌握优质支付接口的公司,就可 ...
- 免疫力低会怎么样 什么情况会导致免疫降低
都说免疫力是很重要的,它会我们健康的第一道防线,但是当免疫力降低的时候,会出现哪些情况?为什么免疫力会降低? 免疫力是人体的防御系统,就像是维持人体正常运转的军队.免疫力的高低,一定程度上觉得了我们的 ...
- 『叶问』#39,都有哪些情况可能导致MGR服务无法启动
1. 都有哪些情况可能导致MGR服务无法启动 简单整理了下,大概有以下原因可能导致MGR服务无法启动: 网络原因,例如网络本来就不通,或被防火墙拦住.防火墙通常至少有两道,操作系统默认的firewal ...
最新文章
- flutter中的路由跳转
- ASP.Net中自定义Http处理及应用之HttpHandler篇
- 把一个人的特点写具体作文_把一个人的特点写具体500字作文
- Android系统截屏的实现(附代码)
- JAVA常用框架和插件
- java conf_JAVA 解析、编辑nginx.conf详解
- nfc卡模式与标准模式_渠道如何标准化管理,建立新的销售模式,提升业绩完成率...
- 小牛电动京东众筹活动中的违约行为记录
- 不使用软盘加载驱动安装系统的方法--使用nLite集成驱动
- UEditor DIY笔记
- 博文视点大讲堂第40期第一讲:美国TOP60名校逐一点评 圆满结束
- JVM 调优一个月,性能提升了 400 倍!
- servlet输出中文乱码
- 如何在word中的图片上画圈标注_word文字下怎么画圈标记
- spring AOP切面及日志记录实现
- js高级开发:气泡坦克(js对象,属性)
- mysql数据库之mmm
- 计算机软考职称属于哪个大类,计算机软考职称是什么
- 数据结构与算法:冒泡排序、插入排序、选择排序
- JMX学习笔记(四) JMX RMI