因為例子很少,開始想了下不是他們的漏洞,後面想了下,後面沒有檢查好使用者的正常配置內容導致,還是提下吧。
貌似是最新版本的。
測試語言: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 在某類控制項啟用時生效,如下 示例 在所有的編輯控制項中的輕鬆刪除單詞的...