Kindeditor特定情況可能會導致全盤瀏覽

2021-12-29 22:16:12 字數 3377 閱讀 4345

因為例子很少,開始想了下不是他們的漏洞,後面想了下,後面沒有檢查好使用者的正常配置內容導致,還是提下吧。

貌似是最新版本的。

測試語言:php

測試漏洞檔案:/kindeditor/php/file_manager_json.php

預設配置(第16行):

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

當/attached/資料夾不存在(被刪)或者被改名為乙個不存在的目錄時,如網上的乙個例子:

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

這個cms下面的目錄根本就沒得這個目錄,所以就造成了漏洞。

怎麼造成了漏洞的呢?我們分析下。

<?php /**

* 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,可以指定絕對路徑,比如

$root_url = $php_url . '../../../upload/';

//副檔名

//目錄名

$dir_name = empty($_get['dir']) ? '' : trim($_get['dir']);

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

if ($dir_name !== '')

}//根據path引數,設定各路徑和url

if (empty($_get['path'])) else

//echo realpath($root_path);

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

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

//不允許使用..移動到上一級目錄

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

//最後乙個字元不是/

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

//目錄不存在或不是目錄

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

//遍歷目錄取得檔案資訊

$file_list = array();

if ($handle = opendir($current_path)) == '.') continue;

$file = $current_path . $filename;

if (is_dir($file)) else

$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) else if (!$a['is_dir'] && $b['is_dir']) else else if ($a['filesize'] < $b['filesize']) else

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

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資料夾被我刪了):

網際網路找到的:

再驗證下絕對路徑?

易企CMS特定情況下Getshell漏洞分析

易企cms yiqicms 是國內知名的營銷型企業建站系統,基於php mysql開發。免費開源,對seo較為友好。近日,阿里的補丁監控平台diviner監測到yiqicms在特定情況下被getshell的漏洞。出現該漏洞的程式來自yiqicms1.8以下版本,在某些web套件中可觸發getshel...

匯入 在特定情況下的簡單SSO實現方案

最近需要實現類似單點登入的功能。情況是這樣的,最初在做 a,做著做著,要做 b了,要求與 a完全分開作為兩個應用,但使用者資料要求與 a保持一致,也要求使用者在 a登入後,轉到 b時不需要再登入。怎麼樣,標準的sso吧。查了一些資料,了解了不少原理。園子裡的幾個兄弟也寫得很多了,比如 jillzha...

AHK 只在某些特定情景生效的熱鍵

在某特定控制項啟用時生效。可以在記事本中測試 編輯視窗為edit1控制項 在word中不生效 if activecontrolis edit1 6 send 7 msgbox ifactivecontrolis control 在某類控制項啟用時生效,如下 示例 在所有的編輯控制項中的輕鬆刪除單詞的...